在我的项目中,我使用 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 回答
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'也会遇到遍布整个地方的公式,因为它们已被刷新到磁盘 .只是尝试添加以下依赖项,看起来你缺少XSSF的其他jar
显示问题的波纹管图像(在SXSSF中,您无法评估公式)