• 【js-xlsx和file-saver插件】前端html的table导出数据到excel的表格增加表格标题行


    基于上一篇随笔后,新需求需要再导出的表格上面加一行标题行

     1 function parse_dom_table_addtitle(table, _opts, title) {
     2         var opts = _opts || {};
     3         var oss = opts.defaultCellStyle || {};  /*单元格样式  */
     4         if (DENSE != null) opts.dense = DENSE;
     5         var ws = opts.dense ? ([]) : ({});
     6         var rows = table.getElementsByTagName('tr');
     7         var sheetRows = Math.min(opts.sheetRows || 10000000, rows.length);
     8         var range = { s: { r: 0, c: 0 }, e: { r: sheetRows+1 , c: 0 } };
     9         var merges = [], midx = 0;
    10         var R = 1, _C = 0, C = 0, RS = 0, CS = 0;
    11         var _title = title || ""; 
    12         var title_o = { t: 's', v: _title, s: oss };
    13         ws[encode_cell({ c: 0, r: 0 })] = title_o;
    14         var maxc = 0;
    15         for (; R < sheetRows+1; ++R) {
    16             var nR = R - 1
    17             var row = rows[nR];
    18             var elts = (row.children);
    19             for (_C = C = 0; _C < elts.length; ++_C) {
    20                 var elt = elts[_C], v = htmldecode(elts[_C].innerHTML);
    21                 for (midx = 0; midx < merges.length; ++midx) {
    22                     var m = merges[midx];
    23                     if (m.s.c == C && m.s.r <= R && R <= m.e.r) {
    24                         C = m.e.c + 1; midx = -1;
    25                     }
    26                 }
    27                 /* TODO: figure out how to extract nonstandard mso- style */
    28                 CS = +elt.getAttribute("colspan") || 1;
    29                 if ((RS = +elt.getAttribute("rowspan")) > 0 || CS > 1)
    30                     merges.push({ s: { r: R, c: C }, e: { r: R + (RS || 1) - 1, c: C + CS - 1 } });
    31                 var o = { t: 's', v: v, s: oss };
    32                 var _t = elt.getAttribute("t") || "";
    33                 if (v != null) {
    34                     if (v.length == 0) o.t = _t || 's';
    35                     else if (opts.raw || v.trim().length == 0 || _t == "s") { }
    36                     else if (v === 'TRUE') o = { t: 'b', v: true, s: oss };
    37                     else if (v === 'FALSE') o = { t: 'b', v: false, s: oss };
    38                     else if (!isNaN(fuzzynum(v))) o = { t: 'n', v: fuzzynum(v), s: oss };
    39                     else if (!isNaN(fuzzydate(v).getDate())) {
    40                         o = ({ t: 'd', v: parseDate(v), s: oss });
    41                         if (!opts.cellDates) o = ({ t: 'n', v: datenum(o.v), s: oss });
    42                         o.z = opts.dateNF || SSF._table[14];
    43                     }
    44                 }
    45                 if (opts.dense) { if (!ws[R]) ws[R] = []; ws[R][C] = o; }
    46                 else ws[encode_cell({ c: C, r: R })] = o;
    47                 /* 合并数据处理开始*/
    48                 if (CS > 1) {
    49                     for (var i = 1; i < CS; i++) {
    50                         var newc = C + i
    51                         if (RS > 1) {
    52                             for (var m = 1; m < RS; m++) {
    53                                 var newr = R + m;
    54                                 ws[encode_cell({ c: newc, r: newr })] = o;
    55                             }
    56                         }
    57                         else {
    58                             ws[encode_cell({ c: newc, r: R })] = o;
    59                         }
    60                     }
    61                 }
    62                 else {
    63                     if (RS > 1) {
    64                         for (var m = 1; m < RS; m++) {
    65                             var newr = R + m;
    66                             ws[encode_cell({ c: C, r: newr })] = o;
    67                         }
    68                     }
    69                     else {
    70                         ws[encode_cell({ c: C, r: R })] = o;
    71                     }
    72                 }
    73                 /*合并数据处理结束*/
    74                 if (range.e.c < C) range.e.c = C;
    75                 C += CS;
    76                 if (maxc < C)
    77                 {
    78                     maxc = C;
    79                 }
    80             }
    81             if (R == sheetRows)
    82             {
    83                 merges.push({ s: { r: 0, c: 0 }, e: { r: 0, c: maxc-1 } });
    84             }
    85         }
    86         ws['!merges'] = merges;
    87         ws['!ref'] = encode_range(range);
    88         if (sheetRows < rows.length) ws['!fullref'] = encode_range((range.e.r = rows.length-1 , range));
    89         return ws;
    90     }
  • 相关阅读:
    多进程之数据安全问题
    windows 下安装 RabbitMQ
    springCloud Config分布式配置中心
    git配置ssh
    spring cloud Gateway 新一代网关
    spring cloud Hystrix 断路器
    spring cloud OpenFeign 服务接口调用
    Ribbon负载均衡服务调用
    consul服务注册与发现
    Eureka服务治理
  • 原文地址:https://www.cnblogs.com/lilyshy/p/9007629.html
Copyright © 2020-2023  润新知