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

DocumentFormat.OpenXml生成多Sheet的xlsx文件报错:格式与扩展名不匹配

问题修复方案

该报错仅在多Sheet场景下出现,基本都是Sheet元数据配置不匹配导致的,可按以下优先级排查修复:

1. 校验Sheet基础属性合法性

  • 每个Sheet的SheetId必须是全局唯一的正整数,不能重复,也不能为0
  • 每个Sheet的Name属性不能重复,长度不能超过31个字符,不能包含\ / ? * [ ]这类非法字符

2. 校验关系Id映射正确性

每个Sheet的r:id属性必须和WorkbookPart到对应WorksheetPart的关系Id完全匹配,不能错配或者重复,以下是正确的多Sheet生成代码示例:

using (var spreadsheetDocument = SpreadsheetDocument.Create(filePath, SpreadsheetDocumentType.Workbook))
{
    // 初始化工作簿
    WorkbookPart workbookPart = spreadsheetDocument.AddWorkbookPart();
    workbookPart.Workbook = new Workbook();
    Sheets sheets = workbookPart.Workbook.AppendChild(new Sheets());

    // 循环生成多个Sheet
    for (int i = 0; i < 需要生成的Sheet数量; i++)
    {
        // 创建工作表部件
        WorksheetPart worksheetPart = workbookPart.AddNewPart<WorksheetPart>();
        worksheetPart.Worksheet = new Worksheet(new SheetData());

        // 注册Sheet信息
        Sheet sheet = new Sheet()
        {
            Id = workbookPart.GetIdOfPart(worksheetPart), // 必须用API自动获取关系Id,禁止手动硬编码
            SheetId = (uint)i + 1, // 从1开始递增,保证唯一
            Name = $"工作表{i+1}" // 保证名称唯一、无特殊字符
        };
        sheets.Append(sheet);

        // 这里写当前Sheet的行、单元格数据填充逻辑
        SheetData sheetData = worksheetPart.Worksheet.GetFirstChild<SheetData>();
        // ... 填充数据的业务代码
    }

    workbookPart.Workbook.Save();
}

3. 排查资源匹配问题

确保Sheets集合中添加的Sheet条目数量,和你创建的WorksheetPart数量完全一致,不存在多增、漏增的情况。

快速自检方法

如果修复后还是报错,可以把生成的.xlsx文件后缀修改为.zip,解压后查看xl/workbook.xml文件里的<sheets>节点,核对每个Sheet的属性,再查看xl/_rels/workbook.xml.rels里的关系项,确认每个关系Id都对应到了正确的worksheets/sheetX.xml文件,且对应文件存在、格式合法。

内容的提问来源于stack exchange,提问作者The Inquisitive Coder

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 15:36:03