2010-08-31 82 views
1

我正在使用apache poi和java for excel manipulation.i通过编程方式使用java修改了excel文件中的一些单元。请帮助解决我在apache poi和excel中的问题

之后,当我手动打开该excel文件以查看该update.after看到后,当我尝试关闭该excel文件时,它再次问我喜欢“是否要保存对test.xls文件所做的更改。

如果我按Yes按钮,那么只有我能编程further.otherwise读出公式单元格的值,如果我访问它返回0值的公式单元格值....

如何解决这个问题....

请指导我解决此问题。

+1

能否请您提供一些代码,你如何修改你的Excel工作表中公式计算? – 2010-08-31 08:51:10

+0

你应该从'请帮助解决我在apache poi和excel中遇到的问题'中的问题摘要,以更准确地解决你的问题,而如果没有示例,我将无法理解。 – rsilva4 2010-08-31 09:06:56

回答

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); 
+0

重新计算所有公式的更快方法是 HSSFFormulaEvaluator.evaluateAllFormulaCells(wb); – Pino 2012-12-28 14:01:14

0

仍然不能发表评论,所以我会留下一个新的答案。 Joeri答案是只有一个细胞

对于多细胞正确的是更有效地使用如下因素:

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

这将在事实上更新缓存配方值。

然后让他们你会做,你会为任何其他细胞,例如:

cell.getCellStringValue(); 

这种方法是值得一用的,如果你要重新审视整个工作簿。

注意到,在这一天我正在写的POI只有POI 3.10-beta1版可以使用日期