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