【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`)}`,
      });
    },
相关推荐
Hello_Damon_Nikola1 小时前
AC7911从入门到精通
开发语言·嵌入式硬件·物联网·php
worxfr1 小时前
Go 并发控制:从 Channel 方向约束到实战模式
开发语言·后端·golang
带鱼吃猫1 小时前
预处理器:宏、运算符与条件编译
c语言·开发语言
小小龙学IT1 小时前
C++ std::vector 底层实现深度解析:内存布局、扩容策略、移动语义与迭代器失效
开发语言·c++·算法
大家的林语冰2 小时前
👉 尤雨溪再次成立新公司,同时官宣 Pinia 4 正式发布!
前端·javascript·vue.js
码匠许师傅2 小时前
【C++ 面试真题】聊聊 volatile 和 mutable
开发语言·c++·面试
用户938515635072 小时前
从零在浏览器里跑 DeepSeek-R1:WebGPU + Transformer.js 全链路实战(二)
前端·javascript·typescript
(Charon)2 小时前
【C++】线程安全队列(二):生产者消费者模型与 condition_variable 阻塞等待
c语言·开发语言·c++
liwulin05062 小时前
【PYTHON】使用Selenium + ChromeDriver以及XPATH语法
开发语言·python·selenium