Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java无法从使用apache poi计算的excel公式中读取数据_Java_Excel_Apache Poi - Fatal编程技术网

Java无法从使用apache poi计算的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(

我想用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("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函数并不难