如何使用ClosedXml和C#合并Excel工作表中的两列
使用ClosedXml和C#合并Excel工作表Q、R列实现方案
前置准备
首先安装ClosedXml依赖,可通过NuGet包管理器搜索安装,或执行包管理器控制台命令:Install-Package ClosedXML
场景1:视觉合并单元格(每行Q、R列合并为一个单元格)
适用于需要将两行单元格在界面上合并展示的需求,代码如下:
using ClosedXML.Excel; // 加载本地Excel文件 using var workbook = new XLWorkbook("你的原文件路径.xlsx"); // 选取目标工作表,可按索引取(比如第一个表为.Worksheet(1)) var worksheet = workbook.Worksheet("目标工作表名称"); // 遍历工作表所有已使用的行 foreach (var row in worksheet.RangeUsed().Rows()) { // 如需跳过表头,可添加判断:if(row.RowNumber() == 1) continue; // 合并当前行的第17列(Q)到第18列(R) row.Cell(17).Merge().To(row.Cell(18)); } // 保存修改后的文件 workbook.SaveAs("输出文件路径.xlsx");
注意:单元格合并后默认仅展示左上角(Q列)原有内容,如需同时保留两列内容,可在合并前先拼接内容赋值给Q列:
row.Cell(17).Value = $"{row.Cell(17).Value} {row.Cell(18).Value}";
场景2:合并两列内容到单独一列
适用于不需要调整单元格结构,仅需把Q、R两列的内容拼接后存储的需求,代码如下:
using ClosedXML.Excel; using var workbook = new XLWorkbook("你的原文件路径.xlsx"); var worksheet = workbook.Worksheet("目标工作表名称"); foreach (var row in worksheet.RangeUsed().Rows()) { // 按需调整拼接规则,可添加分隔符、格式转换逻辑 string mergedText = $"{row.Cell(17).Value?.ToString()}{row.Cell(18).Value?.ToString()}"; // 这里是赋值到S列(第19列),也可直接覆盖Q/R列 row.Cell(19).Value = mergedText; } workbook.SaveAs("输出文件路径.xlsx");
常用补充配置
- 列索引对应规则:Excel中A列对应索引1,以此类推Q=17、R=18、S=19
- 合并后可统一设置对齐样式:
worksheet.Columns(17,18).Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Center;
内容的提问来源于stack exchange,提问作者Sushmit
相关产品推荐
相关产品推荐

