如何在apache poi中评估这个公式?

时间:2017-06-05 09:56:53

标签: java excel apache-poi

在Microsoft Office Excel中,我在单元格中设置了此公式。=YEAR("2017-01-01")。结果为2017
在apache-poi中,我也这样做。

cell.setCellFormula("YEAR(\"2017-01-01\")");

但是我得到了错误的结果。

#VALUE!

如何获得正确的结果?

代码

HSSFWorkbook hssfworkbook = new HSSFWorkbook();
HSSFSheet sheet = hssfworkbook.createSheet("Sheet1");
HSSFRow row = sheet.createRow(0);
HSSFCell cell = row.createCell(0);
cell.setCellFormula("YEAR(\"2017-01-01\")");
CreationHelper creationHelper = hssfworkbook.getCreationHelper();
FormulaEvaluator evaluator = creationHelper.createFormulaEvaluator();
System.out.println(evaluator.evaluate(cell));

控制台

org.apache.poi.ss.usermodel.CellValue [#VALUE!]

使用apache-poi 3.16

1 个答案:

答案 0 :(得分:1)

来自Interface FormulaEvaluator docs

  

如果单元格包含公式,它会计算公式,并将公式结果放回单元格中,代替旧公式。否则,如果单元格不包含公式,则此方法将保持单元格不变。请注意,返回相同的Cell实例以允许链式调用,如:

int evaluatedCellType = evaluator.evaluateInCell(cell).getCellType();
if (cell.getCellType() == Cell.CELL_TYPE_FORMULA)
{
     cell = evaluator.evaluateInCell(cell);
}