美文网首页java
POI 修改单元格后,动态计算公式结果

POI 修改单元格后,动态计算公式结果

作者: 修行者12138 | 来源:发表于2020-08-17 18:20 被阅读0次
    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

    相关文章

      网友评论

        本文标题:POI 修改单元格后,动态计算公式结果

        本文链接:https://www.haomeiwen.com/subject/mpvkjktx.html