1、创建ExportExcel.vue组件
<template> <div class="export_tools"> <div v-show="false"> <el-table id="out-table" style="width: 100%;" :data="exportTable"> <template v-for="(item, index) in exportTitle"> <el-table-column v-if="item.isExport" :prop="item.prop" :label="item.label" align="center" :key="index" > <template slot-scope="scope"> <span>{{ scope.row[item.prop] ? scope.row[item.prop] : \'-\' }}</span> </template> </el-table-column> </template> </el-table> </div> <el-button v-if="showExportBtn" type="primary" v-debounce="export_data" icon="el-icon-download">导出表格</el-button> </div> </template> <script> /** * 组件功能:可选择列导出表格。 * 组件说明:需要从父组件中传入四个值,如下 * 1、exportTable:需要导出的表格数据; * 2、exportTitle:表格中有哪些列是可以导出的;格式如下(isExport为true则导出此列,false则不导出此列): * [ * { * prop:\'对应的字段1\', * label:\'列名1\', * isExport: true * }, * { * prop:\'对应的字段2\', * label:\'列名2\', * isExport: false * } * ] * 3、excelName:导出的文件名,最后导出后文件的格式为:年-月-日 时_分_秒-excelName.xlsx, * 如 excelName 为 ‘通道数据表格’,则最后导出的文件名是:2022-01-14 10_40_52-通道数据表格.xlsx * 4、showExportBtn:是否显示 “导出表格” 按钮,默认显示,如不显示的话可以通过ref的方式直接调用 export_data 方法来导出表格。 */ import FileSaver from \'file-saver\' import XLSX from \'xlsx\' export default { name: \'ExportExcel\', props: { exportTable: { type: Array, required: true, default: [], }, exportTitle: { type: Array, required: true, default: [], }, excelName: { type: String, required: true, default: \'Data\', }, showExportBtn: { type: Boolean, required: false, default: true, }, }, data() { return {} }, methods: { // 导出 excel 表格 export_data() { if (this.exportTable.length == 0) return this.$message.warning(\'表格为空,无法导出...\') // 为el-table添加一个id:out-table let wb = XLSX.utils.table_to_book(document.querySelector(\'#out-table\')) let wbout = XLSX.write(wb, { bookType: \'xlsx\', // 导出的文件类型 bookSST: true, type: \'array\', }) try { FileSaver.saveAs( new Blob([wbout], { type: \'application/octet-stream\' }), `${this.$dayjs().format(\'YYYY-MM-DD HH_mm_ss\')}-${this.excelName}.xlsx` ) setTimeout(() => { return this.$message.success(\'表格导出成功...\') }, 1000) } catch (e) { if (typeof console !== \'undefined\') console.log(e, wbout) } return wbout }, }, mounted() {}, } </script> <style lang="scss" scoped></style>
2、在父组件中引入
import ExportExcel from \'../commonTools/ExportExcel.vue\' // 导出表格组件
3、在components中注册组件
components: { \'export-excel\': ExportExcel, },
4、在template中使用组件
<export-excel :exportTable="tableData" :excelName="excel_name" :exportTitle="export_title" ></export-excel>
注意:需要安装依赖
npm install --save xlsx file-saver