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

如何使用C#代码将数据拆分写入Excel的多个工作表中

问题原因

你的代码核心错误出在工作表实例的创建逻辑上:

  • 你在循环创建工作表前仅创建了1个WorksheetPart和对应的Worksheet对象,循环内所有Sheet标签都绑定了同一个WorksheetPart的ID,本质上所有工作表标签都指向同一份工作表数据
  • 所有表头、行数据都被追加到了同一个Worksheet的SheetData集合中,每次循环都是往同一份数据里累加内容,最终所有标签打开看到的都是全量累加后的数据
修复方案

将工作表实例的创建逻辑移到循环内部,每次生成分片时都创建独立的工作表实例,绑定到对应的Sheet标签上,修改后的代码如下:

using (SpreadsheetDocument spreadsheetDocument = SpreadsheetDocument.Create(filename, DocumentFormat.OpenXml.SpreadsheetDocumentType.Workbook))
{
    WorkbookPart workbookPart = spreadsheetDocument.AddWorkbookPart();
    workbookPart.Workbook = new Workbook();
    Sheets sheets = workbookPart.Workbook.AppendChild(new Sheets());

    for (int i = 0; i < Amount; i++)
    {
        // 每次循环创建独立的工作表实例
        WorksheetPart worksheetPart = workbookPart.AddNewPart<WorksheetPart>();
        worksheetPart.Worksheet = new Worksheet(new SheetData());
        var workSheet = worksheetPart.Worksheet;
        
        Sheet sheet = new Sheet()
        {
            Id = workbookPart.GetIdOfPart(worksheetPart), // 绑定当前新工作表的ID
            SheetId = ((uint)(i + 1)),
            Name = "Data" + (i + 1)
        };
                            
        sheets.Append(sheet);
        var HeadRow = workSheet.GetFirstChild<SheetData>().AppendChild(new Row());
        HeadRow.AppendChild(new Cell() { CellValue = new CellValue("Type"), DataType = new EnumValue<CellValues>(CellValues.String) });
        HeadRow.AppendChild(new Cell() { CellValue = new CellValue("Description"), DataType = new EnumValue<CellValues>(CellValues.String) });
        HeadRow.AppendChild(new Cell() { CellValue = new CellValue("Time"), DataType = new EnumValue<CellValues>(CellValues.String) });
        HeadRow.AppendChild(new Cell() { CellValue = new CellValue("Date"), DataType = new EnumValue<CellValues>(CellValues.String) });
        
        for (int j = 0 + (i * (int)OrgAmount); j < ((i + 1) * (int)OrgAmount); j++)
        {
            if (j == LineCount)
            {
                break;
            }

            var row = workSheet.GetFirstChild<SheetData>().AppendChild(new Row());
            var cell1 = row.AppendChild(new Cell());
            var cell2 = row.AppendChild(new Cell());
            var cell3 = row.AppendChild(new Cell());
            var cell4 = row.AppendChild(new Cell());

            cell1.CellValue = new CellValue(LineType[j]);
            cell1.DataType = new EnumValue<CellValues>(CellValues.String);
            cell2.CellValue = new CellValue(LineDesc[j]);
            cell2.DataType = new EnumValue<CellValues>(CellValues.String);
            cell3.CellValue = new CellValue(LineTime[j]);
            cell3.DataType = new EnumValue<CellValues>(CellValues.String);
            cell4.CellValue = new CellValue(LineDate[j]);
            cell4.DataType = new EnumValue<CellValues>(CellValues.String);
        }
    }
    workbookPart.Workbook.Save(); // 所有工作表生成完成后统一保存即可
    spreadsheetDocument.Close();
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 19:15:07