jqGrid导出excel
项目中经常需要将查找出来的jqGrid表单导出成excel,原先的做法就是跳转到后端然后通过数据库中再查找一次然后用POI导出。
后来需要查找的表格多了一系列问题也就出来了:
1.每次的导出栏不一样都要针对性的对代码进行修改。
2.如果数据查询复杂的话无疑增加了数据库的负担,以及导出的等待时长。
于是我就开始考虑查找js导出的相关插件,网上有关内容相对比较少,但是功夫不负有心人终于让我找到了tableExport,这款插件还支持导出成txt,word,json等数据格式
这原来是在table上使用的放到jqGrid上需要修改一些内容,这款插件是国外人开发的也缺少对中文的支持。所幸最后这些问题都一一解决了。
贴上效果图
js代码
$("#exportExcel").click(function(){ var tableid = "list2";//表格ID var head = $("#gbox_" + tableid + \' .ui-jqgrid-htable thead\').clone();//克隆表头 var dom = $("#" + tableid).clone();//克隆表内容 dom.find(\'.jqgfirstrow\').remove();//干掉多余的无效行 dom.find(\'tr.ui-search-toolbar\').remove();//干掉搜索框 dom.find(\'tbody\').before(head);//合并表头和表数据 dom.tableExport({ type: \'excel\', escape: \'false\' });//导出 })
修改了一部分源码
base64部分,解决编码问题
// private property var keyStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="; // private method for UTF-8 encoding function utf8Encode(string) { string = string.replace(/\r\n/g, "\n"); var utftext = ""; for (var n = 0; n < string.length; n++) { var c = string.charCodeAt(n); if (c < 128) { utftext += String.fromCharCode(c); } else if ((c > 127) && (c < 2048)) { utftext += String.fromCharCode((c >> 6) | 192); utftext += String.fromCharCode((c & 63) | 128); } else { utftext += String.fromCharCode((c >> 12) | 224); utftext += String.fromCharCode(((c >> 6) & 63) | 128); utftext += String.fromCharCode((c & 63) | 128); } } return utftext; } function encode(input) { var output = ""; var chr1, chr2, chr3, enc1, enc2, enc3, enc4; var i = 0; input = utf8Encode(input); while (i < input.length) { chr1 = input.charCodeAt(i++); chr2 = input.charCodeAt(i++); chr3 = input.charCodeAt(i++); enc1 = chr1 >> 2; enc2 = ((chr1 & 3) << 4) | (chr2 >> 4); enc3 = ((chr2 & 15) << 2) | (chr3 >> 6); enc4 = chr3 & 63; if (isNaN(chr2)) { enc3 = enc4 = 64; } else if (isNaN(chr3)) { enc4 = 64; } output = output + keyStr.charAt(enc1) + keyStr.charAt(enc2) + keyStr.charAt(enc3) + keyStr.charAt(enc4); } return output; } return { decode: _decode, encode: function (str) { return encode(str); }, VERSION: _VERSION };
新增两个encode方法对UTF-8进行编码,修改return方法。
//console.log($(this).html()); var excel="<table>"; // Header $(el).find(\'thead\').find(\'tr\').each(function() { excel += "<tr>"; $(this).find(\'th\').each(function(index,data) { if ($(this).css(\'display\') != \'none\'){ if(defaults.ignoreColumn.indexOf(index) == -1){ excel += "<td>" + parseString($(this))+ "</td>"; } } }); excel += \'</tr>\'; }); // Row Vs Column var rowCount=1; $(el).find(\'tbody\').find(\'tr\').each(function() { excel += "<tr>"; var colCount=0; $(this).find(\'td\').each(function(index,data) { if ($(this).css(\'display\') != \'none\'){ if(defaults.ignoreColumn.indexOf(index) == -1){ excel += "<td>"+parseString($(this))+"</td>"; } } colCount++; }); rowCount++; excel += \'</tr>\'; }); excel += \'</table>\'
$(this).filter(\':visible\').find(\'th\') 中的可见过滤器删掉 ,
修改成
$(this).find(\'th\')
最后附上我的代码供大家参考,使用的是jqGrid中的新手demo
链接:https://pan.baidu.com/s/1kq7eFoYw5MhpDMo9QINxWQ
提取码:fw1d