我有一个简单的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,但我想避免保存步骤
答案 0 :(得分:4)
呼叫
evaluator.notifyUpdateCell( sheet.getRow(0).getCell(1) );
在evaluateator.evaluate(cell)之前,它将刷新它的内部缓存并更新该值。或者获得一个新的评估者。请参阅效果说明@ http://poi.apache.org/spreadsheet/eval.html