我正在使用apache poi和java进行excel manip.i已经使用java以编程方式修改了excel文件中的一些单元格。
之后,当我手动打开excel文件以查看更新时。在看到之后,当我尝试关闭excel文件时,它再次问我“你想保存你对test.xls文件所做的更改。
如果我按下是按钮,那么只有我能够以编程方式进一步读取公式单元格值。否则,如果我访问公式单元格值,则返回0值....
如何解决此问题....
请指导我获得此解决方案。
答案 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可以使用日期评估公式