You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用DocumentFormat.OpenXml打开.xlsx报错“文件包含损坏数据”但可在Calc/Excel打开

排查DocumentFormat.OpenXml打开.xlsx提示“文件包含损坏数据”的方法
  • 先验证文件的OpenXML合规性

    • 用Excel自带的检查工具:打开文件后点「文件→信息→检查问题→检查文档」,排查是否有隐藏的合规性问题——Excel/Calc对非标准结构兼容性更强,但OpenXml只严格遵循OOXML规范。
    • 安装Open XML SDK 2.5 Productivity Tool,加载该.xlsx文件,工具会自动扫描并报告不符合规范的具体位置,比如无效XML节点、缺失命名空间这类细节,这是最精准的排查方式。
  • 确认文件是标准.xlsx格式

    • 有些文件是其他格式(比如.csv)重命名成.xlsx的,虽然Excel/Calc能识别,但OpenXml不认。把文件后缀改成.zip解压,看内部是否有标准xlsx目录结构(像xl/、_rels/、[Content_Types].xml这些),没有的话就是格式不对。
  • 排查NuGet包和环境兼容性

    • 虽然装了最新版,但试试降级到稳定版(比如2.18.0),避免新版本的兼容性bug,重新安装后再测试。
    • 确认项目目标框架和NuGet包匹配,比如.NET Framework项目要选支持对应版本的包,.NET Core/.NET 5+同理。
  • 修复文件结构后再测试

    • 用Excel打开文件,另存为「Excel工作簿(.xlsx)」,勾选「保存时删除个人信息」,存成新文件后再用代码读取——Excel会重新整理OpenXML结构,修复很多隐藏的不合规问题。
    • 也可以用OpenOffice Calc打开后另存为标准.xlsx格式,再测试代码。
  • 捕获详细异常定位问题

    • 给代码加try-catch块,捕获OpenXmlPackageException,输出详细异常信息,包括内部异常,能直接指出是哪个部分数据损坏,比如某张工作表的XML错误、样式定义问题。示例代码:
      try
      {
          using (SpreadsheetDocument document = SpreadsheetDocument.Open(SourceXlsxName, false))
          {
              // 你的业务逻辑
          }
      }
      catch (OpenXmlPackageException ex)
      {
          Console.WriteLine($"详细错误:{ex.Message}");
          if (ex.InnerException != null)
          {
              Console.WriteLine($"内部错误:{ex.InnerException.Message}");
          }
      }
      

内容的提问来源于stack exchange,提问作者Velocedge

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 09:00:27