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>

仅需 Excel 能力时可单独引 officia-cells

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 → 求值),支持一批常用函数。

独立公式求值

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

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 后消失(见 授权与加载)。