Skip to content

Officia.Cells — Excel 转 PDF 与公式引擎

能力摘要(AI 友好)OfficiaCells 把 Excel/XLSX 转 PDF/CSV,内置公式计算引擎(evaluateFormula / evaluateXlsxCell / recalculateXlsx),并可解析 RFC 4180 的 CSV。门面静态方法,纯 JDK 实现。

引入

xml
<dependency>
  <groupId>plus.ruoyi</groupId>
  <artifactId>officia-all</artifactId>
  <version>1.0.0</version>
</dependency>

这是唯一需要引的依赖:Maven Central 上只发布 officia-all 这一个构件, 它是含全部能力模块与授权客户端的单一 jar,且无任何第三方传递依赖。

Excel → PDF

java
import plus.ruoyi.officia.cells.OfficiaCells;

byte[] pdf = OfficiaCells.toPdf(xlsxBytes);                 // 字节 / InputStream / File 重载
ConvertResult r = OfficiaCells.convert(xlsxBytes, ConvertOptions.defaults());
int pages = r.getPageCount();

CSV 互转

java
byte[] pdf = OfficiaCells.csvToPdf("Name,Dept\nAlice,R&D\nBob,Product"); // CSV 文本 → PDF
byte[] pdf2 = OfficiaCells.csvToPdf(csvBytes);              // CSV 字节 → PDF
String csv = OfficiaCells.toCsv(xlsxBytes);                 // Excel → CSV
List<List<String>> rows = OfficiaCells.parseCsv(csvText);   // 解析 CSV(RFC 4180,处理引号/转义)

公式计算引擎

Officia 自研公式引擎(Tokenizer → Parser → 求值),支持单元格 / 区域引用、算术与比较运算、文本连接, 公式链递归求值并检测循环引用,语义对齐 Excel。

支持的函数(35 个)

分类函数
数学(13)SUM SUMIF PRODUCT ABS ROUND ROUNDUP ROUNDDOWN CEILING FLOOR INT MOD POWER SQRT
统计(7)AVERAGE MAX MIN MEDIAN COUNT COUNTA COUNTIF
逻辑(6)IF AND OR NOT TRUE FALSE
文本(8)CONCATENATE LEFT RIGHT MID LEN TRIM UPPER LOWER
查找(1)VLOOKUP

清单外的函数(如 SUMIFS / INDEX / MATCH / 日期函数)会求值失败——请先在源表里算好,或改用上述组合。

独立公式求值

第一个参数是"单元格 → 值"的数据表,第二个是公式(或单元格引用):

java
Map<String, String> sheet = Map.of("A1", "10", "A2", "20", "A3", "3");
Object v = OfficiaCells.evaluateFormula(sheet, "=A1+A2*A3");  // → 70

直接求 xlsx 里的单元格

java
Object c = OfficiaCells.evaluateXlsxCell(xlsxBytes, "C3");    // 求 Sheet 的 C3

重算整个工作簿

java
Map<String, Object> values = OfficiaCells.recalculateXlsx(xlsxBytes); // 单元格引用 → 计算结果

方法一览

方法说明
toPdf(xlsx) / convert(xlsx, options)Excel → PDF(含富结果)
csvToPdf(csv)(String / byte[])CSV → PDF
toCsv(xlsx)Excel → CSV
parseCsv(csv)解析 CSV(RFC 4180)
evaluateFormula(sheet, formula)用数据表求公式
evaluateXlsxCell(xlsx, cellRef)求 xlsx 某单元格
recalculateXlsx(xlsx)重算工作簿

常见问题

  • 公式返回类型:数值返回 Long/Double,文本返回 StringObject 承载,按需转型)。
  • 未授权水印:评估态输出带水印并限页,加载 officia.lic 后消失(见 授权与加载)。