Js exports Excel by splicing table, but there are more than 50, 000 rows of data, and a network error occurs when you click to download

js exports Excel by splicing table, but there are more than 50, 000 rows of data. A network error occurs when you click to download. When the amount of data is small, download normally
code as follows:

< script >

var idTmr;
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";
    }
}
function toExcel(tableid) {
    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,"name", ".xls")
    }
}
function Cleanup() {
    window.clearInterval(idTmr);
    CollectGarbage();
}
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]-->" +
        "<style type="text/css">\n" +
        "        -sharptable thead{width:100%;z-index:5;}\n" +
        "        -sharptable td{overflow: hidden;text-overflow: ellipsis;white-space: nowrap;table-layout: fixed;padding-right: 0;}\n" +
        "        -sharptable .project_title{background-color: -sharp88e1ff;font-weight: bold;}\n" +
        "        -sharptable .batch_title {font-weight: bold}\n" +
        "        -sharptable .not_end{color: red;}\n" +
        "        -sharptable tbody tr>td{text-align: left;padding-left: 5px;}"+
        "        .not_charge{color: blue}\n" +
        "        .charge{color: green}\n" +
        "        .pay_month{color: purple}\n" +
        "    </style>"+
        "</head><body><table id="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();

    }
})()
</script>

how can I write this excel so that it can be downloaded?

Jul.02,2022

because the browser URL has a length limit. Your method is to convert excel data into base64. When the amount of data is large, the length exceeds the browser GET limit. Part of it was blocked. Naturally, you can't recognize this excel.

specific solutions
use blob objects.

let blob = new Blob([format(template, ctx]);
document.getElementById("dlink").href = URL.createObjectURL(blob)

var blob = new Blob ([format (template, ctx)], {type: "application/vnd.ms-excel"});
document.getElementById ("dlink"). Href = URL.createObjectURL (blob);

Menu