使用Java中的Apache-poi库进行写入时,Excel公式会出错

时间:2015-04-13 06:05:51

标签: java excel-formula apache-poi

我要求将数据写入我已经实现的excel文件。如果同一行的状态单元格为" Recived"。

另一个要求是在求和中包括单元格。

仅对可见细胞进行求和。我有2列,如#34;状态"(列A2:A10)和"片" (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\")))");

1 个答案:

答案 0 :(得分:2)

我试过一个示例代码。您需要将单元格类型设置为Numeric(或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!错误。