我在我的工作表的单元格中有一些公式,我想在插入一些值后对它们进行评估。例:Apache POI评估公式
我的公式是=SUM(B1,B2)
之前值插入B1
值为1
,和B2
值为3
,以及公式结果是4
后的值的插入现在B1具有值5
,和B2有价值2
但公式仍然产生4
,我该如何评估/触发这个计算?
当然,当我按下公式单元格上的返回按钮时,计算出新值7
,有没有办法在没有手动交互的情况下触发?
我使用的是2007年Excel,以便XSSFWorkbook
编辑/ UPDATE:
我用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);
我找人用这个,是成功的,而不是那些谁谷歌的解决方案没有真正尝试它,我一直在谷歌上搜索了很多,至少可以说。
每Gagravar建议,我有我的类路径中的POI 2:
<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工作簿等
SOLUTION:
<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>
NoSuchMethodError指示我在您的类路径中有两个POI jar副本。确保你只有一个,那么它应该工作正常 – Gagravarr 2011-04-19 13:18:36
@Gagravarr请参阅我的更新 – ant 2011-04-19 13:28:42
这是你的问题。您的POI版本需要匹配。对于主要POI罐子和poi-ooxml罐子,你都需要3.8-beta1(或者更好的3.8-beta2)。版本之间不能混用和匹配POI罐子! – Gagravarr 2011-04-19 13:38:39