Table中合併相同內容列的方法比較好辦,網上代碼也很多,參照了一些把它封裝成jquery 插件,調用起來還是蠻好用的。 這個地方稍微修改了下,有的時候td中內容雖然一樣,但是資料庫中的value卻是不一樣的,比如不同的公司,都有人事部,財務部, 公司A的財務部和公司B的財務部不能合併起來,所以我就 ...
Table中合併相同內容列的方法比較好辦,網上代碼也很多,參照了一些把它封裝成jquery
插件,調用起來還是蠻好用的。
這個地方稍微修改了下,有的時候td中內容雖然一樣,但是資料庫中的value卻是不一樣的,比如不同的公司,都有人事部,財務部,
公司A的財務部和公司B的財務部不能合併起來,所以我就給td加了個name屬性。用於保存部門的ID,集團裡面各公司部門ID總歸不一樣。
調用方式
$(function() {
$("#tbdianbao").rowspan(1);//合併第2列,
$("#tbdianbao").rowspan(2);//合併第3列
});
?1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
( function ($) {
$.fn.extend({
//調用插件時的名字,傳入的是列的索引0,1,2,,,
"rowspan" : function (colIdx) {
var that;
var rowspan;
//遍歷table中的行
$( this ).find( "tr" ).each( function (row) {
//獲得該索引列的集合,並且用filter再過濾一下,取得可見的列,然後遍歷它們
$( 'td:eq(' + colIdx + ')' , this ).filter( ':visible' ).each( function (col) {
//發現上下兩列的內容一樣
if (that != null && $<span style= "color: #ff0000;" >( this ).attr( "name" ) == $(that).attr( "name" ))</span> {
rowspan = $(that).attr( "rowSpan" );
//如果是第一次進來合併兩列
if (rowspan == undefined) {
$(that).attr( "rowSpan" , 1);
rowspan = $(that).attr( "rowSpan" );
}
rowspan = Number(rowspan) + 1;
$(that).attr( "rowSpan" , rowspan);
//將該列隱藏
$( this ).hide();
}
else {
//相當保存上一列的對象
that = this ;
}
});
});
}
});
})(jQuery);
|
生成的表我們可能還要導入至Excel, 也需要合併相同的列,我們這些不懂VBA的孩紙傷不起啊,所以只能在生成Excel的時候自己判斷合併列了
將從excel第3行寫起,2列中公司ID相同的列合併,3列中部門ID相同的列合併
this.margeCol(worksheet, 2, 2, dtExcel, "GongSiID");
this.margeCol(worksheet, 2, 3, dtExcel, "BuMenId");
1 /// <summary> 2 /// 合併Excel中的列 3 /// </summary> 4 /// <param name="worksheet">工作簿</param> 5 /// <param name="rno">工作簿起始行的上一行</param> 6 /// <param name="cno">工作簿起始列</param> 7 /// <param name="dttemp">綁定用表</param> 8 /// <param name="colName">合併用列</param> 9 private void margeCol(Microsoft.Office.Interop.Excel._Worksheet worksheet, int rno, int cno,DataTable dttemp,string colName) 10 { 11 string dcvalue = string.Empty; 12 13 int sron=rno;//起始行 14 15 foreach (DataRow dr in dttemp.Rows) { 16 17 if (dcvalue != string.Empty && dcvalue == dr[colName].ToString()) 18 { 19 rno = rno + 1;//行累加 20 } 21 else 22 { 23 dcvalue = dr[colName].ToString(); 24 25 //當目標行比起始行大的時候說明有行的內容一致 26 if (rno > sron) { 27 worksheet.get_Range(worksheet.Cells[sron, cno], worksheet.Cells[rno, cno]).Merge(worksheet.get_Range(worksheet.Cells[sron, cno], worksheet.Cells[rno, cno]).MergeCells); 28 } 29 30 //合併結束後起始行往下移動一行 31 rno = rno + 1; 32 sron = rno; 33 34 } 35 } 36 37 }