使用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);
- 写入工作簿时获取java.lang.NullPointerException WorkBook.write(out)Apache POI
- 如何为使用WorkbookFactory创build的工作簿创buildCellStyle?
- 使用Apache POI将父列添加到Excel数据透视表
- 如何使用java和apache poi删除excel中的空单元格
- 如何获取Excel数据validation下拉参考单元范围的值
- 什么样的头部签名是0x7473657571655220?
- XSSFWorkbook花费很多时间来加载一个Excel(.xlsx)文件
- 如何使用HSSF从Excel单元格中读取字母数字数据?
- 如何通过Java POI在Excel中移动图表的位置