Vue 将elementUI表格导出excel文件

1. 依赖安装

npm install xlsx file-saver --save

https://github.com/eligrey/FileSaver.js
https://github.com/SheetJS/sheetjs

2. 创建文件,封装导出方法

import FileSaver from "file-saver";
import * as XLSX from "xlsx";
export default {
/**
* @param tableId 要导出的表格ID
* @param fileName 文件导出名称
* @param fileType 文件类型
* @param rawFlag - true 导出的内容只做解析,不进行格式转换
* @returns {*}
*/
exportExcel(tableId, fileName, fileType, rawFlag) {
let fix = document.querySelector(".el-table__fixed-right");
let wb;
/* 判断要导出的节点中是否有fixed的表格,如果有,转换excel时先将该dom移除,然后append */
if (fix) {
wb = XLSX.utils.table_to_book(
document.querySelector("#" + tableId).removeChild(fix),
{
raw: rawFlag,
}
);
document.querySelector("#" + tableId).appendChild(fix);
} else {
wb = XLSX.utils.table_to_book(document.querySelector("#" + tableId), {
raw: rawFlag,
});
}
/* 获取二进制字符串作为输出 */
let wbout = XLSX.write(wb, {
bookType: "xlsx",
bookSST: true,
type: "array",
});
try {
FileSaver.saveAs(
//Blob 对象表示一个不可变、原始数据的类文件对象。
//Blob 表示的不一定是JavaScript原生格式的数据。
//File 接口基于Blob,继承了 blob 的功能并将其扩展使其支持用户系统上的文件。
//返回一个新创建的 Blob 对象,其内容由参数中给定的数组串联组成。
new Blob([wbout], {
type: "application/octet-stream",
}),
//设置导出文件名称
fileName + fileType
);
} catch (e) {
if (typeof console !== "undefined") console.log(e, wbout);
}
return wbout;
},
};

3. 使用

<el-table
id="exportTable"
:data="tableData"
style="width: 100%"
>
<el-table-column
prop="xx"
label="xx"
width="180"
>
</el-table-column>
...
</el-table>
<button class="btn btn-default" @click="exportExcelHandle('exportTable')">
导出excel
</button>
// 导入封装方法
import excelExportUtil from "@/utils/excelExportUtil.js";
// 导出
exportExcelHandle(tableId) {
excelExportUtil.exportExcel(tableId, "文件名", ".xls", true);
},

4. 问题

  • 当表格中有固定列时,导出数据会出现重复现象。如果有固定列,根据上面的代码,转换excel时先将该dom移除,然后append。
  • 超过12位的数字导出后变成科学记数法:配置{raw:true}表示不自动获取格式,统一按照文本格式导出,可以避免该问题。
posted @   Li_pk  阅读(801)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· Vue3状态管理终极指南:Pinia保姆级教程
点击右上角即可分享
微信分享提示