如何在更改某些单元格后使用POI读取Excel公式的结果

我有一个简单的Excel文件,A1是B1 + C1。 B1是1,C1是4

我可以在POI中读到这个,并从A1中显示公式的结果:

workbook=XSSFWorkbook( fis ); sheet = workbook.getSheetAt(0); evaluator = workbook.getCreationHelper().createFormulaEvaluator(); row = sheet.getRow(0); cell = row.getCell(0); cellValue.getNumberValue(); 

现在假设我更新B1:

 sheet.getRow(0).getCell(1).setCellValue(5) 

如何从A1读取更新的值(9)。 该文档build议XSSFFormulaEvaluator的评估(单元格),但这仍然返回5,如调用XSSFFormulaEvaluator.evaluateAllFormulaCells(工作簿)例如

 XSSFFormulaEvaluator.evaluateAllFormulaCells(workbook); sheet = workbook.getSheetAt(0); row = sheet.getRow(0); cell = row.getCell(0); cellValue = evaluator.evaluate(cell); 

但是,如果我保存并重新加载.xlsx文件(通过POI或Excel本身),然后A1是9预期,但我想避免保存步骤

呼叫

 evaluator.notifyUpdateCell( sheet.getRow(0).getCell(1) ); 

在evaluateator.evaluate(cell)之前,它将刷新它的内部caching并更新值。 或者得到一个新的评估者。 请参阅性能注释@ http://poi.apache.org/spreadsheet/eval.html