2013-07-29 259 views
9

我正在使用apache POI更改Excel表單中的單元格。在更改值後,具有與已更改的單元格對應的公式的單元格不會更新。Excel公式不更新單元格

當我進入excel並用公式單擊單元格,然後單擊功能欄中的公式更新。

我有計算選項設置爲自動更新。

快速示例。

行:

[A2 + A3] [1] [2]

這裏A1將等於3

當我使用改變它POI:

[A2 + A3] [2] [5]

A1仍然等於3,直到我點擊該單元格。

刷新工作簿或工作表也不起作用。這是Excel或POI的問題嗎?任何人都可以想到解決方法嗎?

+0

你的問題不清楚。請描述確切的操作順序,包括在Excel中打開和關閉工作表。你做了以下步驟? 1)創建工作表; 2)關閉Excel; 3)運行你的Java程序; 4)在Excel中重新打開工作表?如果不是,請正確描述你的工作。 –

+2

其他人回答沒有這樣的描述,這種描述在這種情況下有點不相關。 – PandaBearSoup

回答

20

如果您使用XSSF工作簿,可以重新評估所有的公式的單元格如下:

HSSFFormulaEvaluator.evaluateAllFormulaCells(workbook) 

:如果您使用的是HSSF工作簿是否存在

XSSFFormulaEvaluator.evaluateAllFormulaCells(workbook) 

類似的API或者,具體取決於你如何設置以及你想要完成什麼,你應該能夠找到你的解決方案here

+0

是的,當我注意到這個問題時,這就是解決方法。我更想知道爲什麼excel不會自動更新單元格,而不僅僅是當我點擊它們。刷新工作簿也應該起作用。看起來像一個錯誤。我會接受這個答案,因爲它在技術上解決了根本問題。 – PandaBearSoup

+1

@PandaBearSoup Apache POI文檔中的[Why Evaluate Formulas](http://poi.apache.org/spreadsheet/eval.html#WhyEvaluate)部分解釋了爲什麼您需要這樣做,我建議您閱讀一下 – Gagravarr

2

您必須明確觸發重新計算。請參閱重新計算公式部分here關於爲什麼&該怎麼做。

9

如果你的表有一些公式發言權A3=sum(A1:A2)被計算並且將其與A1=5, A2 =4.如果與2等

sh.getRow(0).getCell(0).setCellValue(2); //設置A1 = 2 改變A2的值,並執行寫入操作時,檢查它仍呈現9 A3的值工作正常現在這看起來不對,但實際上並非如此。重點是Excel緩存先前計算的結果,並且需要觸發重新計算才能更新它們。

wb.getCreationHelper().createFormulaEvaluator().evaluateAll();

wb.setForceFormulaRecalculation(true); ,然後執行寫操作。這會給你正確的結果。詳情check here

+1

好複製粘貼作業。 –

+0

我沒有足夠的聲望發佈上述解決方案的評論。所以我已經貼上了解決方案。 – nilamber

+0

非常感謝! wb.setForceFormulaRecalculation(真); =>對我來說就像一個魅力! –

相關問題