如何在更改某些单元格后使用 POI 读取 Excel 公式的结果
How to read the result of an Excel formula using POI after changing some cells
我有一个简单的 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 的 evaluate(cell) 但这仍然是 returns 5,就像调用 XSSFFormulaEvaluator.evaluateAllFormulaCells(workbook) 例如
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) );
before evaluator.evaluate(cell) 它将刷新它的内部缓存并更新值。或者找一个新的评估员。查看性能说明 @ http://poi.apache.org/spreadsheet/eval.html
我有一个简单的 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 的 evaluate(cell) 但这仍然是 returns 5,就像调用 XSSFFormulaEvaluator.evaluateAllFormulaCells(workbook) 例如
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) );
before evaluator.evaluate(cell) 它将刷新它的内部缓存并更新值。或者找一个新的评估员。查看性能说明 @ http://poi.apache.org/spreadsheet/eval.html