poi IFERROR YEAR

公司的 excel 模型,需要转换为网页版展示,所以,需要做一套转换,传入参数,然后计算公式,返回结果,核心就是公式计算(使用 poi 实现)。

记录一下遇到的一大问题:一开始以为是 IFERROR 函数 poi 解析不了,后来发现是 YEAR 函数的问题。

传送门: https://stackoverflow.com/questions/57684777/how-to-use-evaluateincell-with-cell-of-iferror-funcation/57685810#57685810

问题描述

  • 这段代码设置 公式:
1
IFERROR("FY"&YEAR("2019/04/26")-"6","NA")

  • 查看设置之后的类型:

  • 调用 evaluateFormulaCell 函数计算公式:

  • 获取值

返回值的 NA

  • 但是,在 excel 内是:

  • 写了一段测试代码(上面是 debug), 还是 NA

20190828120047_d42379290f9a70bc83ababeee2a18c14.png

也就是说 excel 能够识别,但是 poi 解析不了。

更新问题

1
2
3
4
5
6
7
8
9
10
11
12
13
@Test
public void ifERRORTest() {
Workbook workbook = new XSSFWorkbook();
workbook.setForceFormulaRecalculation(true);
Sheet sheet = workbook.createSheet("1");
Cell cell = sheet.createRow(0).createCell(0);
cell.setCellFormula("IFERROR(\"FY\"&2019-\"1\",\"NA\")");
// cell.setCellFormula("YEAR(\"2018-01-01\")");
FormulaEvaluator formulaEvaluator = workbook.getCreationHelper().createFormulaEvaluator();
formulaEvaluator.evaluateInCell(cell);
System.out.println(cell.getCellType());
System.out.println(cell.getStringCellValue());
}

这样写是可以得出正确结果的,所以,IFERROR 函数没有问题,出问题的是 YEAR(“2019/01/01”) 函数

解决

YEAR 函数

excel 能够解析的原因可能是,excel 的容错性比较强,之前 excel 的公式是中文引号也可以,但是 poi 就不行。

总结

多上 https://stackoverflow.com/

Look at your mood.