如何通过GetCellValue<eErrorType>或其他方法获取Excel错误单元格
解决EPPlus获取Excel错误单元格的问题
直接调用GetCellValue<eErrorType>()在非错误单元格上会触发异常,原因是该方法仅针对错误类型单元格设计,且eErrorType枚举未提供无错误的枚举值。以下是两种可行的解决思路:
方法一:通过单元格DataType判断
先筛选出DataType为eDataType.Error的单元格,再安全获取错误类型:
var worksheet = package.Workbook.Worksheets["a"]; // 筛选所有错误单元格并获取错误类型 var badCells = worksheet.Cells .Where(cell => cell.DataType == eDataType.Error) .Select(cell => new { CellLocation = cell.Address, ErrorType = cell.GetCellValue<eErrorType>() });
方法二:通过Value类型匹配
利用模式匹配直接判断单元格值是否为ExcelErrorValue,同时获取错误信息:
var worksheet = package.Workbook.Worksheets["a"]; // 筛选特定错误类型(比如#DIV/0!)的单元格 var div0ErrorCells = worksheet.Cells .Where(cell => cell.Value is ExcelErrorValue error && error.Type == eErrorType.Div0); // 筛选所有错误单元格 var allBadCells = worksheet.Cells .Where(cell => cell.Value is ExcelErrorValue) .Select(cell => new { CellAddress = cell.Address, ErrorType = ((ExcelErrorValue)cell.Value).Type });
补充说明
- 如果你只是需要判断单元格是否存在错误,无需获取具体错误类型,直接用
cell.DataType == eDataType.Error或cell.Value is ExcelErrorValue即可。 - 避免直接在所有单元格上调用
GetCellValue<eErrorType>(),必须先做类型校验,否则会抛出类型转换异常。
内容的提问来源于stack exchange,提问作者user19618751
相关产品推荐
相关产品推荐

