首页 新闻 会员 周边 捐助

EPPlus 读取 xlsx 文件异常,提示 Bad signature (0x71CA947A) at position 0x010B6489

0
悬赏园豆:50 [待解决问题]

异常堆栈:
OfficeOpenXml.Packaging.Ionic.Zip.BadReadException: Bad signature (0x71CA947A) at position 0x010B6489
at OfficeOpenXml.Packaging.Ionic.Zip.ZipEntry.ReadHeader(ZipEntry ze, Encoding defaultEncoding)
at OfficeOpenXml.Packaging.Ionic.Zip.ZipEntry.ReadEntry(ZipContainer zc, Boolean first)
at Ionic.Zip.ZipInputStream.GetNextEntry()
at OfficeOpenXml.Packaging.ZipPackage..ctor(Stream stream)
at OfficeOpenXml.ExcelPackage.ConstructNewFile(String password)
at OfficeOpenXml.ExcelPackage..ctor(FileInfo newFile)

补充:文件用 win10 自带的 office 工具能正常打开,用 wps office 也能正常打开,并没有提示文件损坏

找到类似问题:https://github.com/EPPlusSoftware/EPPlus/issues/605

青石路的主页 青石路 | 菜鸟二级 | 园豆:354
提问于:2024-11-28 15:24
< >
分享
所有回答(4)
0

建议提供能重现问题的示例代码

dudu | 园豆:29737 (高人七级) | 2024-11-28 18:14

我们在实际项目中使用了 EPPlus.Core 1.5.4,没遇到这个问题

支持(0) 反对(0) dudu | 园豆:29737 (高人七级) | 2024-11-28 18:58

是客户那边的程序读取有问题,我拿不到代码

支持(0) 反对(0) 青石路 | 园豆:354 (菜鸟二级) | 2024-11-28 20:56

@青石路: 可以自己写代码用 EPPlus 读取同样的 excel 文件试试

支持(0) 反对(0) dudu | 园豆:29737 (高人七级) | 2024-11-28 21:31

@dudu: 没写过 .net,玩犊子了

支持(0) 反对(0) 青石路 | 园豆:354 (菜鸟二级) | 2024-11-29 08:52

@青石路: 试试用 excel 打开这个文件并另存,然后读取另存后的文件

C# 读取示例代码

using OfficeOpenXml;

var filePath = @"xxx.xlsx";
using var p = new ExcelPackage(filePath);
var ws = p.Workbook.Worksheets.First();
Console.WriteLine("worksheet: " + ws.Name);
支持(0) 反对(0) dudu | 园豆:29737 (高人七级) | 2024-11-29 16:36

从错误信息看应该是在生成这个 excel 文件时没有完成压缩操作

Office Open XML (also informally known as OOXML)[5] is a zipped, XML-based file format developed by Microsoft

支持(0) 反对(0) dudu | 园豆:29737 (高人七级) | 2024-11-29 16:50
0

根据您提供的错误信息 Bad signature (0x71CA947A) at position 0x010B6489,这通常表明 EPPlus 在尝试解压缩 XLSX 文件时遇到了无效的 ZIP 签名。这可能由多种原因引起,以下是一些可能的解决方案和建议:

可能的原因

  1. 文件格式问题

    • 尽管文件在 Office 和 WPS 中可以正常打开,但可能存在一些微小的格式问题,使得 EPPlus 无法正确解析。
    • 文件可能包含某些 EPPlus 不支持的特性或自定义内容。
  2. EPPlus 版本问题

    • 不同版本的 EPPlus 可能在处理 ZIP 文件时使用了不同的库或方法,导致兼容性问题。
  3. ZIP 压缩问题

    • EPPlus 使用的 ZIP 库(如 Ionic.Zip)在处理某些 ZIP 压缩方式时可能存在限制或 bug。

解决方案

  1. 升级 EPPlus 到最新版本

    • 确保您使用的是 EPPlus 的最新版本,因为新版本可能已经修复了相关的兼容性问题。
    Install-Package EPPlus -Version 最新版本号
    
  2. 尝试使用流的方式加载文件

    • 有时直接使用 FileInfo 可能会导致问题,尝试使用文件流来加载 XLSX 文件。
    using (var stream = File.OpenRead("path/to/your/file.xlsx"))
    {
        using (var package = new ExcelPackage(stream))
        {
            // 处理 Excel 文件
        }
    }
    
  3. 重新保存文件

    • 使用 Office 或 WPS 重新保存一份新的 XLSX 文件,有时这可以修复潜在的文件结构问题。
    • 例如,在 Office 中打开文件后,选择“另存为”并保存为新的 XLSX 文件,然后尝试使用 EPPlus 读取新的文件。
  4. 使用其他库尝试读取文件

    • 如果 EPPlus 无法解决问题,可以尝试使用其他 .NET Excel 处理库,如:
    • 这些库在处理某些文件结构上可能更具兼容性。
  5. 检查文件是否包含宏或特殊内容

    • 某些特殊的功能或宏可能会影响文件的结构,尝试创建一个仅包含基本数据的简化版文件,看看是否能被 EPPlus 正常读取。
  6. 调试文件内容

    • 根据错误信息,异常发生在文件的特定位置(0x010B6489)。可以使用十六进制编辑器查看该位置的内容,判断文件是否在该处有异常的数据。
    • 这需要一定的技术背景,如果不熟悉,可以跳过此步骤或寻求技术支持。
  7. 联系 EPPlus 社区或支持

    • 如果以上方法均无法解决问题,可以在 EPPlus 的 GitHub 仓库 中提交一个 issue,详细描述您的问题,并附上相关的文件(如果可能)和错误信息。
    • 社区和开发者可能会提供更具体的帮助。

参考链接

希望这些建议能帮助您解决问题!如果有进一步的问题或需要更详细的指导,请随时告知。

Savorboard | 园豆:629 (小虾三级) | 2024-11-28 20:10

感谢提供这些方案,我去试试

支持(0) 反对(0) 青石路 | 园豆:354 (菜鸟二级) | 2024-11-28 20:57
0

是不是又是经典的中文路径问题?

我才不是老家伙 | 园豆:314 (菜鸟二级) | 2024-11-29 09:08

这个可以排除,08:00 生成的文件读取有问题,09:00 生成的读取没问题,怀疑是不是数据的问题,还在排查中

支持(0) 反对(0) 青石路 | 园豆:354 (菜鸟二级) | 2024-11-29 16:25
0

这个错误提示 Bad signature (0x71CA947A) 通常表明 EPPlus 在处理 xlsx 文件时遇到了问题,可能是因为文件格式不完全符合预期,或者文件中的某些部分损坏。尽管Windows 10自带的Office工具和WPS Office能够打开该文件,EPPlus 作为一个库,对于文件的格式和完整性要求会更严格。

以下是一些可能的解决方法和建议:

1. 确认文件格式

确保你的 xlsx 文件确实是一个有效的 Office Open XML 文件。可以尝试将文件另存为 xlsx 格式,然后再用 EPPlus 读取。

2. 尝试其他库

如果你只是想简单地读取Excel文件,可以尝试使用其他库,如 NPOIClosedXML。这两个库有时对于某些格式的支持可能更好,尤其是在EPPlus遇到问题时。

3. 检查文件内容

使用压缩软件(比如 WinRAR 或 7-Zip)尝试打开 xlsx 文件。xlsx 文件实际上是一个 ZIP 文件,可以查看里面的结构是否缺失某些重要文件(如 xl/workbook.xml)。

4. 更新 EPPlus

确保你使用的是 EPPlus 的最新版本。有任何 bug 或格式支持的问题可能已经在新的版本中得到解决。

5. 截取文件范围

如果文件很大或者包含复杂的数据结构,可以尝试只读取文件的一部分,确认是否特定的数据结构导致的问题。

6. 检查文件权限

确保你的应用程序有权限读取该文件,特别是在Windows环境中,文件权限可能会影响文件的读取。

7. 告诉我更多

如果上述方法无法解决你的问题,可以提供更多文件的上下文信息。我会更乐意帮助你找出解决方案。如果需要,我可以提供更详细的代码示例。

Technologyforgood | 园豆:7730 (大侠五级) | 2024-11-29 09:37
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册