js导出页面的表格到excel(NB的大神洗了好几个,挑一个记下来)

复制代码
  1  var idTmr;  
  2      function  getExplorer() {  
  3          var explorer = window.navigator.userAgent ;  
  4          //ie  
  5          if (explorer.indexOf("MSIE") >= 0) {  
  6              return 'ie';  
  7          } else if(window.ActiveXObject || "ActiveXObject" in window){
  8              return 'ie11';
  9          }
 10          //firefox  
 11          else if (explorer.indexOf("Firefox") >= 0) {  
 12              return 'Firefox';  
 13          }  
 14          //Chrome  
 15          else if(explorer.indexOf("Chrome") >= 0){  
 16              return 'Chrome';  
 17          }  
 18          //Opera  
 19          else if(explorer.indexOf("Opera") >= 0){  
 20              return 'Opera';  
 21          }  
 22          //Safari  
 23          else if(explorer.indexOf("Safari") >= 0){  
 24              return 'Safari';  
 25          }  
 26      }  
 27      function exportExcel(tableid) {  
 28          if(getExplorer()=='ie'){
 29              try{
 30              var curTbl = document.getElementById(tableid);  
 31              //创建AX对象excel 
 32              var oXL = new ActiveXObject("Excel.Application");  
 33              //获取workbook对象 
 34              var oWB = oXL.Workbooks.Add(); 
 35              //获取在workbook中读取第一个sheet
 36              var xlsheet = oWB.Worksheets(1); 
 37              //创建TextRange
 38              var sel = document.body.createTextRange();  
 39            //把表格中的内容移到TextRange中 
 40              sel.moveToElementText(curTbl);  
 41              //选中数据
 42              sel.select();  
 43              //模拟复制
 44              sel.execCommand("Copy");  
 45              //模拟粘贴
 46              xlsheet.Paste();
 47              //打开 excel界面
 48             oXL.Visible = true;  
 49              var fname = oXL.Application.GetSaveAsFilename("Excel", "Excel Spreadsheets (*.xls)");  
 50              } catch (e) {  
 51                  dialogAlert("提示: 须允许ActiveX控件运行才能导出Excel文件!\n\n或<br>如果您确信您的电脑中已经安装了Excel,"+"那么请调整IE的安全级别。\n\n具体操作:\n\n"+"工具 → Internet选项 → 安全 → 自定义级别 → 对没有标记为安全的ActiveX进行初始化和脚本运行 → 启用",
 52                          '',function(){
 53                      var form=document.forms[0];
 54                      form.action=location.href+'?timestamp=' + new Date().getTime();
 55                      form.submit();
 56                      console.log(location.href);
 57                  });
 58                  return false;
 59              } finally {  
 60                  oWB.SaveAs(fname);  
 61                  oWB.Close(savechanges = true);  
 62                  oXL.Quit();  
 63                  idTmr = window.setInterval("Cleanup();", 1);  
 64              }  
 65 
 66          }else if(getExplorer()=='ie11'){
 67              try { 
 68                  var doc=document.getElementById(tableid);
 69                  //创建excel类型的Application
 70                  var exl= new ActiveXObject("Excel.Application");
 71                  //不显示界面
 72                  exl.visible=false;
 73                  var wbook=exl.Workbooks.Add();
 74                  var sheet=wbook.Worksheets(1);
 75                 //创建TextRange
 76                  var sel = document.body.createTextRange();  
 77                  sel.moveToElementText(doc); 
 78                  //选中数据
 79                 // sel.select();
 80                //模拟复制
 81                  sel.execCommand("Copy"); 
 82                  //模拟粘贴
 83                  sheet.Paste();
 84                //打开 excel界面
 85                  exl.Visible = true; 
 86                 var fname = exl.GetSaveAsFilename("Excel.xls", "Excel Spreadsheets (*.xls), *.xls");  
 87              } catch (e) {
 88                  dialogAlert("提示: 须允许ActiveX控件运行才能导出Excel文件!\n\n或<br>如果您确信您的电脑中已经安装了Excel,"+"那么请调整IE的安全级别。\n\n具体操作:\n\n"+"工具 → Internet选项 → 安全 → 自定义级别 → 对没有标记为安全的ActiveX进行初始化和脚本运行 → 启用",
 89                          '',function(){
 90                      var form=document.forms[0];
 91                      form.action=location.href+'?timestamp=' + new Date().getTime();
 92                      form.submit();
 93                      console.log(location.href);
 94                  });
 95                  return false;
 96              }   
 97                  wbook.SaveAs(fname);  
 98                  wbook.Close(false);  
 99                  exl.Quit();  
100                  idTmr = window.setInterval("Cleanup()", 1);  
101         }else  
102          {  
103              tableToExcel(tableid)  
104          }  
105          
106      }  
107      function Cleanup() {  
108          window.clearInterval(idTmr);  
109          CollectGarbage();  
110      }  
111      var tableToExcel = (function() {  
112          var uri = 'data:application/vnd.ms-excel;base64,',  
113                  template = '<html><head><meta charset="UTF-8"></head><body><table>{table}</table></body></html>',  
114                  base64 = function(s) { return window.btoa(unescape(encodeURIComponent(s))) },  
115                  format = function(s, c) {  
116                      return s.replace(/{(\w+)}/g,  
117                              function(m, p) { return c[p]; }) }  
118          return function(table, name) {  
119              if (!table.nodeType) table = document.getElementById(table)  
120              var ctx = {worksheet: name || 'Worksheet', table: table.innerHTML}  
121              window.location.href = uri + base64(format(template, ctx))  
122          }  
123      })() 
124      
复制代码

为了弄明白,自己又写了一遍,看起来很简单了!!

posted @   天涯已可  阅读(611)  评论(0编辑  收藏  举报
编辑推荐:
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)
点击右上角即可分享
微信分享提示