JS實(shí)現(xiàn)導(dǎo)出Excel的五種方法詳解【附源碼下載】
本文實(shí)例講述了JS實(shí)現(xiàn)導(dǎo)出Excel的五種方法。分享給大家供大家參考,具體如下:
這五種方法前四種方法只支持IE瀏覽器,最后一個(gè)方法支持當(dāng)前主流的瀏覽器(火狐,IE,Chrome,Opera,Safari)
<!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8"> <title>html 表格導(dǎo)出道</title> <script language="JavaScript" type="text/javascript"> //第一種方法 function method1(tableid) { var curTbl = document.getElementById(tableid); var oXL = new ActiveXObject("Excel.Application"); var oWB = oXL.Workbooks.Add(); var oSheet = oWB.ActiveSheet; var sel = document.body.createTextRange(); sel.moveToElementText(curTbl); sel.select(); sel.execCommand("Copy"); oSheet.Paste(); oXL.Visible = true; } //第二種方法 function method2(tableid) { var curTbl = document.getElementById(tableid); var oXL = new ActiveXObject("Excel.Application"); var oWB = oXL.Workbooks.Add(); var oSheet = oWB.ActiveSheet; var Lenr = curTbl.rows.length; for (i = 0; i < Lenr; i++) { var Lenc = curTbl.rows(i).cells.length; for (j = 0; j < Lenc; j++) { oSheet.Cells(i + 1, j + 1).value = curTbl.rows(i).cells(j).innerText; } } oXL.Visible = true; } //第三種方法 function getXlsFromTbl(inTblId, inWindow){ try { var allStr = ""; var curStr = ""; if (inTblId != null && inTblId != "" && inTblId != "null") { curStr = getTblData(inTblId, inWindow); } if (curStr != null) { allStr += curStr; } else { alert("你要導(dǎo)出的表不存在"); return; } var fileName = getExcelFileName(); doFileExport(fileName, allStr); } catch(e) { alert("導(dǎo)出發(fā)生異常:" + e.name + "->" + e.description + "!"); } } function getTblData(inTbl, inWindow) { var rows = 0; var tblDocument = document; if (!!inWindow && inWindow != "") { if (!document.all(inWindow)) { return null; } else { tblDocument = eval(inWindow).document; } } var curTbl = tblDocument.getElementById(inTbl); var outStr = ""; if (curTbl != null) { for (var j = 0; j < curTbl.rows.length; j++) { for (var i = 0; i < curTbl.rows[j].cells.length; i++) { if (i == 0 && rows > 0) { outStr += " t"; rows -= 1; } outStr += curTbl.rows[j].cells[i].innerText + "t"; if (curTbl.rows[j].cells[i].colSpan > 1) { for (var k = 0; k < curTbl.rows[j].cells[i].colSpan - 1; k++) { outStr += " t"; } } if (i == 0) { if (rows == 0 && curTbl.rows[j].cells[i].rowSpan > 1) { rows = curTbl.rows[j].cells[i].rowSpan - 1; } } } outStr += "rn"; } } else { outStr = null; alert(inTbl + "不存在 !"); } return outStr; } function getExcelFileName() { var d = new Date(); var curYear = d.getYear(); var curMonth = "" + (d.getMonth() + 1); var curDate = "" + d.getDate(); var curHour = "" + d.getHours(); var curMinute = "" + d.getMinutes(); var curSecond = "" + d.getSeconds(); if (curMonth.length == 1) { curMonth = "0" + curMonth; } if (curDate.length == 1) { curDate = "0" + curDate; } if (curHour.length == 1) { curHour = "0" + curHour; } if (curMinute.length == 1) { curMinute = "0" + curMinute; } if (curSecond.length == 1) { curSecond = "0" + curSecond; } var fileName = "table" + "_" + curYear + curMonth + curDate + "_" + curHour + curMinute + curSecond + ".csv"; return fileName; } function doFileExport(inName, inStr) { var xlsWin = null; if (!!document.all("glbHideFrm")) { xlsWin = glbHideFrm; } else { var width = 6; var height = 4; var openPara = "left=" + (window.screen.width / 2 - width / 2) + ",top=" + (window.screen.height / 2 - height / 2) + ",scrollbars=no,width=" + width + ",height=" + height; xlsWin = window.open("", "_blank", openPara); } xlsWin.document.write(inStr); xlsWin.document.close(); xlsWin.document.execCommand('Saveas', true, inName); xlsWin.close(); } //第四種 function method4(tableid){ var curTbl = document.getElementById(tableid); var oXL; try{ oXL = new ActiveXObject("Excel.Application"); //創(chuàng)建AX對(duì)象excel }catch(e){ alert("無(wú)法啟動(dòng)Excel!\n\n如果您確信您的電腦中已經(jīng)安裝了Excel,"+"那么請(qǐng)調(diào)整IE的安全級(jí)別。\n\n具體操作:\n\n"+"工具 → Internet選項(xiàng) → 安全 → 自定義級(jí)別 → 對(duì)沒(méi)有標(biāo)記為安全的ActiveX進(jìn)行初始化和腳本運(yùn)行 → 啟用"); return false; } var oWB = oXL.Workbooks.Add(); //獲取workbook對(duì)象 var oSheet = oWB.ActiveSheet;//激活當(dāng)前sheet var sel = document.body.createTextRange(); sel.moveToElementText(curTbl); //把表格中的內(nèi)容移到TextRange中 sel.select(); //全選TextRange中內(nèi)容 sel.execCommand("Copy");//復(fù)制TextRange中內(nèi)容 oSheet.Paste();//粘貼到活動(dòng)的EXCEL中 oXL.Visible = true; //設(shè)置excel可見(jiàn)屬性 var fname = oXL.Application.GetSaveAsFilename("將table導(dǎo)出到excel.xls", "Excel Spreadsheets (*.xls), *.xls"); oWB.SaveAs(fname); oWB.Close(); oXL.Quit(); } //第五種方法 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 method5(tableid) { if(getExplorer()=='ie') { var curTbl = document.getElementById(tableid); var oXL = new ActiveXObject("Excel.Application"); var oWB = oXL.Workbooks.Add(); var xlsheet = oWB.Worksheets(1); var sel = document.body.createTextRange(); sel.moveToElementText(curTbl); sel.select(); sel.execCommand("Copy"); xlsheet.Paste(); oXL.Visible = true; 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); oXL.Quit(); oXL = null; 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><head><meta charset="UTF-8"></head><body><table>{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)) } })() </script> </head> <body> <div > <button type="button" onclick="method1('tableExcel')">導(dǎo)出Excel方法一</button> <button type="button" onclick="method2('tableExcel')">導(dǎo)出Excel方法二</button> <button type="button" onclick="getXlsFromTbl('tableExcel','myDiv')">導(dǎo)出Excel方法三</button> <button type="button" onclick="method4('tableExcel')">導(dǎo)出Excel方法四</button> <button type="button" onclick="method5('tableExcel')">導(dǎo)出Excel方法五</button> </div> <div id="myDiv"> <table id="tableExcel" width="100%" border="1" cellspacing="0" cellpadding="0"> <tr> <td colspan="5" align="center">html 表格導(dǎo)出道Excel</td> </tr> <tr> <td>列標(biāo)題1</td> <td>列標(biāo)題2</td> <td>類標(biāo)題3</td> <td>列標(biāo)題4</td> <td>列標(biāo)題5</td> </tr> <tr> <td>aaa</td> <td>bbb</td> <td>ccc</td> <td>ddd</td> <td>eee</td> </tr> <tr> <td>AAA</td> <td>BBB</td> <td>CCC</td> <td>DDD</td> <td>EEE</td> </tr> <tr> <td>FFF</td> <td>GGG</td> <td>HHH</td> <td>III</td> <td>JJJ</td> </tr> </table> </div> </body> </html>
今天上來(lái)發(fā)現(xiàn),好多人,會(huì)遇到文件名,格式等問(wèn)題。這里添加一種方法。兼容性我沒(méi)有測(cè)試,大家可以試下,不過(guò)需要利用JQ直接貼代碼了。源代碼可點(diǎn)擊此處本站下載。注意一定要引jquery-3.2.1.min.js,jquery.table2excel.js對(duì)應(yīng)的文件。jquery-3.2.1.min.js這個(gè)看你對(duì)應(yīng)的文件版本,不重要。如有問(wèn)題,歡迎批評(píng)指導(dǎo)。
<!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8"> <title>html 表格導(dǎo)出道</title> <script src="js/vendor/jquery-3.2.1.min.js"></script> <script src="jquery.table2excel.js"></script> <script language="JavaScript" type="text/javascript"> $(document).ready(function () { $("#btnExport").click(function () { $("#tableExcel").table2excel({ exclude : ".noExl", //過(guò)濾位置的 css 類名 filename : "你想說(shuō)啥" + new Date().getTime() + ".xls", //文件名稱 name: "Excel Document Name.xlsx", exclude_img: true, exclude_links: true, exclude_inputs: true }); }); }); </script> </head> <body> <div > <button type="button" id="btnExport" onclick="method5('tableExcel')">導(dǎo)出Excel</button> </div> <div id="myDiv"> <table id="tableExcel" width="100%" border="1" cellspacing="0" cellpadding="0"> <tr> <td colspan="5" align="center">html 表格導(dǎo)出道Excel</td> </tr> <tr> <td>列標(biāo)題1</td> <td>列標(biāo)題2</td> <td>類標(biāo)題3</td> <td>列標(biāo)題4</td> <td>列標(biāo)題5</td> </tr> <tr> <td>aaa</td> <td>bbb</td> <td>ccc</td> <td>ddd</td> <td>eee</td> </tr> <tr> <td>AAA</td> <td>BBB</td> <td>CCC</td> <td>DDD</td> <td>EEE</td> </tr> <tr> <td>FFF</td> <td>GGG</td> <td>HHH</td> <td>III</td> <td>JJJ</td> </tr> </table> </div> </body> </html>
更多關(guān)于JavaScript相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《JavaScript文件與目錄操作技巧匯總》、《JavaScript查找算法技巧總結(jié)》、《JavaScript數(shù)據(jù)結(jié)構(gòu)與算法技巧總結(jié)》、《JavaScript遍歷算法與技巧總結(jié)》、《JavaScript錯(cuò)誤與調(diào)試技巧總結(jié)》及《JavaScript數(shù)學(xué)運(yùn)算用法總結(jié)》
希望本文所述對(duì)大家JavaScript程序設(shè)計(jì)有所幫助。
相關(guān)文章
JS中隊(duì)列和雙端隊(duì)列實(shí)現(xiàn)及應(yīng)用詳解
這篇文章主要介紹了JS中隊(duì)列和雙端隊(duì)列實(shí)現(xiàn)及應(yīng)用,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-09-09JS平滑無(wú)縫滾動(dòng)效果的實(shí)現(xiàn)代碼
下面小編就為大家?guī)?lái)一篇JS平滑無(wú)縫滾動(dòng)效果的實(shí)現(xiàn)代碼。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考2016-05-05Javascript+CSS3實(shí)現(xiàn)進(jìn)度條效果
本篇文章主要介紹Javascript+CSS3實(shí)現(xiàn)進(jìn)度條效果,可以實(shí)現(xiàn)給用戶一個(gè)等待的過(guò)程,有需要的可以了解一下。2016-10-10BOOTSTRAP時(shí)間控件顯示在模態(tài)框下面的bug修復(fù)
這篇文章主要介紹了BOOTSTRAP時(shí)間控件顯示在模態(tài)框下面的bug修復(fù),需要的朋友可以參考下2015-02-02深入淺析ES6 Class 中的 super 關(guān)鍵字
本文給大家收藏整理了ES6 Class 中的 super 關(guān)鍵字,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友參考下吧2017-10-10JS中的算法與數(shù)據(jù)結(jié)構(gòu)之列表(List)實(shí)例詳解
這篇文章主要介紹了JS中的算法與數(shù)據(jù)結(jié)構(gòu)之列表(List),結(jié)合實(shí)例形式分析了javascript列表的概念、原理以及定義、添加、刪除、查找等相關(guān)操作技巧,需要的朋友可以參考下2019-08-08利用原生JS自動(dòng)生成文章標(biāo)題樹(shù)的實(shí)例
網(wǎng)上關(guān)于生成文章標(biāo)題樹(shù)的示例很多,這篇文章介紹的是利用原生JS實(shí)現(xiàn)自動(dòng)生成文章標(biāo)題樹(shù),實(shí)現(xiàn)過(guò)程很簡(jiǎn)單,有需要的可以參考借鑒。2016-08-08js實(shí)現(xiàn)手表表盤(pán)時(shí)鐘與圓周運(yùn)動(dòng)
這篇文章主要為大家詳細(xì)介紹了js實(shí)現(xiàn)手表表盤(pán)時(shí)鐘與圓周運(yùn)動(dòng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-09-09javascript實(shí)現(xiàn)簡(jiǎn)單的ajax封裝示例
這篇文章主要介紹了javascript實(shí)現(xiàn)簡(jiǎn)單的ajax封裝功能,結(jié)合實(shí)例形式分析了ajax基本功能與操作實(shí)現(xiàn)技巧,需要的朋友可以參考下2016-12-12js改變img標(biāo)簽的src屬性在IE下沒(méi)反應(yīng)的解決方法
在Chrome FF里都能改變成功,但在IE下卻不行,網(wǎng)上搜了半天,大概了解了,這個(gè)是IE的一個(gè)bug,具體的解決方法如下,有類似問(wèn)題的朋友可以參考下哈,希望對(duì)大家有所幫助2013-07-07