我在我的工作表的單元格中有一些公式,我想在插入一些值後對它們進行評估。例: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