2011-04-29 84 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);

相关问题