ExcelDataReader CreateOpenXmlReader读xlsx抛空引用异常解决方法
问题描述
在.NET项目中使用ExcelDataReader库读取Excel文件时出现异常,具体表现为:
- 调用
CreateBinaryReader读取.xls格式文件时运行一切正常 - 调用
CreateOpenXmlReader读取.xlsx格式文件时,抛出*"object reference not set to an instance of an object(未将对象引用设置到对象的实例)"*空引用异常
问题对应的实现代码如下:
using (FileStream excelfile = System.IO.File.Open(path, FileMode.Open, FileAccess.Read, FileShare.Read)) { IExcelDataReader excelReader; string ftype = Path.GetExtension(excelfile.Name); if(ftype == ".xls") excelReader = ExcelReaderFactory.CreateBinaryReader(excelfile,true); else excelReader = ExcelReaderFactory.CreateOpenXmlReader(excelfile); // 后续数据读取逻辑 ... }
出问题时项目引用的ExcelDataReader版本为2.1.2.3,前期受项目约束无法直接升级版本,通过调试追踪未定位到问题根因。
解决方案
2.1.2.3版本的ExcelDataReader存在未修复的已知缺陷:CreateOpenXmlReader方法在处理部分结构的.xlsx文件时会触发空引用异常,旧版本分支无对应修复补丁。
最终可行处理方案:
- 升级项目中的ExcelDataReader库到稳定新版本
- 适配版本变更后的API逻辑,无需再根据文件后缀区分调用不同的读取方法,统一改用
CreateReader函数传入文件流,即可无报错正常读取.xls、.xlsx两种格式的Excel文件。
内容的提问来源于stack exchange,提问作者AlpYuktug
相关产品推荐
相关产品推荐

