【问题标题】:How do I get the size of a merged Excel cell如何获取合并的 Excel 单元格的大小
【发布时间】:2017-09-26 21:02:11
【问题描述】:

我正在尝试用 C# 编写代码来解析一个大型 Excel 工作表,该工作表在设计时并未考虑到自动化,并且它充满了合并的单元格。很多时候我知道一个单元格的位置,但需要在几个单元格之外获取另一个单元格的文本,但这些单元格可能会合并并跨越多个正常单元格。如何以单元格数获取合并单元格的大小?

另外,当单元格之间的单元格被合并时,我如何才能在一定数量的单元格之外获取单元格的位置?我尝试了 Excel.Range.Offset,但这似乎只计算真正的单元格,而不是合并的单元格(因此,如果中间有一个 4 宽的合并单元格,偏移量 2 会将我带到该单元格的中间,而不是那个旁边)。

【问题讨论】:

  • 如果您尝试过某些事情,请发布您的代码并说明您希望它做什么以及它没有做什么。
  • 为什么需要在 C# 中获取合并单元格的大小 - 为什么不获取实际的单元格距离并使用它?
  • 我不确定你的意思。我需要能够找到一个单元格,例如 2 个单元格,其中所有单元格可能会或可能不会合并。如果我的范围是合并单元格,如果我使用 cell.Offset[0,1],我会自动移动到下一个单元格,但如果我使用 Offset[0,2],之后我可能不会移动到该单元格。

标签: c# excel excel-interop


【解决方案1】:

您可以使用以下代码来确定合并区域的大小:

    var activeSheet = this.Application.ActiveSheet as Excel.Worksheet;
    if (activeSheet != null)
    {
        var activeCell = activeSheet.Cells[2, 2];
        if (activeCell.MergeCells)
        {
            if (activeCell.MergeArea != null)
            {
                dynamic mergeAreaValue2 = activeCell.MergeArea.Value2;
                object[,] vals = mergeAreaValue2 as object[,];

                if (vals != null)
                {                            
                    int rows = vals.GetLength(0);
                    int cols = vals.GetLength(1);
                }                        
            }
        }
    }

假设Cells[2,2] 是合并区域的左上角。在变量 rows 和 cols 将是合并区域中的行数和列数 - 所以这是对应该跳过多少行或列的问题的答案。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-02
    • 2012-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多