使用Apache POI重新计算电子表格中的公式

我正在尝试使用POI XSSF来评估一些Excel公式。 值不必保存,我可能需要计算许多公式,所以我试图在同一个单元格中完成。

问题在于,即使在我重新计算之后,单元格值似乎也卡在了input的第一个公式上

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相当于10/6/2011),而不是重新评估新的公式。

如果多次使用formulaEvaluator,则在两次使用之间需要此行,否则每次都使用相同的结果。

 formulaEvaluator.clearAllCachedResultValues() 

FormulaEvaluatorcaching单元格计算值以加快处理速度。 如果您在创build评估器后执行单元更新,那么您需要告诉它!

有关更多详细信息,请参阅FormulaEvaluator文档。 对于你的情况,请尝试:

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

您可以使用以下步骤完成您的工作。 这是两种解决scheme,您可以使用任何一种function。 它评估完整的工作簿,所以你使用任何公式将得到评估。 希望这可以帮助。

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