Apache POI评估公式

| 我的工作表单元格中有一些公式,我想在插入一些值后对其求值。例如: 我的公式是
=SUM(B1,B2)
在值插入之前,
B1
值为was2ѭ,
B2
值为was4ѭ,公式结果为
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)
...............
...............
这是相关代码的一部分:
public XSSFFormulaEvaluator getEvaluator(){
        if(evaluator == null){
            evaluator = new XSSFFormulaEvaluator(wb);
        }
        return evaluator;
    }
实际调用评估者:
//where index is int, and mycell is int
row = (XSSFRow) sheet.getRow(index);
cell = row.createCell(mycell);
getEvaluator().evaluateFormulaCell(cell);
我正在寻找使用此工具并成功的人,而不是那些没有真正尝试过google解决方案的人,至少我一直在谷歌上搜索很多。 根据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>
我虽然需要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>
已邀请:
推广评论答案... 首先,您需要确保对主jar和OOXML部分使用相同版本的POI。您的Maven代码片段显示3.7,而另一个显示3.8 beta 1。您需要确保它们都相同。 (您甚至可能想使用刚刚发布的3.8-beta2)。 然后,使用以下任一方法:
FormulaEvaluator evaluator = wb.getCreationHelper().createFormulaEvaluator();
evaluator.evaluateFormulaCell(cell);
要么:
XSSFFormulaEvaluator.evaluateAllFormulaCells(wb);
有关更多详细信息,请参见http://poi.apache.org/spreadsheet/eval.html。
也许XSSFFormulaEvaluator
.evaluateAllFormulaCells(XSSFWorkbook wb)
? (或更具体地说::19ѭ。) 如果不起作用:您正在使用哪个版本的POI? v3.5支持XSSF中的公式。 另外,尝试使用XSSFCreationHelper实例化POI文档建议的公式计算器。
如果您使用HSSF,请尝试:
HSSFFormulaEvaluator.evaluateAllFormulaCells(workbook);
您可以使用它。
 public static void triggerFormula(HSSFWorkbook workbook){      

                FormulaEvaluator evaluator = workbook.getCreationHelper().createFormulaEvaluator();
                HSSFSheet sheet = workbook.getSheetAt(0);
                int lastRowNo=sheet.getLastRowNum();        

                for(int rownum=0;rownum<=lastRowNo;rownum++){
                Row row;
                 if (sheet.getRow(rownum)!=null){
                         row= sheet.getRow(rownum);

                      int lastCellNo=row.getLastCellNum();

                          for(int cellnum=0;cellnum<lastCellNo;cellnum++){  
                                  Cell cell;
                                  if(row.getCell(cellnum)!=null){
                                     cell = row.getCell(cellnum);   
                                    if(Cell.CELL_TYPE_FORMULA==cell.getCellType()){
                                    evaluator.evaluateFormulaCell(cell);
                                }
                            }
                         }
                 }
                }


            }

要回复问题请先登录注册