js导出execl兼容ie Chrome Firefox各种主流浏览器(js export execl)

Posted 学无止尽tpf

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了js导出execl兼容ie Chrome Firefox各种主流浏览器(js export execl)相关的知识,希望对你有一定的参考价值。

第一种导出table布局的表格

  1 <html>
  2 
  3     <head>
  4         <meta charset="utf-8">
  5         <script type="text/javascript" language="javascript">
  6             var idTmr;
  7 
  8             function getExplorer() {
  9                 var explorer = window.navigator.userAgent;
 10                 //ie 
 11                 if(explorer.indexOf(".NET") >= 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 
 32             function method1(tableid, name, filename) { //整个表格拷贝到EXCEL中
 33                 if(getExplorer() == \'ie\') {
 34                     var curTbl = document.getElementById(tableid);
 35                     var oXL = new ActiveXObject("Excel.Application");
 36 
 37                     //创建AX对象excel 
 38                     var oWB = oXL.Workbooks.Add();
 39                     //获取workbook对象 
 40                     var xlsheet = oWB.Worksheets(1);
 41                     //激活当前sheet 
 42                     var sel = document.body.createTextRange();
 43                     sel.moveToElementText(curTbl);
 44                     //把表格中的内容移到TextRange中 
 45                     sel.select();
 46                     //全选TextRange中内容 
 47                     sel.execCommand("Copy");
 48                     //复制TextRange中内容  
 49                     xlsheet.Paste();
 50                     //粘贴到活动的EXCEL中       
 51                     oXL.Visible = true;
 52                     //设置excel可见属性
 53 
 54                     try {
 55                         var fname = oXL.Application.GetSaveAsFilename("Excel.xls", "Excel Spreadsheets (*.xls), *.xls");
 56                     } catch(e) {
 57                         print("Nested catch caught " + e);
 58                     } finally {
 59                         oWB.SaveAs(fname);
 60 
 61                         oWB.Close(savechanges = false);
 62                         //xls.visible = false;
 63                         oXL.Quit();
 64                         oXL = null;
 65                         //结束excel进程,退出完成
 66                         //window.setInterval("Cleanup();",1);
 67                         idTmr = window.setInterval("Cleanup();", 1);
 68 
 69                     }
 70 
 71                 } else {
 72                     tableToExcel(tableid, name, filename)
 73                 }
 74             }
 75 
 76             function Cleanup() {
 77                 window.clearInterval(idTmr);
 78                 CollectGarbage();
 79             }
 80             var tableToExcel = (function() {
 81                 var uri = \'data:application/vnd.ms-excel;base64,\',
 82                     template = \'<html xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns="http://www.w3.org/TR/REC-html40"><head><meta charset="UTF-8"><!--[if gte mso 9]><xml><x:ExcelWorkbook><x:ExcelWorksheets><x:ExcelWorksheet><x:Name>{worksheet}</x:Name><x:WorksheetOptions><x:DisplayGridlines/></x:WorksheetOptions></x:ExcelWorksheet></x:ExcelWorksheets></x:ExcelWorkbook></xml><![endif]--></head><body><table>{table}</table></body></html>\',
 83                     base64 = function(s) {
 84                         return window.btoa(unescape(encodeURIComponent(s)))
 85                     },
 86                     format = function(s, c) {
 87                         return s.replace(/{(\\w+)}/g,
 88                             function(m, p) {
 89                                 return c[p];
 90                             })
 91                     }
 92                 return function(table, name, filename) {
 93                     if(!table.nodeType) table = document.getElementById(table)
 94                     var ctx = {
 95                             worksheet: name || \'Worksheet\',
 96                             table: table.innerHTML
 97                         }
 98                         //window.location.href = uri + base64(format(template, ctx))
 99                         //<a href="/images/logo.png" download="w3clogo">    //参考a链接的下载,更改下载文件名
100                         //<img border="0" src="/images/logo.png" alt="w3cschool.cc" >
101                         //</a>
102                     document.getElementById("dlink").href = uri + base64(format(template, ctx));
103                     document.getElementById("dlink").download = filename; //这里是关键所在,当点击之后,设置a标签的属性,这样就可以更改标签的标题了
104                     document.getElementById("dlink").click();
105                 }
106             })()
107         </script>
108         <style>
109             .bk {
110                 background-color: red;
111                 color: blue;
112                 text-align: center;
113             }
114         </style>
115     </head>
116 
117     <body>
118         <table id="targetTable">
119             <tr align="center" id=\'th\'>
120                 <td>标识</td>
121                 <td>内容</td>
122                 <td>创建时间</td>
123             </tr>
124             <tr id="tr1" class="bk">
125                 <a>
126                     <td>1</td>
127                     <td>excel01</td>
128                     <td>2015-07-22</td>
129                 </a>
130             </tr>
131             <tr align="center" style="background-color: red;color:yellow;">
132                 <td>2</td>
133                 <td>excel02</td>
134                 <td>2015-07-22</td>
135             </tr>
136             <tr align="center" id="tr3">
137                 <a>
138                     <td>1</td>
139                     <td>excel01</td>
140                     <td>2015-07-22</td>
141                 </a>
142             </tr>
143         </table>
144         </br>
145         <span>span</span>
146         <a id="dlink" style="display:none;"></a><!--隐藏链接,设置下载文件名  利用download属性-->
147         <input id="Button1" type="button" value="导出EXCEL" onclick="javascript:method1(\'targetTable\', \'name\', \'myfile.xls\')" />
148         <script>
149             //导出execl时只有标签上的样式才会影响到导出的execl的样式,通过类渲染的最终样式没用
150             document.getElementById(\'tr3\').style.backgroundColor = "yellow";
151             var th = document.getElementById(\'th\');
152             var a = document.getElementById(\'tr1\');
153             var color = window.getComputedStyle(a).getPropertyValue("background-color"); //获取最终样式,经过class渲染之后的样式
154             //alert(window.getComputedStyle(a).getPropertyValue("color"));
155             th.style.backgroundColor = color;
156         </script>
157     </body>
158 
159 </html>
View Code

在template的head标签中加了<meta charset="UTF-8">(template = \'<html xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns="http://www.w3.org/TR/REC-html40"><head><meta charset="UTF-8">......),防止中文乱码。

其中利用了a标签的download属性来更改导出的execl名字,而且导出execl时只有标签上的样式才会影响到导出的execl的样式,通过类渲染的最终样式没用

第二种导出div布局的表格

  1 <!DOCTYPE html>
  2 
  3 <html>
  4 
  5     <head>
  6         <meta name="viewport" content="width=device-width" />
  7         <meta charset="utf-8">
  8         <title>项目统计</title>
  9         <link href="css/bootstrap.min.css" rel="stylesheet" />
 10         <link href="css/bootstrap-datepicker3.min.css" rel="stylesheet" />
 11         <link rel="stylesheet" type="text/css" href="css/layout.css" />
 12         <link rel="stylesheet" type="text/css" href="css/style.css" />
 13         <script src="js/jquery.min.js"></script>
 14         <script src="js/layer.js"></script>
 15         以上是关于js导出execl兼容ie Chrome Firefox各种主流浏览器(js export execl)的主要内容,如果未能解决你的问题,请参考以下文章

edge浏览器导出execl只能选中.txt格式

edge浏览器导出execl只能选中.txt格式

使用JavaScript / JQuery导出 html table 数据至 Excel 兼容IE/Chrome/Firefox

使用 D3.js(IE、safari 和 chrome)创建 SVG 后,如何保存/导出 SVG 文件?

像js,css.在chrome,FireFox,IE浏览器不兼容问题一般怎么解决

table2excel.js怎么兼容火狐IE