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标签加入上述样式几即可

 

posted @ 2015-10-21 15:14  立于群  阅读(1727)  评论(0编辑  收藏  举报