Quiero detectar celdas combinadas en una fila/hoja completa (preferible). Aquí está mi código
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;Ni este trozo de código
if (ws.Cells.MergeCells) { }Ni este fragmento de código (solo para la fila 1)
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; } }parece funcionar ... Por favor, hágame saber cómo verificar si una hoja / rango específico contiene celdas combinadas.
Si desea verificar si un Range contiene celdas combinadas, lo que busca es la propiedad MergeCells .
Si se fusiona un rango, devolverá true . Si un rango contiene celdas combinadas (es decir, algunas están combinadas, otras no), devolverá DBNull.Value .
Entonces, esto debería funcionar para toda su hoja:
object mergeCells = ws.UsedRange.MergeCells; var containsMergedCells = mergeCells == DBNull.Value || (bool)mergeCells;MergeCells no es una función de celdas, es una función de rango, así que en lugar de:
if (ws.Cells[strtRow, j].MergeCells)necesitas:
_Excel.Range range = (_Excel.Range) ws.Cells[strtRow, j]; if(range.MergeCells) //returns true if cell is merged or false if its notws.Columns.ClearFormats(); y ws.Rows.ClearFormats(); para que funcione la propiedad range.MergeCells .