一、通过传入tableId导出excel 寻找到了一个用法简单而且输出的excel表格也好看的excel插件,这是用法链接 http://www.jq22.com/jquery-info19771 导出的excel如下
在ie9下会报blob不存在,可以通过下载jquery.base64.js https://github.com/yckart/jquery.base64.js 解决,然后在报错的地方中插入代码即可
1 2 if (!window .btoa) window .btoa = $.base64.btoaif (!window .atob) window .atob = $.base64.atob
但是在ie9下还是有其他兼容问题,比如promise等(排除一个兼容又有一个,在ie9还是导不出来),最后采用ie9独有的ActiveXObject来导出,而其他浏览器则还是采用ExcelGen插件导出
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 function exportExcel (tableId, fileName ) { if (window .ActiveXObject) { var curTbl = document .getElementById(tableId); var oXL = new ActiveXObject("Excel.Application" ); var oWB = oXL.Workbooks.Add(); var xlsheet = oWB.Worksheets(1 ); var sel = document .body.createTextRange(); sel.moveToElementText(curTbl); sel.select; sel.execCommand("Copy" ); xlsheet.Paste(); oXL.Visible = true ; try { var fname = oXL.Application.GetSaveAsFilename("Excel.xls" , "Excel Spreadsheets (*.xls), *.xls" ); } catch (e) { print("Nested catch caught " + e); } finally { oWB.SaveAs(fname); oWB.Close(savechanges = false ); oXL.Quit(); oXL = null ; idTmr = window .setInterval("Cleanup();" , 1 ); } } else { excel = new ExcelGen({ "src_id" : tableId, "show_header" : true , "file_name" : fileName }) excel.generate(); } }
最后虽然已经兼容ie9了但是缺点是得用户允许开启activex控件而且输出的样式也不够美观。 另外这个方法有个弊端,就是所要导出的table必须已经在dom中渲染出来,因此也只能导出一页的表格数据。自己想了个不太优雅但能完美解决但的方法是点击导出按钮时在html中插入一个隐藏的不做分页的表格,然后根据这个tableid来导出(点击导出再渲染表格能提高一点性能),数据量过大时就性能会差。
二、通过传入json数据导出excel 通过将json遍历进行字符串拼接,将字符串输出到csv文件,输出的文件不会再是html类型的文件而是真正的csv文件,代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 <html > <head > <p style ="font-size: 20px;color: red;" > 使用a标签方式将json导出csv文件</p > <button onclick ='tableToExcel()' > 导出</button > </head > <body > <script > function tableToExcel ( ) { var jsonData = [ { name:'路人甲' , phone:'123456789' , email:'000@123456.com' }, { name:'炮灰乙' , phone:'123456789' , email:'000@123456.com' }, { name:'土匪丙' , phone:'123456789' , email:'000@123456.com' }, { name:'流氓丁' , phone:'123456789' , email:'000@123456.com' }, ] let str = `姓名,电话,邮箱\n` ; for (let i = 0 ; i < jsonData.length ; i++ ){ for (let item in jsonData[i]){ str+=`${jsonData[i][item] + '\t' } ,` ; } str+='\n' ; } let uri = 'data:text/csv;charset=utf-8,\ufeff' + encodeURIComponent (str); var link = document .createElement("a" ); link.href = uri; link.download = "json数据表.csv" ; document .body.appendChild(link); link.click(); document .body.removeChild(link); } </script > </body > </html >
这个方法同样在ie9上兼容性差,亲测导出的excel会带上meta、head等标签信息。
ps:因作者能力有限,有错误的地方请见谅
喜欢这篇文章的话可以用快捷键 Ctrl + D
来收藏本页
为正常使用来必力评论功能请激活JavaScript