问题: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);
}
}
限于本人经验与水平,仅对项目中遇到的情况进行了处理,欢迎大家交流讨论
在使用NPOI读取含有公式的Excel文件时,可能会遇到因缺失参数导致的`Unexpected eval type (MissingArgEval)`错误。原因是Excel允许公式参数省略,但NPOI不支持这种情况。解决方法是对含有省略参数的公式进行识别,并手动补全默认参数,例如将公式尾部的`,)`替换为`,0)`。这个解决方案针对项目中遇到的问题进行了处理,适用于处理类似问题。
2784

被折叠的 条评论
为什么被折叠?



