提问者:小点点

如何在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个答案

匿名用户

来自接口公式评估器文档

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

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