Apache POI公式未评估

时间:2016-09-09 19:35:10

标签: java excel apache 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]);
}

仅供参考:grid是一个2D Object数组,仅包含doubleString类型的条目。

以下是我试图评估的公式:

  

" = 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还没有赶上?

1 个答案:

答案 0 :(得分:3)

试试这个:

XSSFFormulaEvaluator.evaluateAllFormulaCells(workbook);

或者,如果您使用的是xls

HSSFFormulaEvaluator.evaluateAllFormulaCells(hssfWorkbook)

您可能希望在保存之前调用它。