java

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

上一篇下一篇

猜你喜欢

热点阅读