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

如何获取Excel合并列相邻单元格的值?(C# Interop场景)

解决思路与实现代码

针对你需要从Excel合并单元格旁提取文本列表的需求,我们可以利用Range.MergeArea属性来获取完整的合并区域——这是Interop Excel里处理合并单元格的关键,它能返回包含当前单元格的整个合并单元格范围,通过这个范围我们就能知道合并区域的行数/列数,进而遍历对应的相邻单元格。

核心思路步骤:

  • 判断并获取合并区域:先检查传入的range是否为合并单元格(通过MergeCells属性),如果是,就用MergeArea拿到整个合并区域的范围;如果不是,就直接用传入的range本身。
  • 确定相邻单元格的位置:根据你的示例,我们假设要提取的是目标区域右侧相邻列的单元格文本(如果你的实际需求是其他方向,可以调整Offset的参数)。
  • 遍历合并区域的每一行:对合并区域的每一行,定位到对应行的相邻单元格,提取其文本内容(注意处理空单元格的情况),最终收集到列表中。

实现代码

using Microsoft.Office.Interop.Excel;
using System.Collections.Generic;

public List<string> GetNextTexts(Range range)
{
    List<string> result = new List<string>();
    if (range == null) return result;

    // 获取完整的合并区域(如果是合并单元格的话)
    Range mergeArea = range.MergeCells ? range.MergeArea : range;

    // 遍历合并区域的每一行
    foreach (Range row in mergeArea.Rows)
    {
        // 获取当前行右侧相邻的单元格(Offset(行偏移, 列偏移),这里列偏移+1表示右侧一列)
        Range adjacentCell = row.Offset[0, 1];
        if (adjacentCell != null && adjacentCell.Value != null)
        {
            // 将单元格值转换为字符串并加入结果列表
            string cellText = adjacentCell.Value.ToString().Trim();
            if (!string.IsNullOrEmpty(cellText))
            {
                result.Add(cellText);
            }
        }
    }

    return result;
}

代码说明:

  1. 合并区域处理:通过MergeCells判断是否为合并单元格,用MergeArea获取整个合并范围,这样不管你传入的是合并区域中的哪一个单元格,都能拿到完整的合并行/列。
  2. 相邻单元格定位:使用Offset[0,1]获取当前行右侧的单元格,如果你需要提取左侧、上方或下方的单元格,只需要调整Offset的参数即可(比如Offset[1,0]是下方一行)。
  3. 空值处理:加入了对单元格为空的判断,避免空引用异常,同时跳过空文本的单元格。

根据你的示例:

  • 调用GetNextTexts(rangeTest)时,rangeTest的合并区域是2行,对应右侧的两个单元格TestRx和TestSPC,会返回包含这两个字符串的列表。
  • 调用GetNextTexts(rangeTestRx)时,合并区域是4行,对应右侧四个单元格,返回{P4_7, P0_0, P0_14, P3_2}。
  • 调用GetNextTexts(rangeTestSPC)时,合并区域是1行,返回{P2_4}。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 07:45:04