Jus*_*ers 7 java apache excel apache-poi
所以我在让 Apache POI 评估公式时遇到了一些问题。
这是我在编写之前调用以评估公式的代码:
complete.getCreationHelper().createFormulaEvaluator().evaluateAll();
complete.write(fileOut);
Run Code Online (Sandbox Code Playgroud)
这是我调用以写入正在使用的单元格的代码(证明它们是数字):
try{
cell.setCellValue((Double)grid[i][j]);
}
catch(Exception e){
cell.setCellValue((String)grid[i][j]);
}
Run Code Online (Sandbox Code Playgroud)
仅供参考:grid是一个二维Object数组,只包含double和类型的条目String。
这是我试图评估的公式:
“=G13 - H13”
“=STDEV.P(C1:L1)”
“=I13/G13”
任何想法为什么当我在 Excel 中打开我的最终工作簿时没有评估公式?此外,当我单击未计算的字段并按 Enter 键时,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);
}
}
Run Code Online (Sandbox Code Playgroud)
不幸的是,您需要删除等号(这是愚蠢的)来传递公式,然后在保存之前强制它重新计算(这是愚蠢的)。然而,在试图让它重新评估公式后,它抱怨说:
引起:org.apache.poi.ss.formula.eval.NotImplementedFunctionException:STDEV.P
我想象这意味着 Excel 已经实现了标准偏差计算,但 POI 还没有赶上?
尝试这个:
XSSFFormulaEvaluator.evaluateAllFormulaCells(workbook);
Run Code Online (Sandbox Code Playgroud)
或者,如果您使用的是 xls
HSSFFormulaEvaluator.evaluateAllFormulaCells(hssfWorkbook)
Run Code Online (Sandbox Code Playgroud)
您可能想在保存之前调用它。
| 归档时间: |
|
| 查看次数: |
4304 次 |
| 最近记录: |