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 { |
| |
| |
| |
| |
| |
| |
| |
| exportExcel(tableId, fileName, fileType, rawFlag) { |
| let fix = document.querySelector(".el-table__fixed-right"); |
| let wb; |
| |
| 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( |
| |
| |
| |
| |
| 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}表示不自动获取格式,统一按照文本格式导出,可以避免该问题。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· Vue3状态管理终极指南:Pinia保姆级教程