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
为了弄明白,自己又写了一遍,看起来很简单了!!
这个人很懒,什么也没下留。
分类:
JavaScript
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 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)