
Code
/// <summary>
/// 合并单元格,并赋值,对指定WorkSheet操作
/// </summary>
/// <param name="sheetIndex">WorkSheet索引</param>
/// <param name="beginRowIndex">开始行索引</param>
/// <param name="beginColumnIndex">开始列索引</param>
/// <param name="endRowIndex">结束行索引</param>
/// <param name="endColumnIndex">结束列索引</param>
/// <param name="text">合并后Range的值</param>
public void MergeCells(int sheetIndex,int beginRowIndex,int beginColumnIndex,int endRowIndex,int endColumnIndex,string text)
{
if(sheetIndex > this.WorkSheetCount)
{
this.KillExcelProcess();
throw new Exception("索引超出范围,WorkSheet索引不能大于WorkSheet数量!");
}
workSheet = (Excel.Worksheet)workBook.Worksheets.get_Item(sheetIndex);
range = workSheet.get_Range(workSheet.Cells[beginRowIndex,beginColumnIndex],workSheet.Cells[endRowIndex,endColumnIndex]);
range.ClearContents(); //先把Range内容清除,合并才不会出错
range.MergeCells = true;
range.Value = text;
range.HorizontalAlignment = Excel.XlHAlign.xlHAlignCenter;
range.VerticalAlignment = Excel.XlVAlign.xlVAlignCenter;

/**//// <summary>
/// 合并工作表中指定行数和列数数据相同的单元格
/// </summary>
/// <param name="sheetIndex">工作表索引</param>
/// <param name="beginRowIndex">开始行索引</param>
/// <param name="beginColumnIndex">开始列索引</param>
/// <param name="rowCount">要合并的行数</param>
/// <param name="columnCount">要合并的列数</param>
public void MergeWorkSheet(int sheetIndex,int beginRowIndex,int beginColumnIndex,int rowCount,int columnCount)

{

//检查参数
if ( columnCount < 1 || rowCount < 1)
return ;

for(int col=0;col<columnCount;col++)

{
int mark = 0; //标记比较数据中第一条记录位置
int mergeCount = 1; //相同记录数,即要合并的行数
string text = "";
for(int row=0;row<rowCount;row++)

{
string prvName = "";
string nextName = "";

//最后一行不用比较
if( row + 1 < rowCount)

{
for(int n=0;n<=col;n++)

{
range = (Excel.Range)workSheet.Cells[row + beginRowIndex,n + beginColumnIndex];
range = (Excel.Range)range.MergeArea.get_Item(1,1);
text = range.Text.ToString();
prvName = prvName + text;

range = (Excel.Range)workSheet.Cells[row + 1 + beginRowIndex,n + beginColumnIndex];
range = (Excel.Range)range.MergeArea.get_Item(1,1);
nextName = nextName + range.Text.ToString();

}
if(prvName == nextName)

{
mergeCount++;

if(row == rowCount - 2)

{
this.MergeCells(sheetIndex,beginRowIndex + mark,beginColumnIndex + col,beginRowIndex + mark + mergeCount - 1,beginColumnIndex + col,text);
}
}
else

{
this.MergeCells(sheetIndex,beginRowIndex + mark,beginColumnIndex + col,beginRowIndex + mark + mergeCount - 1,beginColumnIndex + col,text);
mergeCount = 1;
mark = row + 1;
}
}
}
}
}
转载于:https://www.cnblogs.com/Jerrybook/archive/2009/08/26/1554431.html