I have some formulas in cells of my sheet, and I want to evaluate them after I insert some values. Ex :
My formula is =SUM(B1,B2)
Before values insertion B1
value was 1
, and B2
value was 3
, and the formula result is 4
After insertion of values now B1 has value 5
, and B2 has value 2
but the formula still produces 4
, how can I evaluate/trigger this to be calculated?
Naturally after I hit the return button on the formula cell the new value 7
is calculated, is there a way to trigger this without manual interaction?
I'm using excel 2007 so XSSFWorkbook
EDIT/UPDATE :
I've used Gabors solution before he posted it but I'm using it as a reference, here is what happens :
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)
...............
...............
Here is a part of the relevant code :
public XSSFFormulaEvaluator getEvaluator(){
if(evaluator == null){
evaluator = new XSSFFormulaEvaluator(wb);
}
return evaluator;
}
actually invoking evaluator :
//where index is int, and mycell is int
row = (XSSFRow) sheet.getRow(index);
cell = row.createCell(mycell);
getEvaluator().evaluateFormulaCell(cell);
I'm looking for someone used this and was successful, not those who google solution without really trying it, I've been googling a lot to say at least.
Per Gagravar suggestion I do have 2 POIs on my classpath :
<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>
I though I need 3.7 version for XSSF workbooks etc.
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>