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

时间:2015-04-01 12:30:31

标签: java excel apache-poi

在我的项目中,我使用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 个答案:

答案 0 :(得分:2)

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

您的问题是您使用过旧版本的Apache POI。这就是您在尝试评估SXSSF单元格时获得异常的原因。作为detailed towards the end of the Formula Evaluation documentation,对于SXSSF公式评估,您需要使用3.13 beta 2或更高版本。

有一件事需要注意 - 公式评估不仅需要具有公式的单元格在内存中,还需要它所引用的任何其他单元格以及它们引用的任何单元格。因此,拨打FormulaEvaluator.evaluateAll()的可能性不大;你通常需要在写完后逐个评估细胞。你也会对遍布整个地方的公式感到困惑,因为他们只有在他们所指的单元格在当前窗口中时才会工作,并且还没有被刷新到磁盘。

答案 1 :(得分:1)

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

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

答案 2 :(得分:-1)

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