【问题标题】:Excel formula gives error when write using Apache-poi library in Java在 Java 中使用 Apache-poi 库编写时 Excel 公式出错
【发布时间】:2024-05-19 01:15:02
【问题描述】:

我需要将数据写入我已经实现的 excel 文件。如果同一行的状态单元格为“已接收”,则另一个要求是在总和中包含分段单元格。

并且应该只对可见单元格进行求和。我有 2 列,例如“Status”(Column A2:A10)和“piece”(B2:B10),现在我已经使用 apache-poi 库将公式放入我的 java 类中:

SUMPRODUCT(SUBTOTAL(9,OFFSET(B2:B10,ROW(B2:B10)-(ROW(B2)),0,1)),(--(A2:A10="Recived")))

执行 Java 代码后,它会成功写入文件,但是当我打开文件时,它会将公式单元格显示为 #VALUE!。当我转到公式栏并按 Enter 时,公式的值就会出现。

我希望每次打开 Excel 文件时都显示公式的值。

下面是Java代码

cell.setCellType(Cell.CELL_TYPE_FORMULA);
cell.setCellFormula("SUMPRODUCT(SUBTOTAL(9,OFFSET(B2:B10,ROW(B2:B10)-(ROW(B2)),0,1)),(--(A2:A10=\"Recived\")))");

【问题讨论】:

    标签: java excel-formula apache-poi


    【解决方案1】:

    我尝试了一个示例代码。您需要将单元格类型设置为数字(或您的 excel 公式将返回的任何数据类型)。

    见下例:

    FormulaEvaluator evaluator = workbook.getCreationHelper().createFormulaEvaluator();     
    Row row = sheet.getRow(0);
    Cell cell2 = row.createCell(2);
    //set cell formula
    cell2.setCellFormula("SUM(A1:B1)+10");
    //evaluate the formula
    evaluator.evaluateFormulaCell(cell2);
    //set the cell type to numeric
    cell2.setCellType(Cell.CELL_TYPE_NUMERIC);
    System.out.println(cell2.getNumericCellValue());
    
    //write data to excel file
    FileOutputStream out = new FileOutputStream(new File("res/Book1.xlsx"));
    workbook.write(out);
    out.close();
    System.out.println("Excel written successfully..");
    

    我已经尝试过这个例子,但它没有给我#VALUE!错误。

    【讨论】: