您的位置:首页 > 其它

Table中合并相同内容列+Excel中合并相同内容列。

2013-07-11 16:04 351 查看
Table中合并相同内容列的方法比较好办,网上代码也很多,参照了一些把它封装成jquery

插件,调用起来还是蛮好用的。

这个地方稍微修改了下,有的时候td中内容虽然一样,但是数据库中的value却是不一样的,比如不同的公司,都有人事部,财务部,

公司A的财务部和公司B的财务部不能合并起来,所以我就给td加了个name属性。用于保存部门的ID,集团里面各公司部门ID总归不一样。

调用方式

$(function() {

$("#tbdianbao").rowspan(1);//合并第2列,
$("#tbdianbao").rowspan(2);//合并第3列

});

(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 && $(this).attr("name") == $(that).attr("name")) {

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");

/// <summary>
/// 合并Excel中的列
/// </summary>
/// <param name="worksheet">工作簿</param>
/// <param name="rno">工作簿起始行的上一行</param>
/// <param name="cno">工作簿起始列</param>
/// <param name="dttemp">绑定用表</param>
/// <param name="colName">合并用列</param>
private void margeCol(Microsoft.Office.Interop.Excel._Worksheet worksheet, int rno, int cno,DataTable dttemp,string colName)
{
string dcvalue = string.Empty;

int sron=rno;//起始行

foreach (DataRow dr in dttemp.Rows) {

if (dcvalue != string.Empty && dcvalue == dr[colName].ToString())
{
rno = rno + 1;//行累加
}
else
{
dcvalue = dr[colName].ToString();

//当目标行比起始行大的时候说明有行的内容一致
if (rno > sron) {
worksheet.get_Range(worksheet.Cells[sron, cno], worksheet.Cells[rno, cno]).Merge(worksheet.get_Range(worksheet.Cells[sron, cno], worksheet.Cells[rno, cno]).MergeCells);
}

//合并结束后起始行往下移动一行
rno = rno + 1;
sron = rno;

}
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: