导出为.xls文件时大数据不起作用

时间:2013-10-16 10:58:23

标签: javascript xls

我正在使用javascript代码导出html表到.xls文件。它在crome中工作,当数据不大时。但是当数据很大时它会显示我的错误

enter image description here

我用于将表导出为.xls文件的代码如下:

function exportDiv() {
    //working on crome perfectly       
        var dt = new Date();
        var day = dt.getDate();
        var month = dt.getMonth() + 1;
        var year = dt.getFullYear();
        var hour = dt.getHours();
        var mins = dt.getMinutes();
        var postfix = day + "." + month + "." + year + "_" + hour + "." + mins;
        var a = document.createElement('a');
        var data_type = 'data:application/vnd.ms-excel';
        var table_div = document.getElementById('tbl-1');
        var table_html = table_div.outerHTML.replace(/ /g, '%20');
        a.href = data_type + ', ' + table_html;
        a.download = 'exported_table_' + postfix + '.xls';
        a.click();
        e.preventDefault();

}

我也有足够的4 gb ram所以我认为它不是内存限制问题。

您能帮我解决一下如何导出大数据吗? 编辑:我也用这种方式

 var table_html=encodeURIComponent(table_div.outerHTML);

但仍有同样的错误。

3 个答案:

答案 0 :(得分:2)

您最有可能在Chrome中达到了2 MB的网址限制。你可以在这里阅读 - issue link。我建议你在Firefox中试用你的应用程序,如果它有效,那就是问题。

答案 1 :(得分:1)

excel表格的字符数限制为32767个字符,类似于excel单元格。

供参考检查此链接:http://office.microsoft.com/en-in/excel-help/excel-specifications-and-limits-HP010073849.aspx

答案 2 :(得分:0)

我在按钮点击时调用了tableToexcel函数,如下所示,它在firefix中工作正常。

<a id="dlink"  style="display:none;"></a>

    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, filename) {
                if (!table.nodeType) table = document.getElementById(table)
                var ctx = { worksheet: name || 'Worksheet', table: table.innerHTML }

                document.getElementById("dlink").href = uri + base64(format(template, ctx));
                document.getElementById("dlink").download = filename;
                document.getElementById("dlink").click();

            }
        })();