问题:NPOI读取excel时,遇单元格类型为公式时,计算单元格值时报错,Unexpected eval type (MissingArgEval)。
原因为:在excel中公式参数有默认值,省略时仍可进行计算(如下图,第三个参数省略,默认为0),但在NPOI进行计算时,则无法识别导致报错。
解决方法:对excel中省略公式的情况进行识别,并补充默认参数,如本例中以公式“,)”结尾,表示省略了参数,故对默认参数进行补充(10~20行)
if (cell.CellType == CellType.Formula)
{//包含公式
if (row.Sheet.Workbook is XSSFWorkbook)
{
XSSFFormulaEvaluator e = new XSSFFormulaEvaluator(row.Sheet.Workbook);
try
{
cell = e.EvaluateInCell(cell);
}
catch(Exception ex)
{
if (ex.Message.Equals("Unexpected eval type (MissingArgEval)"))
{
if (cell.CellFormula.Contains(",)"))
{
cell.CellFormula = cell.CellFormula.Insert(cell.CellFormula.IndexOf(",)") + 1, "0");
}
}
cell = e.EvaluateInCell(cell);
}
}
限于本人经验与水平,仅对项目中遇到的情况进行了处理,欢迎大家交流讨论