Apache POI:使用公式FormulaEvaluator读取单元格值时,公式被删除

问题描述 投票:0回答:1

我正在使用poi版本3.17。在我的Java代码中,我想读取具有公式的单元格值,并且正在使用evaluateInCellFormulaEvaluator函数来解析该单元格值。

我在资源中有一个模板excel,其中的单元格具有公式,如果我从中创建一个工作簿并设置一些值,然后尝试读回它,则FormulaEvaluator会解析该单元格并输入实际值,由此这些单元格的公式将替换并更新为实际值。为什么?

我已经看到了evaluateInCell功能的实现,有意将单元格类型设置为setCellType(cell, cv);

public XSSFCell evaluateInCell(Cell cell) {
        if (cell == null) {
            return null;
        } else {
            XSSFCell result = (XSSFCell)cell;
            if (cell.getCellType() == 2) {
                CellValue cv = this.evaluateFormulaCellValue(cell);
                setCellType(cell, cv);
                setCellValue(cell, cv);
            }
            return result;
        }
    }

为什么库这样做,并从单元格中删除实际公式。

excel apache-poi xssf poi-hssf
1个回答
0
投票

有不同的功能:

 CellType evaluateFormulaCell(Cell cell) - your cell will hold both the formula, and the result.       
 Cell evaluateInCell(Cell cell) - you cell will contain result only, formula is erased.      
 CellValue evaluate(Cell cell) - the formula is evaluated and returned. No changes in the cell.    
 void evaluateAll() = mass evaluateFormulaCell for the whole book.

显然,您已将evaluateInCell取为evaluateFormulaCellevaluateInCell非常有用,不仅用于计数-将其用于清除配方。

此外,请不要忘记clearAllCachedResultValues()notifyUpdateCell() / notifySetFormula()。如果没有这些内容,则在工作表上进行任何更改之后的任何评估都将失败。

© www.soinside.com 2019 - 2024. All rights reserved.