我想使用excel通过输入x计算正态分布的cdf到excel,并从excel读取cdf(x)的输出。可以正确创建和计算excel。但是java无法正确读取excel的结果。
以下是相关代码:
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.evaluate(NotImplementedFunction.java:42)
这意味着没有支持normdist功能,我需要自己实现它。请参阅此处支持的功能列表: http://poi.apache.org/spreadsheet/eval-devguide.html
有没有办法让excel计算它并从excel表中读取结果?