因此,我在让 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]);
}
FYI: grid
是一个二维Object
仅包含该类型条目的数组double
and String
.
这是我试图评估的公式:
“=G13 - H13”
“=STDEV.P(C1:L1)”
“=I13/G13”
有什么想法为什么当我在 Excel 中打开我的最终工作簿时,公式没有被计算?另外,当我单击未计算的字段并按 Enter 键时,Excel 将识别该公式并对其进行计算。总的来说,这是不切实际的,但我相信它表明所使用的电池是正确的类型。这是否与公式有关String
type?
EDIT:
好的,看来您应该明确告诉它您有一个公式单元格。这是我修改后的代码:
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:
标准差值
我想这意味着Excel已经实现了标准差计算,但POI还没有赶上?