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>類(lèi)標(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 類(lèi)名
filename : "你想說(shuō)啥" + new Date().getTime() + ".xls", //文件名稱(chēng)
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>類(lèi)標(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)容感興趣的讀者可查看本站專(zhuān)題:《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)文章
JavaScript展開(kāi)運(yùn)算符和剩余運(yùn)算符的區(qū)別詳解
本文主要介紹了JavaScript展開(kāi)運(yùn)算符和剩余運(yùn)算符的區(qū)別詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-01-01
JavaScript練習(xí)語(yǔ)法及建議總結(jié)大全
JavaScript 是一個(gè)程序語(yǔ)言,語(yǔ)法規(guī)則定義了語(yǔ)言結(jié)構(gòu),這篇文章主要介紹了JavaScript練習(xí)語(yǔ)法及建議總結(jié)的相關(guān)資料,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下2025-07-07
js實(shí)現(xiàn)模擬計(jì)算器退格鍵刪除文字效果的方法
這篇文章主要介紹了js實(shí)現(xiàn)模擬計(jì)算器退格鍵刪除文字效果的方法,涉及javascript字符串截取操作的相關(guān)技巧,需要的朋友可以參考下2015-05-05
js關(guān)于getImageData跨域問(wèn)題的解決方法
這篇文章主要為大家詳細(xì)介紹了js關(guān)于getImageData跨域問(wèn)題的解決方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-10-10
js正則表達(dá)式最長(zhǎng)匹配(貪婪匹配)和最短匹配(懶惰匹配)用法分析
這篇文章主要介紹了js正則表達(dá)式最長(zhǎng)匹配(貪婪匹配)和最短匹配(懶惰匹配)用法,結(jié)合實(shí)例形式分析了貪婪匹配與懶惰匹配的具體用法與相關(guān)注意事項(xiàng),需要的朋友可以參考下2016-12-12
javascript full screen 全屏顯示頁(yè)面元素的方法
要想讓頁(yè)面的某個(gè)元素全屏顯示,就像在網(wǎng)頁(yè)上看視頻的時(shí)候,可以全屏觀看一樣,該怎么實(shí)現(xiàn)呢2013-09-09
js實(shí)現(xiàn)緩動(dòng)動(dòng)畫(huà)
這篇文章主要為大家詳細(xì)介紹了js實(shí)現(xiàn)緩動(dòng)動(dòng)畫(huà),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-11-11
js實(shí)現(xiàn)無(wú)限級(jí)樹(shù)形導(dǎo)航列表效果代碼
這篇文章主要介紹了js實(shí)現(xiàn)無(wú)限級(jí)樹(shù)形導(dǎo)航列表效果代碼,通過(guò)一個(gè)封裝的JS類(lèi)實(shí)現(xiàn)無(wú)限樹(shù)形導(dǎo)航的效果,非常簡(jiǎn)單實(shí)用,需要的朋友可以參考下2015-09-09
javascript超過(guò)容器后顯示省略號(hào)效果的方法(兼容一行或者多行)
下面小編就為大家?guī)?lái)一篇javascript超過(guò)容器后顯示省略號(hào)效果的方法(兼容一行或者多行)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2016-07-07

