Vue+Element 实现导出El-Table表格数据

1.首先先安装依赖

npm install --save xlsx file-saver

2、在放置需要导出功能的组件中引入

import { saveAs } from 'file-saver'
import XLSX from 'xlsx'

3.给el-table增加一个id标签

对应exportExcel方法中的 document.querySelector(‘#exportTab’)

例:

<el-table id="exportTab">
//这里是自己渲染的表格数据
</el-table>

4、在methods中设置导出转换excel表格的方法,如下

 exportExcel() {
      this.getList(); //这个是重新2加载表格,意思是每次点击导出的时候都要重新加载一次表格以确定是否在导出前新增了表格内的数据。

       //settimeout:延迟加载 如果不延迟一点加载则会出现导出的数据不是最新的。
      setTimeout(() => {
        /* generate workbook object from table */
      var xlsxParam = { raw: true } // 导出的内容只做解析,不进行格式转换
      var wb = XLSX.utils.table_to_book(document.querySelector('#exportTab'), xlsxParam)

      /* get binary string as output */
      var wbout = XLSX.write(wb, { bookType: 'xlsx', bookSST: true, type: 'array' })
      try {
        saveAs.saveAs(new Blob([wbout], { type: 'application/octet-stream' }), '供应商价格表.xlsx')
      } catch (e) {
        if (typeof console !== 'undefined') {
          console.log(e, wbout)
        }
      }
      }, 1000);
      return wbout
    }

5.自己随便写个按钮点击事件测试即可

6.可能会遇到的问题

  1. 如果表格存在分页,导出时却只导出当前table页绑定的数据,假如我们设置的table每页只有10条数据,但是总共有20条数据,这时导出就只导出了当前table页面的10条数据,并非所有的表格数据,这里就有一种最简单粗暴的方法:

        在Vue页面代码中再加一个el-table标签,这个table专门用来导出数据,不做分页处理,且此table一直隐藏着,这样导出的就是全部数据了。这样的话代码看起来会很多很乱,建议自定义组件后到页面直接引用,看起来会简洁一些。

附原文地址:https://blog.csdn.net/weixin_45792953/article/details/111660751

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Vue3中的`el-table`组件是Element UI库中的表格组件,提供了一种灵活的方式来展示数据。要将`el-table`的数据导出为Excel文件,通常需要结合`vue-excel-export`这个插件来实现。以下是一个简单的步骤概述: 1. 安装插件: 在项目中安装`vue-excel-export`,可以通过npm或yarn: ```bash npm install vue-excel-export --save # 或者 yarn add vue-excel-export ``` 2. 引入并配置插件: 在`main.js`或适当的地方引入并注册插件: ```javascript import VueExcelExport from 'vue-excel-export'; Vue.use(VueExcelExport, { fileName: 'table_data', // 自定义文件名 sheetName: 'Table Data', // 自定义sheet名称 autoColumnWidth: true, // 是否自动调整列宽 excludeHeader: false, // 是否包含表头 }); ``` 3. 生成表格: 在`el-table`组件上使用`@export-excel`事件监听导出操作: ```html <el-table :data="tableData" @export-excel="handleExport"> <!-- ...你的table列和配置... --> </el-table> ``` 4. 处理导出函数: ```javascript methods: { handleExport({ columns, data }) { const workBook = new ExcelJS.Workbook(); const worksheet = workBook.addWorksheet('Sheet 1'); columns.forEach((column) => { worksheet.columns.push(column); }); data.forEach((row) => { worksheet.addRow(row); }); workBook.xlsx.writeFile('export.xlsx'); // 保存到本地 }, } ``` 5. 使用`this.$excel.export()`: 如果想在某个按钮点击事件中触发导出,可以这样使用: ```javascript exportExcelBtnClick() { this.$excel.export({ columns: this.tableColumns, data: this.tableData, }); }, ``` 相关问题-- 1. `vue-excel-export`插件的作用是什么? 2. 如何在`el-table`中设置导出Excel的默认文件名和sheet名称? 3. 导出时如何自定义工作簿和工作表的内容?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值