【exportExcel】单纯靠js不用任何其他第三方插件导出xls格式文件

方法

javascript 复制代码
    /**
     * 纯JS无第三方库 导出HTML版xls
     * @param {Array} tableData 数组数据源
     * @param {Array} headers [{title:'表头名称', key:'字段key'}]
     * @param {String} fileName 文件名不带后缀
     */
    exportExcel(_this, { tableData, headers, fileName = `导出文件` }) {
        headers ||
            (headers = _this.data_sgs.defaultColumns.map((v) => ({
                key: v.value,
                title: v.label,
            })));

        // 1.拼接表头
        let tableHtml = '<table border="1">';
        tableHtml += "<thead><tr>";
        headers.forEach((h) => {
            tableHtml += `<th>${h.title}</th>`;
        });
        tableHtml += "</tr></thead><tbody>";

        // 2.拼接行数据
        tableData.forEach((row) => {
            tableHtml += "<tr>";
            headers.forEach((h) => {
                let val = row[h.key] || "";
                // mso-number-format:\@ 强制文本,避免长数字科学计数
                tableHtml += `<td style="mso-number-format:'\\@'">${val}</td>`;
            });
            tableHtml += "</tr>";
        });
        tableHtml += "</tbody></table>";

        // 封装成完整xls兼容html文档,th增加背景色,其余原有逻辑完全不变
        const htmlContent = `
<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>
<meta charset="UTF-8">
<meta http-equiv="Content-Type" content="text/html;charset=utf-8"/>
<style>
table {
  font-family: "Microsoft YaHei",微软雅黑;
  font-size: 14px;
  text-align: left;
}
th {
  font-family: "Microsoft YaHei",微软雅黑;
  font-size: 14px;
  text-align: left;
  vertical-align: middle;
}
td {
  font-family: "Microsoft YaHei",微软雅黑;
  font-size: 14px;
  text-align: left;
  vertical-align: middle;
}
</style>
</head>
<body>
${tableHtml}
</body>
</html>`;

        // 生成blob并下载
        const blob = new Blob([htmlContent], {
            type: "application/vnd.ms-excel",
        });
        const url = URL.createObjectURL(blob);
        const a = document.createElement("a");
        a.href = url;
        a.download = `${fileName}.xls`;
        document.body.appendChild(a);
        a.click();
        document.body.removeChild(a);
        URL.revokeObjectURL(url);
    },

demo

javascript 复制代码
    // 导出Excel表格
    exportExcel(d) {
      let selection = this.$refs.table.selection;
      this.$g.exportExcel(this, {
        tableData: selection.length ? selection : this.tableData_bk,
        fileName: `导出${this.$g.date.get_yyyyMMddHHmmss(`now`)}`,
      });
    },
相关推荐
专业抄代码选手6 小时前
08|Fiber 上的 `useState`:状态终于属于具体组件
前端·javascript·react.js
默_笙6 小时前
😭 Vibe Coding 翻车实录:AI 编程为什么必须先写"剧本"
前端·javascript
lerhxx7 小时前
我用 R3F 手搓了一个能走进去的 3D 迷宫简历(上):从选型架构到迷宫生成算法
前端·javascript·three.js
鹏多多12 小时前
PC 网站接入微信登录,这 10 个坑我替你踩完了!
前端·javascript·vue.js
用户2986985301413 小时前
React 中 HTML 内容转 Word 文档的实现方案
javascript·react.js·html
mONESY13 小时前
我用 Next.js 16 + Supabase 从零做了个「背单词」H5 应用
javascript
boooooooom13 小时前
手把手做一个图 RAG 烹饪问答系统:Neo4j + Milvus + LLM 的工程实践
前端·javascript·后端
Interview Aid11215 小时前
TikTok OA 四题分享|半小时内 AC,题目基本都是实现题
java·开发语言·算法·面试·职场和发展
染指111016 小时前
103.RAG-LLamaIndex后端rag问答-聊天接口
前端·javascript·vue.js·人工智能
CoderIsArt1 天前
C#中UI 线程与 Dispatcher
开发语言·ui·c#