效果图如下:
代码如下:
/**//// <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;
}
}
}
}
}
新闻热点
疑难解答