在我的项目中,我使用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)中实现公式评估?
答案 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)