2010-08-31 106 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版可以使用日期