lyt520

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

分类:

技术点:

相关文章:

  • 2022-12-23
  • 2022-12-23
  • 2021-04-21
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
猜你喜欢
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-07-21
  • 2021-12-07
  • 2022-12-23
  • 2022-12-23
相关资源
相似解决方案