首页 文章

Apache POI评估SXSSF工作簿中的公式

提问于
浏览
0

在我的项目中,我使用 SXSSFWorkbook (Apache-POI 3.9)类来管理大型电子表格 . 现在我需要评估一些单元格的公式,所以我尝试使用这样的FormulaEvaluator

...
SXSSFWorkbook streamingWorkbook = new SXSSFWorkbook(100);
...
FormulaEvaluator fe = streamingWorkbook.getCreationHelper().createFormulaEvaluator();
...
fe.evaluateInCell(cell);

但这样做会引发异常

java.lang.ClassCastException: org.apache.poi.xssf.streaming.SXSSFCell cannot be cast to org.apache.poi.xssf.usermodel.XSSFCell
at     org.apache.poi.xssf.usermodel.XSSFFormulaEvaluator.evaluateInCell(XSSFFormulaEvaluator.java:177)
at org.apache.poi.xssf.usermodel.XSSFFormulaEvaluator.evaluateInCell(XSSFFormulaEvaluator.java:44)

...

此错误的直接原因很明显:方法 .evaluateInCell 采用 Cell 对象,但在内部将 Cell 强制转换为 XSSFCell . 因为我传递的是 SXSSFCell ,所以抛出了异常 .

所以问题是:有没有办法在流媒体工作簿(SXSSF)中实现公式评估?

3 回答

  • 1

    TL; DR - 您需要的支持不在您使用的旧版本3.9中,因此您需要升级到3.13 beta 2或更高版本 .

    您的问题是,当您尝试评估SXSSF单元时,为什么会出现异常 . 作为detailed towards the end of the Formula Evaluation documentation,对于SXSSF公式评估,您需要使用3.13 beta 2或更高版本 .

    有一件事要注意 - 公式评估不仅需要具有公式的单元格在内存中,还需要它所引用的任何其他单元格,以及它们所引用的任何单元格 . 因此,对 FormulaEvaluator.evaluateAll() 的调用不太可行;你'll normally need to evaluate cells one-by-one just after writing. You'也会遇到遍布整个地方的公式,因为它们已被刷新到磁盘 .

  • -1

    只是尝试添加以下依赖项,看起来你缺少XSSF的其他jar

    <dependency>
        <groupId>org.apache.poi</groupId>
        <artifactId>poi-ooxml</artifactId>
        <version>????</version>
    </dependency>
    
  • 2

    显示问题的波纹管图像(在SXSSF中,您无法评估公式)
    enter image description here

相关问题