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

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

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

但是这样做会引发exception

 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 ,所以抛出exception。

所以问题是:在stream式工作簿(SXSSF)中有没有实现公式评估的方法?

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

您的问题是您使用的是过时的Apache POI版本。 这就是为什么当你尝试评估SXSSF单元时你会遇到exception。 正如方程式评估文档末尾所详述的那样 ,对于SXSSF公式评估,您需要使用3.13 beta 2或更高版本。

有一点需要注意的是 – Formula Evaluation不仅需要配方中的细胞记忆,而且还需要任何其他的细胞以及它们所指的任何细胞。 因此,调用FormulaEvaluator.evaluateAll()是不太可能的。 你通常需要在写完之后一个一个地评估单元格。 你也会努力使用遍布各处的公式,因为只有当它们引用的单元格在当前窗口中,并且没有被刷新到磁盘时,它们才会工作。

只是尝试添加下面的依赖关系看起来像缺lessXSSF的其他jar子

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

显示问题的波纹pipe图像(在SXSSF中,您无法评估该公式) 在这里输入图像说明