多个浏览器下应用前端JS实现一键导出excel表

发布时间:2019-07-26 14:00:31发布者:Mr.Zhang阅读(91)

自己试验了几种方法,找到一种较为全面的一种方式一键输出Excel表格,代码如下

  1 <!DOCTYPE html>
  2 <html>
  3 <head lang="en">
  4     <meta charset="UTF-8">
  5     <title>导出表格</title>
  6     <script language="JavaScript" type="text/javascript">
  7         var Tmr;
  8         function  getExplorer() {
  9             var explorer = window.navigator.userAgent ;
 10             //ie
 11             if (explorer.indexOf("MSIE") >= 0) {
 12                 return 'ie';
 13             }
 14             //firefox
 15             else if (explorer.indexOf("Firefox") >= 0) {
 16                 return 'Firefox';
 17             }
 18             //Chrome
 19             else if(explorer.indexOf("Chrome") >= 0){
 20                 return 'Chrome';
 21             }
 22             //Opera
 23             else if(explorer.indexOf("Opera") >= 0){
 24                 return 'Opera';
 25             }
 26             //Safari
 27             else if(explorer.indexOf("Safari") >= 0){
 28                 return 'Safari';
 29             }
 30         }
 31         function method(tableid) {
 32             if(getExplorer()=='ie')
 33             {
 34                 var curTbl = document.getElementById(tableid);
 35                 var oXL = new ActiveXObject("Excel.Application");
 36                 var oWB = oXL.Workbooks.Add();
 37                 var xlsheet = oWB.Worksheets(1);
 38                 var sel = document.body.createTextRange();
 39                 sel.moveToElementText(curTbl);
 40                 sel.select();
 41                 sel.execCommand("Copy");
 42                 xlsheet.Paste();
 43                 oXL.Visible = true;
 44 
 45                 try {
 46                     var fname = oXL.Application.GetSaveAsFilename("Excel.xls", "Excel Spreadsheets (*.xls), *.xls");
 47                 } catch (e) {
 48                     print("Nested catch caught " + e);
 49                 } finally {
 50                     oWB.SaveAs(fname);
 51                     oWB.Close(savechanges = false);
 52                     oXL.Quit();
 53                     oXL = null;
 54                     Tmr = window.setInterval("Cleanup();", 1);
 55                 }
 56             }
 57             else
 58             {
 59                 tableToExcel(tableid)
 60             }
 61         }
 62         function Cleanup() {
 63             window.clearInterval(Tmr);
 64             CollectGarbage();
 65         }
 66         var tableToExcel = (function() {
 67             var uri = 'data:application/vnd.ms-excel;base64,',
 68                     template = '<html><head><meta charset="UTF-8"></head><body><table>{table}</table></body></html>',
 69                     base64 = function(s) { return window.btoa(unescape(encodeURIComponent(s))) },
 70                     format = function(s, c) {
 71                         return s.replace(/{(\w+)}/g,
 72                                 function(m, p) { return c[p]; }) }
 73             return function(table, name) {
 74                 if (!table.nodeType) table = document.getElementById(table)
 75                 var ctx = {worksheet: name || 'Worksheet', table: table.innerHTML}
 76                 window.location.href = uri + base64(format(template, ctx))
 77             }
 78         })()
 79     </script>
 80 </head>
 81 <body>
 82 
 83 <div >
 84     <button type="button" onclick="method('tableExcel')">导出Excel</button>
 85 </div>
 86 
 87 
 88 <div id="myDi">
 89     <table id="tableExcel" width="100%" border="2" cellspacing="0" cellpadding="0">
 90 
 91         <tr>
 92             <td colspan="5" align="center">金庸笔下人物</td>
 93         </tr>
 94 
 95         <tr>
 96             <td>倚天屠龙记</td>
 97             <td>天龙八部</td>
 98             <td>鹿鼎记</td>
 99             <td>神雕侠侣</td>
100             <td>射雕英雄传</td>
101         </tr>
102 
103         <tr>
104             <td>张无忌</td>
105             <td>乔峰</td>
106             <td>韦小宝</td>
107             <td>杨过</td>
108             <td>郭靖</td>
109         </tr>
110 
111         <tr>
112             <td>赵敏</td>
113             <td>虚竹</td>
114             <td>康熙</td>
115             <td>小龙女</td>
116             <td>黄蓉</td>
117         </tr>
118 
119         <tr>
120             <td>周芷若</td>
121             <td>段誉</td>
122             <td>鳌拜</td>
123             <td>李莫愁</td>
124             <td>杨康</td>
125         </tr>
126 
127     </table>
128 </div>
129 </body>
130 </html> 

输出后显示:

显示表格:





本文转自博客园,原文地址:https://www.cnblogs.com/yxd000/p/11248131.html