最近在公司项目中,需要操作 Excel 公式,所以想到了 NPOI 库,通过 SetCellFormula 设置公式内容,然后再通过 IFormulaEvaluator.Evaluate 方法计算结果,但是如果公式中存在 MONTH 函数,则结果会与 Excel 中计算的结果不同。
首先在 Excel 中 MONTH("2021-10-22") 与 MONTH(2021-10-22) 的结果会不一样,但是如果把 MONTH("2021-10-22") 带入 NPOI,则会报异常错误,如果使用 MONTH(2021-10-22) 那么结果又与实际获取月份不符,这应该是 NPOI 库的 BUG,我以为 NPOI 会在后续版本修复此 BUG,但我试了 NPOI 最新的几个版本库,都不支持 MONTH("") 函数,期待 NPOI 修复此 BUG,核心计算公式代码如下:
ICell cell = row.CreateCell(0);
cell.SetCellFormula(formula);
IFormulaEvaluator formulaEvaluator = workBook.GetCreationHelper().CreateFormulaEvaluator();
formulaEvaluator.ClearAllCachedResultValues();
CellValue cellValue = formulaEvaluator.Evaluate(cell);