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
也许XSSFFormulaEvaluator.evaluateAllFormulaCells(XSSFWorkbook wb)?
(或更具体地说:evaluateFormulaCell(Cell cell)。)
如果不起作用:您使用的是哪个版本的 POI?从 v3.5 开始支持 XSSF 中的公式。
另外,尝试按照POI 文档的建议使用XSSFCreationHelper实例化您的公式计算器。