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

时间:2011-04-29 18:59:12

标签: java excel apache-poi xssf hssf

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

问题是即使我重新计算后,单元格值似乎仍然卡在第一个输入的公式上

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)两次而不是重新评估新公式。

3 个答案:

答案 0 :(得分:5)

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

formulaEvaluator.clearAllCachedResultValues()

答案 1 :(得分:2)

FormulaEvaluator缓存单元格计算值以加快处理速度。如果在创建评估器后执行单元更新,则需要告诉它!

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

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

答案 2 :(得分:0)

您可以使用以下步骤完成工作。这些是两种解决方案,您可以使用任何一种功能。它会评估完整的工作簿,因此您使用的任何公式都将得到评估。希望这会有所帮助。

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