【问题标题】:How to know editable cell address in merged cells如何知道合并单元格中的可编辑单元格地址
【发布时间】:2021-01-29 20:09:14
【问题描述】:

enter image description here

这里有四个单元格(A1,B1,C1,D1)已经合并,我想得到可编辑的单元格地址(A1)。 根据 Excel A1 单元格可以编辑,其他不可编辑。 我可以使用下面的代码将合并的单元格计数为 4。 我也可以得到单元格是否已合并。 但无法获取合并单元格中可编辑单元格(A1)的地址。

                Microsoft.Office.Interop.Excel.Application appl = null;
                appl = new Microsoft.Office.Interop.Excel.Application();
                Microsoft.Office.Interop.Excel.Workbook wbk;
                wbk = appl.Workbooks.Open("C:\\Users\\test\\Desktop\\test.xlsx");
                Worksheet sheet = wbk.Worksheets.get_Item(1);

                Range range = sheet.Cells[1, 2]; //B1 Cell

                var a = range.Cells.MergeArea.Count;  // can be able to get merged count cells

                string b = range.Address;
                **int ab = range.Cells.Areas.Count;**
                Range ac = range.Cells.Areas.get_Item(1);

                for (int i = 1; i <= 4; i++)
                {
                    **if (sheet.Cells[1, i].Mergecells)**   //merged cell
                    { 
                       MessageBox.Show("Merged");
                    }
                    else //Unmerged cell
                    {
                       MessageBox.Show("UnMerged Cells");   
                    }
                }
                wbk.Save();
                wbk.Close(false);
                appl.Quit();

【问题讨论】:

  • 不是很清楚你需要什么,其实……你不需要提取单元格“B1”的合并区域显示的值吗?

标签: c# excel vba excel-interop


【解决方案1】:

Range 的MergeArea 属性又是一个 Range。如果你有一个单元格,只需使用类似下面的内容来获取合并区域的第一个(=左上角)单元格(在 C# 中未经测试,因为我没有它可用,但在 VBA 中工作并且也应该适用于 C#) :

Range range = sheet.Cells[1, 2];
Range firstCell = range.MergeArea.Cells[1, 1];

即使未合并单元格,这也有效,始终设置 MergeArea,因此未合并的单元格 rangefirstCell 将指向同一个单元格。

【讨论】:

    【解决方案2】:

    如果我正确理解了您的真正需求,请尝试下一种方法。它基于合并区域将值保留在其第一个单元格这一事实:

    'your existing code...
                    if (sheet.Cells[1, i].Mergecells)   //merged cell
                        { 
                           MessageBox.Show(sheet.Cells[1, i].MergeArea.cells[1, 1].Value);
                        }
                        else //Unmerged cell
                        {
                           MessageBox.Show(sheet.Cells[1, i].Value);   
                        }
    'your existing code...
    

    【讨论】:

      【解决方案3】:

      解决办法

      string mergedCellsAddress = mergedRange.Address;
      string[] firstMergedCell = mergedCellsAddress.Split(':');
      string firstCell = firstMergedCell.GetValue(0).ToString().Replace("$", "");
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-06-06
        • 2012-03-13
        • 1970-01-01
        • 2014-04-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多