9

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

在此处输入图像描述

我用于将表导出为 .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 内存,所以我认为这不是内存限制问题。

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

 var table_html=encodeURIComponent(table_div.outerHTML);

但仍然出现同样的错误。

4

3 回答 3

2

您很可能已达到 Chrome 中 2 MB 的 URL 限制。您可以在此处阅读相关内容 -问题链接。我建议您在 Firefox 中尝试您的应用程序,如果它有效,那就是问题所在。

于 2013-10-16T13:29:13.817 回答
1

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

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

于 2013-10-16T11:37:34.290 回答
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();

            }
        })();
于 2013-11-20T05:59:29.187 回答