用js将HTML的Table导出为Excel优化版

来源:互联网 发布:mac日历收到垃圾邀请 编辑:程序博客网 时间:2024/06/04 19:33
<html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><script type="text/javascript" language="javascript">        var idTmr;        function  getExplorer() {            var explorer = window.navigator.userAgent ;            //ie            if (explorer.indexOf("MSIE") >= 0) {                return 'ie';            }            //firefox            else if (explorer.indexOf("Firefox") >= 0) {                return 'Firefox';            }            //Chrome            else if(explorer.indexOf("Chrome") >= 0){                return 'Chrome';            }            //Opera            else if(explorer.indexOf("Opera") >= 0){                return 'Opera';            }            //Safari            else if(explorer.indexOf("Safari") >= 0){                return 'Safari';            }        }        function table2excel(tableid) {//整个表格拷贝到EXCEL中            if(getExplorer()=='ie')            {                var curTbl = document.getElementById(tableid);                var oXL = new ActiveXObject("Excel.Application");                                 //创建AX对象excel                var oWB = oXL.Workbooks.Add();                //获取workbook对象                var xlsheet = oWB.Worksheets(1);                //激活当前sheet                var sel = document.body.createTextRange();                sel.moveToElementText(curTbl);                //把表格中的内容移到TextRange中                sel.select();                //全选TextRange中内容                sel.execCommand("Copy");                //复制TextRange中内容                 xlsheet.Paste();                //粘贴到活动的EXCEL中                      oXL.Visible = true;                //设置excel可见属性                 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);                    //xls.visible = false;                    oXL.Quit();                    oXL = null;                    //结束excel进程,退出完成                    //window.setInterval("Cleanup();",1);                    idTmr = window.setInterval("Cleanup();", 1);                 }            }            else            {                tableToExcel(tableid)            }        }        function Cleanup() {            window.clearInterval(idTmr);            CollectGarbage();        }        var tableToExcel = (function() {        var uri = 'data:application/vnd.ms-excel;base64,', //格式化导出表格的样式 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><!--[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]-->'+    ' <style type="text/css">'+    '.excelTable  {'+    'border-collapse:collapse;'+     ' border:thin solid #999; '+    '}'+    '   .excelTable  th {'+    '   border: thin solid #999;'+    '  padding:20px;'+    '  text-align: center;'+    '  border-top: thin solid #999;'+    ' background-color: #E6E6E6;'+    ' }'+    ' .excelTable  td{'+    ' border:thin solid #999;'+    '  padding:2px 5px;'+    '  text-align: center;'+    ' }</style>'+    '</head><body ><table class="excelTable">{table}</table></body></html>',                  base64 = function(s) { return window.btoa(unescape(encodeURIComponent(s))) },                format = function(s, c) {                    return s.replace(/{(\w+)}/g,                    function(m, p) { return c[p]; }) }                return function(table, name) {                if (!table.nodeType) table = document.getElementById(table)                var ctx = {worksheet: name || 'Worksheet', table: table.innerHTML}                //window.location.href = uri + base64(format(template, ctx))var downloadLink = document.createElement("a");downloadLink.href=uri + format(template, ctx);downloadLink.download='导出excel信息.xls';document.body.appendChild(downloadLink);downloadLink.click();document.body.romoveChild(downloadLink);              }            })()</script> </head><body><table width="100%" cellspacing="0" cellpadding="0" border="1px" id="test"><tr><th width="20%">姓名</th><th width="20%">性别</th><th width="20%">年龄</th><th width="20%">部门</th><th width="20%">角色</th></tr><tr><td>张三</td><td>男</td><td>28</td><td>销售部</td><td>经理</td></tr><tr><td>李四</td><td>男</td><td>27</td><td>研发部</td><td>项目总监</td></tr><tr><td>王燕</td><td>女</td><td>29</td><td>电子商务部</td><td>主管</td></tr></table><br><input id="Button1" type="button" value="导出EXCEL" onclick="javascript:table2excel('test')" style="padding:5px;margin-top:20px;"/></body></html>
说明:创建一个A标签,设置A的download属性可以实现指定文件名