当前位置: 首页 > 知识库问答 >
问题:

Apache POI公式不求值

傅皓君
2023-03-14

因此,我在让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]);
}

参考:网格是一个2D对象数组,只包含doublestring类型的条目。

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

“=G13-H13”

“=stdev.p(C1:L1)”

“=I13/G13”

你知道为什么当我在Excel中打开我的最终工作簿时,公式没有计算吗?此外,当我单击一个未计算的字段并按enter键时,Excel将识别公式并对其进行计算。在批量中,这是不实际的,但我相信它证明了正在使用的单元格是正确的类型。这可能与字符串类型的公式有关吗?

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);
   }
}

我想这意味着Excel已经实现了标准差计算,但POI还没有赶上?

共有1个答案

袁宜
2023-03-14

试试这个:

XSSFFormulaEvaluator.evaluateAllFormulaCells(workbook);

或者,如果您使用的是xls

HSSFFormulaEvaluator.evaluateAllFormulaCells(hssfWorkbook)

您可能想在保存之前调用这个。

 类似资料:
  • 每次它返回给我一个9999的值。而不是实际值11。

  • 由于内存问题,我们使用ApachePOI的Sax解析器方法来读取大量数据。xlsx excel文件。然而,这种方法在公式单元格中似乎有局限性。它似乎从“缓存的公式值”中读取值。我找不到触发重新计算以更新值的最佳解决方案。有人面临同样的问题吗?谢谢

  • 我有点迷失了 我试过3.17、4.0.0和5.0.0版。 或 我无法获得没有弃用或类型错误的代码:-( 我将Eclipe与Maven和Java11一起使用。在版本发布之后,我做了“更新项目”来更新Maven。

  • 我正在使用NPOI从Excel2003文件中读取数据。这些文件包含如下公式('1:2'!$C$17)。NPOI识别像SUM('1'!$C$17)这样的公式(W/O表2),并计算无效的结果。我使用的是NPOI示例中的常规代码,比如

  • 在xlsx工作簿中,有些单元格具有一些无界的SUMIF公式,如下所示:。使用ApachePOI5.0.0对一个SUMIF函数的评估持续100ms,对给定工作簿的评估持续几分钟。 提高执行持续时间的一种方法是将公式绑定到如下内容:。在我的情况下,这不是一个解决方案,因为我不是xlsx文件的作者,系统从未知的人那里获取未知的xlsx文件(因此我不能仅仅告诉他们限制SUMIF范围)。 的当前实现迭代给定

  • 在执行此代码时,它在线程"main"java.lang.NoClassDefFoundError: org/apache/Commons/math3/util/ArithmeticUtils在org.apache.poi.poifs.property.RootProperty.set大小(RootProperty.java:59)在org.apache.poi.poifs.property.Dir