如何知道合并单元格中的可编辑单元格地址



在此处输入图像描述

这里,有四个单元格(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();

Range的MergeArea属性也是Range。如果你有一个单元格,只需使用以下内容来获得合并区域的第一个(=左上角(单元格(由于我没有它,所以在C#中未测试,但在VBA中可以使用,也应该在C#中使用(:

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

即使一个单元没有合并,MergeArea也总是被设置的,因此未合并的单元rangefirstCell将指向同一个单元。

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

'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...

这是的解决方案

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

最新更新