2012-10-09 158 views
1

我正在使用此代碼將數據從我的網頁導出爲ex​​cel。將HTML表導出爲ex​​cel

function write_to_excel() { 
    str=""; 
    var mytable = document.getElementsByTagName("table")[0]; 
    var row_Count = mytable.rows.length; 
    var col_Count = mytable.getElementsByTagName("tr")[0].getElementsByTagName("td").length; 

    var ExcelApp = new ActiveXObject("Excel.Application"); 
    var ExcelSheet = new ActiveXObject("Excel.Sheet"); 
    ExcelSheet.Application.Visible = true; 

    for(var i=0; i < row_Count ; i++) 
    { 
     for(var j=0; j < col_Count; j++) 
     { 
     str= mytable.getElementsByTagName("tr")[i].getElementsByTagName("td")[j].innerHTML; 
     ExcelSheet.ActiveSheet.Cells(i+1,j+1).Value = str; 
     } 
    } 

    } 

此代碼需要改進以處理表格嵌套。我在表格數據中有另一個表格。

訪問錶行的第i個元素(TR)也包括嵌套行。

有人可以回答我怎樣才能在Excel中導出嵌套表?

回答

0
<!DOCTYPE html> 
<html> 
<head> 
    <title>tableToExcel Demo</title> 
    <script src="tableToExcel.js"></script> 
</head> 
<body> 

<h1>tableToExcel Demo</h1> 
<p>Exporting the W3C Example Table</p> 

<input type="button" onclick="tableToExcel('testTable', 'W3C Example Table')" value="Export to Excel"> 

<table id="testTable" summary="Code page support in different versions of MS Windows." rules="groups" frame="hsides" border="2"><caption>CODE-PAGE SUPPORT IN MICROSOFT WINDOWS</caption><colgroup align="center"></colgroup><colgroup align="left"></colgroup><colgroup span="2" align="center"></colgroup><colgroup span="3" align="center"></colgroup><thead valign="top"><tr><th>Code-Page<br>ID</th><th>Name</th><th>ACP</th><th>OEMCP</th><th>Windows<br>NT 3.1</th><th>Windows<br>NT 3.51</th><th>Windows<br>95</th></tr></thead><tbody><tr><td>1200</td><td style="background-color: #00f; color: #fff">Unicode (BMP of ISO/IEC-10646)</td><td></td><td></td><td>X</td><td>X</td><td>*</td></tr><tr><td>1250</td><td style="font-weight: bold">Windows 3.1 Eastern European</td><td>X</td><td></td><td>X</td><td>X</td><td>X</td></tr><tr><td>1251</td><td>Windows 3.1 Cyrillic</td><td>X</td><td></td><td>X</td><td>X</td><td>X</td></tr><tr><td>1252</td><td>Windows 3.1 US (ANSI)</td><td>X</td><td></td><td>X</td><td>X</td><td>X</td></tr><tr><td>1253</td><td>Windows 3.1 Greek</td><td>X</td><td></td><td>X</td><td>X</td><td>X</td></tr><tr><td>1254</td><td>Windows 3.1 Turkish</td><td>X</td><td></td><td>X</td><td>X</td><td>X</td></tr><tr><td>1255</td><td>Hebrew</td><td>X</td><td></td><td></td><td></td><td>X</td></tr><tr><td>1256</td><td>Arabic</td><td>X</td><td></td><td></td><td></td><td>X</td></tr><tr><td>1257</td><td>Baltic</td><td>X</td><td></td><td></td><td></td><td>X</td></tr><tr><td>1361</td><td>Korean (Johab)</td><td>X</td><td></td><td></td><td>**</td><td>X</td></tr></tbody><tbody><tr><td>437</td><td>MS-DOS United States</td><td></td><td>X</td><td>X</td><td>X</td><td>X</td></tr><tr><td>708</td><td>Arabic (ASMO 708)</td><td></td><td>X</td><td></td><td></td><td>X</td></tr><tr><td>709</td><td>Arabic (ASMO 449+, BCON V4)</td><td></td><td>X</td><td></td><td></td><td>X</td></tr><tr><td>710</td><td>Arabic (Transparent Arabic)</td><td></td><td>X</td><td></td><td></td><td>X</td></tr><tr><td>720</td><td>Arabic (Transparent ASMO)</td><td></td><td>X</td><td></td><td></td><td>X</td></tr></tbody></table> 

</body> 
</html> 

and add jquery program 
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]--></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)) 
    } 
})() 
+0

somereason這隻適用於Firefox而不是IE瀏覽器。我能做些什麼來使它與IE兼容。我得到以下錯誤:對象不支持屬性或方法'btoa' – Fahad

+0

如果你想在IE中工作,你應該使用servlet ...... – Kumar

+0

任何示例或鏈接在線,我可以看到一個GIST它? – Fahad