public static int MergeRanges(Range currentCellRange, MergeOption mOption) { Worksheet sheet = currentCellRange.Worksheet; Range range = null; // clear value first. currentCellRange.Value2 = null; currentCellRange.Text = ""; switch (mOption) { case MergeOption.Up: // Select previous range. range = GetRange(sheet, currentCellRange.Column, currentCellRange.Row - 1, 1, 1); if (range.HasMerged) { Range marea = range.MergeArea; int mWidth = currentCellRange.Column - marea.Column + 1; int mHeight = currentCellRange.Row - marea.Row + 1; /*if (mWidth <= marea.ColumnCount && mHeight <= marea.RowCount) * { * Console.WriteLine ("Has be merged. ignore"); * return 1 ; * }*/ if (mWidth < marea.ColumnCount) { mWidth = marea.ColumnCount; } if (mHeight < marea.RowCount) { mHeight = marea.RowCount; } range = GetRange(sheet, marea.Column, marea.Row, mWidth, mHeight); /* * Console.WriteLine("Up cell has been merged: [" + * marea.Column + ", " + marea.Row + "], " + * (currentCellRange.Column - marea.Column + 1) + ", " + * (currentCellRange.Row - marea.Row + 1) + ", [" + * marea.ColumnCount + "," + marea.RowCount + "]"); */ range.Merge(); } else { range = GetRange(sheet, currentCellRange.Column, currentCellRange.Row - 1, 1, 2); range.Merge(); } return(1); case MergeOption.Left: // merge with Left cell. /* * Console.WriteLine("Merge Left: get left cell first: [" + * (currentCellRange.Column ) + * ", " + currentCellRange.Row + "].") ; */ range = GetRange(sheet, currentCellRange.Column - 1, currentCellRange.Row, 1, 1); if (range.HasMerged) { Range marea = range.MergeArea; int mWidth = currentCellRange.Column - marea.Column + 1; int mHeight = currentCellRange.Row - marea.Row + 1; if (mWidth < marea.ColumnCount) { mWidth = marea.ColumnCount; } if (mHeight < marea.RowCount) { mHeight = marea.RowCount; } range = GetRange(sheet, marea.Column, marea.Row, mWidth, mHeight); /* * Console.WriteLine ("Left cell has been merged: [" + * marea.Column + ", " + marea.Row + "], " + * (currentCellRange.Column - marea.Column + 1) + ", " + * (currentCellRange.Row - marea.Row + 1) + ", [" + * marea.ColumnCount + "," + marea.RowCount + "]"); */ range.Merge(); } else { range = GetRange(sheet, currentCellRange.Column - 1, currentCellRange.Row, 2, 1); range.Merge(); } // range.Merge (); return(1); case MergeOption.never: default: return(0); } }