【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`)}`,
      });
    },
相关推荐
晴天的雨.9922 小时前
【C++算法】和为s的两个数
开发语言·数据结构·c++·算法
开开心心就好5 小时前
批量提取PDF中的图片,直接导出原图
前端·javascript·支持向量机·智能手机·pdf·html·启发式算法
IvanCodes7 小时前
Python 数据处理(十三):JSON、CSV 与数据序列化
开发语言·python
aramae8 小时前
MySQL复合查询(8)
java·c语言·开发语言·后端·算法
默_笙9 小时前
🏛 给 AI 配一间办公室:Harness Engineering 六大模块与它的实现
前端·javascript
linux_cfan11 小时前
videojs v10 源代码系列解读:14 · 谓词守卫:在运行时安全地调用能力
前端·javascript·音视频
qq_25183645711 小时前
springboot vue3 开发实现 拼豆管理系统
java·开发语言·ai编程
郑州光合科技余经理12 小时前
同城外卖小程序开发:下单成功后,后台导出能不能对上用户端状态
开发语言·前端·git·后端·uni-app·php·ai编程
知识分享小能手12 小时前
C++ 学习教程,从入门到精通,C++ 入门知识 — 完整知识点(1)
开发语言·c++·学习
+VX:Fegn089512 小时前
计算机毕业设计|基于springboot + vue旅游管理系统(源码+数据库+文档)
java·开发语言·vue.js·spring boot·课程设计