gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 04:49:15 27 4
gpt4 key购买 nike

在我的项目中,我使用 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)中实现公式求值?

最佳答案

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() 不太可能起作用;通常,您需要在写入后逐一评估单元格。您还会遇到到处引用的公式,因为它们只有在它们引用的单元格位于当前窗口中并且尚未刷新到磁盘时才起作用。

关于java - Apache POI 评估 SXSSF 工作簿中的公式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29390924/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com