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

时间:2015-09-11 13:32:47

标签: java excel apache-poi

我有一个简单的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)。文档建议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,但我想避免保存步骤

1 个答案:

答案 0 :(得分:4)

呼叫

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

在evaluateator.evaluate(cell)之前,它将刷新它的内部缓存并更新该值。或者获得一个新的评估者。请参阅效果说明@ http://poi.apache.org/spreadsheet/eval.html