使用DotNetCore.NPOI 1.2.3读取Excel遇ZipException异常求助
解决思路与建议
1. 修复文件流打开模式(核心问题)
你的代码里用FileMode.Create打开文件流,这个模式会直接覆盖或创建新的空文件,原Excel的内容被清空后,读取时自然会触发Zip文件头EOF错误。必须改成读取模式:
using var stream = new FileStream(filePath, FileMode.Open, FileAccess.Read);
不需要手动设置stream.Position = 0,因为Open模式打开时,流的初始位置默认就是0。
2. 验证文件完整性
- 手动打开目标Excel文件,确认文件没有损坏、能正常打开
- 如果文件是下载或传输获取的,重新获取完整文件,排除文件本身损坏的可能
3. 检查版本兼容性
- 你用的DotNetCore.NPOI 1.2.3是较旧版本,建议升级到最新稳定版,新版本大概率修复了SharpZipLib相关的兼容性问题
- 确认项目中SharpZipLib的版本与DotNetCore.NPOI依赖的版本一致,避免版本冲突
4. 优化读取逻辑(可选)
针对.xlsx文件,可结合MemoryStream缓存文件内容,减少直接读取大文件时的流操作异常:
using var fileStream = new FileStream(filePath, FileMode.Open, FileAccess.Read); using var memoryStream = new MemoryStream(); fileStream.CopyTo(memoryStream); memoryStream.Position = 0; var xssfWb = new XSSFWorkbook(memoryStream);
内容的提问来源于stack exchange,提问作者user007
相关产品推荐
相关产品推荐

