问题描述
|
我的工作表单元格中有一些公式,我想在插入一些值后对其求值。例如:
我的公式是
=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);
}
}
}
}
}
}