1. 程式人生 > >js匯出頁面表格資料到Excel

js匯出頁面表格資料到Excel

1.解決了無法自定義Excel檔名的問題

2.解決了介面身份證號碼等比較長的數字匯出Excel後成科學計數法的問題。

3.相容常見瀏覽器

/**公用方法
 *  方法:exportToExcel(tableid,filename,sheetname)
 *  引數:tableid 表格ID,filename 檔名,sheet名
 *  功能:匯出介面表格中的資料到Excel
 *  返回:
 *  Auther:king 
 *  Rem: 2017-6-7 add 
 */
function exportToExcel(tableid,filename,sheetname){  
    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(filename, "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,filename,sheetname)  
    }  



function Cleanup(){  
    window.clearInterval(idTmr);  
    CollectGarbage();  





/**公用方法
 *  方法:tableToExcel(table,name,filename)
 *  引數:tableid 表格ID
 *  功能:將html的table轉成Excel的data協議型別資料 table 是HTML DOM Document 物件 name 是sheet的名稱
 *  返回:
 *  Auther:king 
 *  Rem: 2017-6-7 add 
 */
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,filename,sheetname){

//這裡建立一個<a/>標記利用a標記的download屬性來自定義Excel檔名,解決button按鈕觸發下載無法自定義Excel檔名的問題
    var a = $('<a id="dlink" style="display:none;"/>');
        $(document.body).append(a);
        if (!table.nodeType) table = document.getElementById(table);
        var ctx = { worksheet: sheetname || 'Worksheet', table: table.innerHTML }
        a.attr("href",uri + base64(format(template, ctx)));
        a.attr("download",filename);//這裡是關鍵所在,當點選之後,設定a標籤的屬性,這樣就可以更改excel檔案的名字了
        document.getElementById("dlink").click();
    }
})();

<script type="text/javascript">
        $(document).ready(function () {  
            $(function(){
                $('#btnExport').on('click', function(){
                exportToExcel('contentTable','測試1','xxxxx等等x');
                });
            });
        });

</script>

注意:利用 <td style="mso-number-format:'\@';"> 處理 介面身份證號碼等比較長的數字匯出Excel後成科學計數法的問題。

參考文件

1.http://blog.csdn.net/nihaoqiulinhe/article/details/53065005

2.http://blog.csdn.net/nihaoqiulinhe/article/details/53537540