因此,我在让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对象
数组,只包含double
和string
类型的条目。
下面是我试图评估的公式:
“=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还没有赶上?
试试这个:
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