js生成Excel文件

js生成Excel表格,纯工具js。参考了http://blog.csdn.net/aa122273328/article/details/50388673网友的代码。

function utils($) {
    var $=$;

    /**
     * 
     * @param cols  数组类型   格式['序号','姓名','地址']
     * @Param colsFiled     格式{'序号':'id','姓名':'name','地址':'address'}
     * @param data  数组类型   格式[{'id':1,'name':张三,'address':成都},{'id':2,'name':李四,'address':成都}]
     * @returns
     */
    this.createExcle=function (cols,colsFiled,data){

        var table = $('<table></table>');
        var th = $('<tr></tr>');

        var index = 0;

        for(var i = 0; i < data.length; i++){

            var tr = $('<tr></tr>');
            var values = data[i];

            for(var j = 0; j < cols.length; j++){

                var fliedName = cols[j];
                var flied = colsFiled[fliedName];
                var value = values[flied];
                var td = $('<td></td>');
                td.html(value);

                if(index == 0){
                    var tdTh = $('<td></td>');
                    tdTh.html(fliedName);
                    th.append(tdTh);
                }

                tr.append(td);
            }
            if(index == 0){
                table.append(th);
            }
            table.append(tr);
            index++;
        }
        table.attr('id','datatab');
        table.attr("style", "display: none");
        table.appendTo('body');
        method5('datatab');
        datatab.remove();
        function method5(tableid) {  
            
            var idTmr;
            
            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))  
                }  
            })()

            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();  
            }
            
            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';  
                }  
            }
        } 
    }
}

 

posted @ 2017-11-09 00:59  一只爱喝果粒橙的程序员  阅读(11253)  评论(2编辑  收藏  举报