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,文本返回String(Object承载,按需转型)。 - 未授权水印:评估态输出带水印并限页,加载
officia.lic后消失(见 授权与加载)。