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

C# 使用OpenXml生成Excel时无法合并多个单元格问题求助

Excel合并单元格不生效问题解决方法

核心错误原因

你当前的问题是把MergeCells对象挂载到了SheetData下,不符合Office Open XML的文件结构规范:MergeCells是Worksheet的直接子节点,需要和SheetData同级,放在SheetData的后面,Excel才可以正常识别合并单元格规则。

修正方案

修改合并单元格的挂载位置,代码调整如下:

SheetData sheetData = new SheetData();
Row headers = new Row();
headers.Append(new Cell
{
    CellValue = new CellValue("Losses"), DataType = CellValues.String, StyleIndex = 2U,
    CellReference = new StringValue("A1")
});
headers.Append(new Cell
{
    CellValue = new CellValue("Target"), DataType = CellValues.String, StyleIndex = 2U,
    CellReference = new StringValue("F1"),
});
sheetData.Append(headers);

// creating headers in one row
sheetData.Append(CreateHeaderRowForExcel(type));

byte level = 1;
foreach (MaterialLossDto obj in data)
{
    sheetData.Append(AddRowsRecursion(obj, ref level, sheetData));
}

// 先将填充好的SheetData添加到Worksheet
worksheet.Append(sheetData);

// 再创建MergeCells集合,添加到Worksheet(不是SheetData)
MergeCells mergeCells = new MergeCells();
mergeCells.Append(new MergeCell() {Reference = new StringValue("A1:D1")});
mergeCells.Append(new MergeCell() {Reference = new StringValue("F1:G1")});
worksheet.Append(mergeCells);

其他需要检查的点

  • 确认合并区域内仅左上角单元格有值,其他位置的单元格不要填充内容,避免覆盖显示
  • 确认你使用的StyleIndex=2U对应的样式在全局样式表中存在,样式定义缺失可能导致单元格解析异常
  • 确认合并区域的Reference格式正确,列号行号没有拼写错误

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 11:39:03