所以我有一些问题获得Apache POI来评估公式。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
是2D Object
阵列,仅包含double
和String
类型的条目。
这里是我试图评估公式:
“= G13 - H13”
“= STDEV.P(C1:L1)”
“= I13/G13 “
任何想法为什么当我在Excel中打开我的最终工作簿时,公式没有被评估?另外,当我点击未评估的字段并点击输入时,Excel将识别公式并对其进行评估。散装这是不实际的,但我相信它表明,正在使用的细胞是正确的类型。这可能与String
类型的公式有关吗?
编辑:
OK,所以看起来像你应该明确地告诉它你有一个公式的单元格。这里是我修改后的代码做到这一点:
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还没有赶上呢?
我看不到任何代码,你设置公式单元格 - 你可以发布,以防万一你的错误? – Gagravarr
设置公式单元格?我觉得这可能是我错过的。我是否需要明确地告诉它“如果你有一个字符串值并且以等号开始,你是一个公式单元格”?因为这是非常愚蠢的,如果是这样的话,但我可以看到区别是必要的。 –
公式单元格以与字符串单元格不同的方式存储在文件中,因此您需要明确 – Gagravarr