在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
答案 0 :(得分:1)
来自Interface FormulaEvaluator docs
如果单元格包含公式,它会计算公式,并将公式结果放回单元格中,代替旧公式。否则,如果单元格不包含公式,则此方法将保持单元格不变。请注意,返回相同的Cell实例以允许链式调用,如:
int evaluatedCellType = evaluator.evaluateInCell(cell).getCellType();
if (cell.getCellType() == Cell.CELL_TYPE_FORMULA)
{
cell = evaluator.evaluateInCell(cell);
}