如何检测合并单元C#使用MS互操作的excel

如何检测合并单元C#使用MS互操作的excel

问题描述:

欲检测合并单元或者以行/整个片材(优选)。这里是我的代码如何检测合并单元C#使用MS互操作的excel

Microsoft.Office.Interop.Excel.Application xl = new Microsoft.Office.Interop.Excel.Application(); 
Microsoft.Office.Interop.Excel.Workbook workbook = xl.Workbooks.Open(source); 
//Microsoft.Office.Interop.Excel.Worksheet ws = (Microsoft.Office.Interop.Excel.Worksheet)workbook.Sheets[sheetNumber]; 
Microsoft.Office.Interop.Excel.Worksheet ws = (Microsoft.Office.Interop.Excel.Worksheet)workbook.Worksheets[objInMemory._sheetName]; 
xl.ScreenUpdating = false; 
ws.Columns.ClearFormats(); 
ws.Rows.ClearFormats(); 
int colCount = ws.UsedRange.Columns.Count; 
int rowCount = ws.UsedRange.Rows.Count; 
int strtRow = ws.UsedRange.Rows[1].Row; 
int strtCol = ws.UsedRange.Columns[1].Column; 


Microsoft.Office.Interop.Excel.Range objRange = null; 

无论这一段代码

if (ws.Cells.MergeCells) 
{ 

} 

也这段代码(仅适用于ROW1)

for (int j = strtCol; j < strtCol + colCount; j++) 
{ 
    objRange = ws.Cells[strtRow, j]; 

    if (ws.Cells[strtRow, j].MergeCells) 
    { 
     message = "The Sheet Contains Merged Cells"; 
     break; 
    } 
} 

似乎work..Kindly让我知道如何检查是否纸张/秒特定范围包含合并的单元格。

如果你想检查一个Range是否包含合并的单元格,那么MergeCells属性就是你所追求的。

如果范围合并,它将返回true。如果一个范围包含合并单元格(即一些合并,有些不合并),它将返回DBNull.Value

所以,这应该为你的整个工作表的工作:

object mergeCells = ws.UsedRange.MergeCells; 
var containsMergedCells = mergeCells == DBNull.Value || (bool)mergeCells; 
+0

这没有奏效。'containsMergedCells'总是错误的事件,但我的工作表中的列标题(第1行)包含m erged cells – sadhana

+0

不知道该建议什么。我在生产代码中使用了类似的东西,没有问题,我通过在空白表单上执行此代码进行了测试,合并了'A1:B1'并在其他地方添加了一个值并再次执行 - 它按预期工作 - 'MergeCells'为'DBNull .Value'。 –

+0

我无法弄清确切的问题......如果你用for循环查看我的代码,你会注意到它是你的代码的单元格版本。当合并的单元格不是空? – sadhana

MergeCells不是一个细胞的功能,它的范围功能,所以不是:

if (ws.Cells[strtRow, j].MergeCells) 

你需要:

_Excel.Range range = (_Excel.Range) ws.Cells[strtRow, j]; 
if(range.MergeCells) //returns true if cell is merged or false if its not