所以我在使Apache POI评估公式方面遇到了一些问题。
这是我在编写代码之前调用公式的代码:
complete.getCreationHelper().createFormulaEvaluator().evaluateAll();
complete.write(fileOut);
这是我打电话给正在使用的单元格的代码(证明他们的数字):
try{
cell.setCellValue((Double)grid[i][j]);
}
catch(Exception e){
cell.setCellValue((String)grid[i][j]);
}
仅供参考:grid
是一个2D Object
数组,仅包含double
和String
类型的条目。
以下是我试图评估的公式:
" = G13 - H13"
" = STDEV.P(C1:L1)"
" = I13 / G13"
为什么当我在Excel中打开我的最终工作簿时,为什么还没有评估公式?此外,当我点击未评估的字段并点击输入Excel时,将识别公式并对其进行评估。这是不切实际的,但我相信它证明了所使用的细胞是正确的类型。这可能与String
类型的公式有关吗?
编辑:
好的,所以看起来你应该明确告诉它你有一个公式细胞。这是我修改过的代码:
try{
cell.setCellValue((Double)grid[i][j]);
}
catch(Exception e){
String val = (String) grid[i][j];
if (val != null && val.startsWith("=")){
val = val.replaceAll("=", "");
cell.setCellType(XSSFCell.CELL_TYPE_FORMULA);
cell.setCellFormula(val);
}
else{
cell.setCellValue(val);
}
}
不幸的是,你需要删除等号(这是哑的)来传递公式,然后强制它在保存之前重新评估(这是愚蠢的)。然而,试图让它重新评估它所抱怨的公式后,说:
引起: org.apache.poi.ss.formula.eval.NotImplementedFunctionException: STDEV.P
我想象这意味着Excel已经实施了标准偏差计算,但POI还没有赶上?
答案 0 :(得分:3)
试试这个:
XSSFFormulaEvaluator.evaluateAllFormulaCells(workbook);
或者,如果您使用的是xls
HSSFFormulaEvaluator.evaluateAllFormulaCells(hssfWorkbook)
您可能希望在保存之前调用它。