Java无法使用apache poi读取评估的excel公式中的数据

时间:2014-06-27 21:20:05

标签: java excel apache-poi

我想使用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表中读取结果?

0 个答案:

没有答案