• EasyUI Datagrid 导出到Excel (不含frozenColumns列)


     1   var tableString = '<table border="1" bordercolor="#D7D7D7">';  
     2    var columns = printDatagrid.datagrid("options").columns;    // 得到columns对象  
     3   var nameList = new Array();//定义一个数组接受columns的所有值
     4               // 载入title  
     5               if (typeof columns != 'undefined' && columns != '') {
     6                   $(columns).each(function (index) {
     7                      tableString += '<tr>';
     8                       for (var i = 0; i < columns[index].length; ++i) {
     9                           if (!columns[index][i].hidden) {
    10                              tableString += '<th';
    11                             if (typeof columns[index][i].field != 'undefined' && columns[index][i].field != '') {
    12                                 nameList.push(columns[index][i]);
    13                              }
    14                              tableString += '>' + columns[index][i].title + '</th>';
    15                          }
    16                      }
    17                      tableString += '</tr>';
    18                  });
    19              }
    20 
    21 注:printDatagrid是dg的JQ对象

    二、读取dg正文内容;

    / 载入内容  
     2             var rows = printDatagrid.datagrid("getRows"); // 这段代码是获取当前页的所有行  
     3             for (var i = 0; i < rows.length; ++i) {
     4                 tableString += '<tr>';
     5                 for (var j = 0; j < nameList.length; ++j) {
     6                     tableString += '<td';
     7                     tableString += '>';
     8                     if (typeof (rows[i][nameList[j].field]) == "undefined") {
     9                         tableString += " "
    10                     } else {
    11                         tableString += rows[i][nameList[j].field];
    12                     }
    13                     tableString += '</td>';
    14                 }
    15                 tableString += '</tr>';
    16             }
    17             tableString += '</table>'
    复制代码

    三、由于ajax的返回类型没有流类型,所以用提交form表单的形式向后台传数据,其中参数要用encodeURI( )转码,否则html标签是传不到后台的

    1 var options = $("#dg").datagrid('getPager').pagination('options');
    2             var f = $('<form action="../handler/dgtoexcel.ashx" method="post" id="fm1"></form>');
    3             var i = $('<input type="hidden" id="contexts" name="contexts" />'); //主题内容
    4           var pn = $('<input type="hidden" id="txtname" name="txtname" />'); //文件名    
    5          i.val(encodeURI(tableid));
    6             i.appendTo(f);
    7             pn.val(encodeURI(options.pageNumber));
    8             pn.appendTo(f);       
    9  f.appendTo(document.body).submit();     提交表单 

    后台就很简单了,这里就不写了。对了request获取的参数要对参数UrlEncode解码,然后输出文件流 文件名拓展名得是  .xls

    PS:补充

    我们在导出Excel的时候会遇到长数字会转换成科学计数法的情况!

     sb.Append("<style>td{mso-number-format:"\@";}</style>");

    只需要在table标签加入上述样式几即可

  • 相关阅读:
    CSZ CMS 1.2.7 xss分析与复现
    蚁剑改造过WAF系列(一)
    代理池
    二维码劫持案例分析
    入门KKCMS代码审计
    Xposed+XServer无需脱壳抓取加密包
    通达OA前台任意用户登录分析
    ATutor学习内容管理系统任意文件上传漏洞(CVE-2019-12169)分析
    调试System.AggregateException-即使在异步代码中也是如此
    关于System.Exception
  • 原文地址:https://www.cnblogs.com/slqd/p/4897900.html
Copyright © 2020-2023  润新知