请帮助解决我在apache poi和excel中的问题

时间:2010-08-31 08:47:30

标签: java apache-poi

我正在使用apache poi和java进行excel manip.i已经使用java以编程方式修改了excel文件中的一些单元格。

之后,当我手动打开excel文件以查看更新时。在看到之后,当我尝试关闭excel文件时,它再次问我“你想保存你对test.xls文件所做的更改。

如果我按下是按钮,那么只有我能够以编程方式进一步读取公式单元格值。否则,如果我访问公式单元格值,则返回0值....

如何解决此问题....

请指导我获得此解决方案。

2 个答案:

答案 0 :(得分:4)

默认情况下,POI会在您读取该单元格时读取对公式的缓存响应。使用Excel打开文件时,它将执行计算。然后,当您保存文件时,响应将一起保存。然后当你用poi阅读它时,你会得到正确的答案。

如果您想要'正确'的答案,您需要计算公式响应。上次我需要这样做时,我必须编写自己的解析器,但现在就是:http://poi.apache.org/spreadsheet/eval.html

或简而言之:

Workbook wb = new HSSFWorkbook(inputstream);
FormulaEvaluator evaluator = wb.getCreationHelper().createFormulaEvaluator();
... snip ...
CellValue value = evaluator.evaluate(cellWithFormula);

答案 1 :(得分:0)

还不能发表评论,所以我会留下新的答案。 Joeri的回答只适用于一个Cell

对于多个单元格,使用以下内容更有效:

FormulaEvaluator fe = wb.getCreationHelper().createFormulaEvaluator();
fe.evaluateAll();

实际上会更新缓存的公式值。

然后,为了得到它们,你将像对待任何其他细胞一样,例如:

cell.getCellStringValue();

如果必须重新评估整个工作簿,则此方法值得使用。

请注意,在我写作的当天,只有POI 3.10-beta1版本的POI可以使用日期评估公式