...
大前端

js table表格导出到excel 导出一个工作簿多个sheet

网上找的源码,测试可以正确导出。

var tablesToExcel = (function() {
    var uri = "data:application/vnd.ms-excel;base64,",
        html_start =
        `<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns="http://www.w3.org/TR/REC-html40">`,
        template_ExcelWorksheet =
        `<x:ExcelWorksheet><x:Name>{SheetName}</x:Name><x:WorksheetSource HRef="sheet{SheetIndex}.htm"/></x:ExcelWorksheet>`,
        template_ListWorksheet = `<o:File HRef="sheet{SheetIndex}.htm"/>`,
        template_HTMLWorksheet =
        `
------=_NextPart_dummy
Content-Location: sheet{SheetIndex}.htm
Content-Type: text/html; charset=utf-8

` + html_start + `
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <link id="Main-File" rel="Main-File" href="../WorkBook.htm">
    <link rel="File-List" href="filelist.xml">
</head>
<body><table  border="1">{SheetContent}</table></body>
</html>`,
        template_WorkBook =
        `MIME-Version: 1.0
X-Document-Type: Workbook
Content-Type: multipart/related; boundary="----=_NextPart_dummy"

------=_NextPart_dummy
Content-Location: WorkBook.htm
Content-Type: text/html; charset=utf-8

` + html_start + `
<head>
<meta name="Excel Workbook Frameset">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<link rel="File-List" href="filelist.xml">
<!--[if gte mso 9]><xml>
 <x:ExcelWorkbook>
    <x:ExcelWorksheets>{ExcelWorksheets}</x:ExcelWorksheets>
    <x:ActiveSheet>0</x:ActiveSheet>
 </x:ExcelWorkbook>
</xml><![endif]-->
</head>
<frameset>
    <frame src="sheet0.htm" name="frSheet">
    <noframes><body><p>This page uses frames, but your browser does not support them.</p></body></noframes>
</frameset>
</html>
{HTMLWorksheets}
Content-Location: filelist.xml
Content-Type: text/xml; charset="utf-8"

<xml xmlns:o="urn:schemas-microsoft-com:office:office">
    <o:MainFile HRef="../WorkBook.htm"/>
    {ListWorksheets}
    <o:File HRef="filelist.xml"/>
</xml>
------=_NextPart_dummy--
`,
    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(tables, filename) {
        var context_WorkBook = {
            ExcelWorksheets: "",
            HTMLWorksheets: "",
            ListWorksheets: ""
        };
        tables.forEach((item, index) => {
            var SheetName = item.name;
            context_WorkBook.ExcelWorksheets += format(template_ExcelWorksheet, {
                SheetIndex: index,
                SheetName: SheetName
            });
            context_WorkBook.HTMLWorksheets += format(template_HTMLWorksheet, {
                SheetIndex: index,
                SheetContent: item.html
            });
            context_WorkBook.ListWorksheets += format(template_ListWorksheet, {
                SheetIndex: index
            });
        });
        var link = document.createElement("A");
        link.href = uri + base64(format(template_WorkBook, context_WorkBook));
        link.download = filename || "Workbook.xls";
        link.target = "_blank";
        document.body.appendChild(link);
        link.click();
        document.body.removeChild(link);
    };
})();
var sheet_1 = `<thead><tr><th>这是sheet1的表头</th></tr><thead><tbody><tr><td>这是sheet1的表体</td></tr><tbody>`;
var sheet_2 = `<thead><tr><th>这是sheet2的表头</th></tr><thead><tbody><tr><td>这是sheet2的表体</td></tr><tbody>`;
var sheets = [{
        name: "合并详情",
        html: sheet_1
    },
    {
        name: "发票详情",
        html: sheet_2
    }
];
tablesToExcel(sheets, "导出的excel");

注意:不要对此代码做格式化!!!
格式化后就废了。
如果想加入style 就在 head 内加入css代码

...
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <link id="Main-File" rel="Main-File" href="../WorkBook.htm">
    <link rel="File-List" href="filelist.xml">
    <style>/*此处加入css代码*/</style>
</head>
...
做了一个PDF转图片的小工具,分享一下 JavaScript 数组排序 sort
biu biu biu
yarn 设置淘宝镜像 yarn 错误There appears to be trouble with your network connection. Retrying... win11 安装限制去除 跳过TPM CPU检测 附软件 win11 桌面不满足要求水印去除 适用于跳过TPM CPU检测安装后的桌面水印 php正则获取网页中的json update批量修改 mysql update select 用法实例