Apache POI评估公式

ant*_*ant 9 java excel apache-poi

我在工作表的单元格中有一些公式,我想在插入一些值后评估它们.例如:

我的公式是 =SUM(B1,B2)

在值插入B1值为1,B2值为3,并且公式结果为4

插入值后,现在B1有值5,而B2有值,2但公式仍然产生4,我该如何评估/触发这个计算?

当我点击公式单元格上的返回按钮后,7计算新值,是否有办法在没有手动交互的情况下触发此值?

我正在使用excel 2007 XSSFWorkbook

编辑/更新:

我在发布它之前使用了Gabors解决方案,但我正在使用它作为参考,以下是会发生的事情:

 Exception in thread "main" java.lang.NoSuchMethodError: org.apache.poi.ss.formula.WorkbookEvaluator.<init>(Lorg/apache/poi/ss/formula/EvaluationWorkbook;Lorg/apache/poi/ss/formula/IStabilityClassifier;Lorg/apache/poi/hssf/record/formula/udf/UDFFinder;)V
        at org.apache.poi.xssf.usermodel.XSSFFormulaEvaluator.<init>(XSSFFormulaEvaluator.java:64)
        at org.apache.poi.xssf.usermodel.XSSFFormulaEvaluator.<init>(XSSFFormulaEvaluator.java:51)
...............
...............
Run Code Online (Sandbox Code Playgroud)

以下是相关代码的一部分:

public XSSFFormulaEvaluator getEvaluator(){
        if(evaluator == null){
            evaluator = new XSSFFormulaEvaluator(wb);
        }
        return evaluator;
    }
Run Code Online (Sandbox Code Playgroud)

实际上调用评估者:

//where index is int, and mycell is int
row = (XSSFRow) sheet.getRow(index);
cell = row.createCell(mycell);
getEvaluator().evaluateFormulaCell(cell);
Run Code Online (Sandbox Code Playgroud)

我正在寻找一个使用过这个并且成功的人,而不是那些没有真正尝试过谷歌解决方案的人,至少我一直在谷歌上搜索.

根据Gagravar的建议,我的课程路径上有2个POI:

        <dependency>
        <groupId>org.apache.poi</groupId>
        <artifactId>poi</artifactId>
        <version>3.8-beta1</version>
    </dependency>
    <dependency>
        <groupId>org.apache.poi</groupId>
        <artifactId>poi-ooxml</artifactId>
        <version>3.7</version>
    </dependency>
Run Code Online (Sandbox Code Playgroud)

我虽然需要3.7版本的XSSF工作簿等.

解决方案

<dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi</artifactId>
            <version>3.8-beta2</version>
        </dependency>
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi-ooxml</artifactId>
            <version>3.8-beta2</version>
        </dependency>
Run Code Online (Sandbox Code Playgroud)

Gag*_*arr 17

推广评论答案......

您首先需要确保为主jar和OOXML部分使用相同版本的POI.你的maven片段显示3.7为一个,3.8 beta 1为另一个.你需要确保它们都是一样的.(你甚至可能想要使用刚出来的3.8-beta2).

然后,使用:

FormulaEvaluator evaluator = wb.getCreationHelper().createFormulaEvaluator();
evaluator.evaluateFormulaCell(cell);
Run Code Online (Sandbox Code Playgroud)

要么:

XSSFFormulaEvaluator.evaluateAllFormulaCells(wb);
Run Code Online (Sandbox Code Playgroud)

有关详细信息,请参阅http://poi.apache.org/spreadsheet/eval.html

  • 这有望帮助那些贫穷的灵魂,谢谢你 (3认同)

egb*_*kul 5

也许XSSFFormulaEvaluator.evaluateAllFormulaCells(XSSFWorkbook wb)

(或更具体地说:evaluateFormulaCell(Cell cell)。)

如果不起作用:您使用的是哪个版本的 POI?从 v3.5 开始支持 XSSF 中的公式。

另外,尝试按照POI 文档的建议使用XSSFCreationHelper实例化您的公式计算器。