POI 修改单元格后,动态计算公式结果
2020-08-17 本文已影响0人
修行者12138
image.png
上图中,A2单元格的公式为A1*100,如果直接取A2单元格的值,只能获取到A1修改前的计算结果,获取不到A1修改后的计算结果。
解决方案:
使用FormulaEvaluator动态计算
代码示例
private void test1() throws Exception{
InputStream inputStream = new FileInputStream("D:\\demo\\test1.xlsx");
XSSFWorkbook workbook = new XSSFWorkbook(inputStream);
XSSFSheet sheet = workbook.getSheetAt(0);
Cell valueCell = sheet.getRow(0).getCell(0);
Cell formulaCell = sheet.getRow(1).getCell(0);
System.out.println("修改单元格前公式结果: " + formulaCell.getNumericCellValue());
valueCell.setCellValue(2);
System.out.println("修改单元格值为: " + valueCell.getNumericCellValue());
// 还是原来的旧值
System.out.println("修改单元格后公式结果: " + formulaCell.getNumericCellValue());
FormulaEvaluator evaluator = workbook.getCreationHelper().createFormulaEvaluator();
CellValue evaluate = evaluator.evaluate(formulaCell);
// 可以获取到新值
System.out.println("使用FormulaEvaluator计算公式结果: " + evaluate.getNumberValue());
}
输出结果
修改单元格前公式结果: 100.0
修改单元格值为: 2.0
修改单元格后公式结果: 100.0
使用FormulaEvaluator计算公式结果: 200.0