【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`)}`,
      });
    },
相关推荐
霍营_托尼1 分钟前
微信小程序点餐项目实战:飞入动画、样式错位、弹窗不消失,7 个前端坑的完整排障记录
javascript·微信小程序·动效
青春逝如流水12 分钟前
Java 线程池的创建方式、注意要点与任务类型判断
java·开发语言·线程池·多线程·ai文章
徐小黑ACG13 分钟前
Golang goroutine、通道、锁
开发语言·后端·golang
开开心心_Every15 分钟前
内存清理工具定时自动清理开机自启动
java·开发语言·spring·计算机外设·ocr·intellij-idea·excel
纪念 22928 分钟前
c++ string(二)
开发语言·c++
李福春32 分钟前
斗破Google ADK Java苍穹-第5境斗灵-凝物通脉-Context与State
java·开发语言·人工智能·java-ee·google adk·深圳同盟·腾讯云架构师技术同盟
十年Java程序媛33 分钟前
Java 接口和抽象类对比|抛弃老旧八股,正确选型
java·开发语言·spring boot·后端
见叶之秋35 分钟前
【C++】从基类到派生类:关于C++继承的务实梳理
开发语言·c++
kyle~43 分钟前
C++ 智能指针:RAII、所有权与对象生命周期
开发语言·c++
y1su1 小时前
Leetcode 单调栈模板
java·开发语言·数据结构·算法·leetcode