4

我正在尝试使用 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 相当于 2011 年 6 月 10 日),而不是重新评估新公式。

4

3 回答 3

5

如果您多次使用 formulaEvaluator,则在两次使用之间需要这条线,否则每次都使用相同的结果。

formulaEvaluator.clearAllCachedResultValues()
于 2011-05-25T17:50:49.590 回答
2

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

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

formulaCell.setCellFormula("Date(1911,3,4)");
evaluator.notifySetFormula(formulaCell);
cellValue = evaluator.evaluate(formulaCell);
System.out.println(cellValue.getNumberValue());
于 2011-05-01T08:02:20.910 回答
0

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

1) 评估者.evaluateAll(); 2) XSSFFormulaEvaluator.evaluateAllFormulaCells(wb);

于 2017-06-14T05:45:52.260 回答