Table中合并相同内容列+Excel中合并相同内容列。_.NET_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > .NET > Table中合并相同内容列+Excel中合并相同内容列。

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

 2013/7/11 17:14:55  叶翔(常州)  博客园  我要评论(0)
  • 摘要:Table中合并相同内容列的方法比较好办,网上代码也很多,参照了一些把它封装成jquery插件,调用起来还是蛮好用的。这个地方稍微修改了下,有的时候td中内容虽然一样,但是数据库中的value却是不一样的,比如不同的公司,都有人事部,财务部,公司A的财务部和公司B的财务部不能合并起来,所以我就给td加了个name属性。用于保存部门的ID,集团里面各公司部门ID总归不一样。调用方式$(function(){$("#tbdianbao").rowspan(1);//合并第2列,$
  • 标签:excel 内容

Table中合并相同内容列的方法比较好办,网上代码也很多,参照了一些把它封装成jquery

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

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

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

调用方式

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

            });

class="brush:javascript;gutter:true;">(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");

 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         }

 

发表评论
用户名: 匿名