Java无法从使用apache poi计算的excel公式中读取数据
我想用excel计算正态分布的cdf,方法是在excel中输入x,然后从excel中读取cdfx的输出。可以正确创建和计算excel。但是,java无法从excel中正确读取结果 以下是相关代码:Java无法从使用apache poi计算的excel公式中读取数据,java,excel,apache-poi,Java,Excel,Apache Poi,我想用excel计算正态分布的cdf,方法是在excel中输入x,然后从excel中读取cdfx的输出。可以正确创建和计算excel。但是,java无法从excel中正确读取结果 以下是相关代码: private double cdfxls1(double x) throws IOException{ double cdf=0; HSSFWorkbook wb = new HSSFWorkbook(); HSSFSheet sheet = wb.createSheet(
private double cdfxls1(double x) throws IOException{
double cdf=0;
HSSFWorkbook wb = new HSSFWorkbook();
HSSFSheet sheet = wb.createSheet("1");
HSSFRow row = sheet.createRow(0);
HSSFCell input = row.createCell(0);
input.setCellValue(x);
HSSFCell output = row.createCell(1);
output.setCellFormula("NORMDIST(A1,0,1,1)");
wb.setForceFormulaRecalculation(true);
/* Using the FormulaEvaluator, still doesn't work
Cell tempoutput=row.getCell(1);
tempoutput.setCellType(Cell.CELL_TYPE_NUMERIC);
FormulaEvaluator evaluator = wb.getCreationHelper().createFormulaEvaluator();
evaluator.evaluateInCell(tempoutput);
evaluator.evaluateFormulaCell(tempoutput);
System.out.println("tempoutput "+tempoutput.getNumericCellValue());
System.out.println("output "+output.getNumericCellValue());
*/
//Using evaluateall, doesn't work either
// HSSFFormulaEvaluator.evaluateAllFormulaCells(wb);
FileOutputStream fileOut = new FileOutputStream("cdf_cal.xls");
wb.write(fileOut);
fileOut.close();
cdf=output.getNumericCellValue();
return cdf;
}
我尝试了三种方法来重新计算公式。然而,它们都不起作用。我还尝试关闭并重新打开excel。这也不管用。我还尝试使用“.csv”作为输出文件,而不是“.xls”。它也不起作用,csv文件中的单元格包含公式。当我打开创建的电子表格时,公式和值都是正确的。但是,java只能向我输出初始值0
更新:
错误消息显示:
原因:org.apache.poi.ss.formula.eval.NotImplementedException:NORMDIST
位于org.apache.poi.ss.formula.functions.NotImplementedFunction.evaluateNotImplementedFunction.java:42
这意味着normdist函数不受支持,我需要自己实现它。请参见此处支持的函数列表:
有没有办法让excel计算,然后从excel工作表中读取结果?使用代码中注释的FormulaEvaluator时的结果是什么?我稍微更改了代码。公式化评估器不起作用。输出的excel文件具有正确答案。但是,java中的输出为0,并且正在实现NORMDIST函数一个选项?+理想情况下,将其贡献给ApachePOI!对于知道给定函数的功能的人来说,编写Excel函数并不难