EPPlus读取Excel时空单元格导致空引用异常的解决方法
问题根因
通过EPPlus读取Excel单元格内容时,空单元格的Value属性会返回null。现有代码未做空值判断,直接对Value链式调用.ToString().ToLower().Trim()方法,当命中空单元格时就会抛出“未将对象引用设置到对象的实例”空引用异常,你定位到的item2赋值行报错,就是因为对应单元格值为null。
修复方案
给所有单元格读取逻辑增加空值兼容,判断Value为null时直接返回空字符串,非空时再执行字符串格式化操作。
修复后代码:
ExcelWorksheet worksheet = package.Workbook.Worksheets["Sheet1"]; var rowcount = worksheet.Dimension.Rows; for(int row = 2; row <= rowcount; row++) { var cellValue1 = worksheet.Cells[row, 1].Value; var cellValue2 = worksheet.Cells[row, 2].Value; list.Add(new Insured { item1 = cellValue1 == null ? string.Empty : cellValue1.ToString().ToLower().Trim(), item2 = cellValue2 == null ? string.Empty : cellValue2.ToString().ToLower().Trim(), }); }
简化写法
如果项目使用C# 6及以上版本,可以用空条件运算符+空值合并运算符简化判空逻辑,无需提前声明变量存单元格值:
list.Add(new Insured { item1 = worksheet.Cells[row, 1].Value?.ToString().ToLower().Trim() ?? string.Empty, item2 = worksheet.Cells[row, 2].Value?.ToString().ToLower().Trim() ?? string.Empty, });
注意:必须保留
?? string.Empty的兜底赋值,否则空单元格对应的属性值会为null,后续其他业务逻辑调用该属性的字符串方法时,仍会触发空引用异常。
内容的提问来源于stack exchange,提问作者Veck
相关产品推荐
相关产品推荐

