2011-04-29 111 views
4

我試圖使用POI XSSF來評估一些Excel公式。 這些值不必保存,我可能必須計算許多公式,所以我試圖在同一個單元格中完成所有操作。使用Apache POI在電子表格中重新計算公式使用

的問題是,單元格的值似乎停滯在第一個公式中輸入即使我重新計算

FormulaEvaluator evaluator = wb.getCreationHelper().createFormulaEvaluator(); 
XSSFCell formulaCell = row.createCell(6); 
formulaCell.setCellFormula("Date(2011,10,6)"); 
CellValue cellValue = evaluator.evaluate(formulaCell); 
System.out.println(cellValue.getNumberValue()); 

formulaCell.setCellFormula("Date(1911,3,4)"); 
cellValue = evaluator.evaluate(formulaCell); 
System.out.println(cellValue.getNumberValue()); 

此輸出40822.0 40822.0(EXCEL的2011年10月6日當量)兩次,而不是重新評估新的公式。

回答

5

如果使用formulaEvaluator不止一次,你需要這條線在使用之間,否則它使用相同的結果每次。

formulaEvaluator.clearAllCachedResultValues() 
2

FormulaEvaluator高速緩存單元格計算值以加快處理速度。如果您在創建評估器後執行單元更新,那麼您需要告訴它!

有關更多詳細信息,請參閱FormulaEvaluator文檔。對於你的情況下,嘗試:

formulaCell.setCellFormula("Date(1911,3,4)"); 
evaluator.notifySetFormula(formulaCell); 
cellValue = evaluator.evaluate(formulaCell); 
System.out.println(cellValue.getNumberValue()); 
0

您可以使用以下步驟完成工作。這些是您可以使用任何一種功能的兩種解決方案。它會評估完整的工作簿,因此無論使用哪種公式都會得到評估。希望這可以幫助。

1)evaluateator.evaluateAll(); 2)XSSFFormulaEvaluator.evaluateAllFormulaCells(wb);

相關問題