解决vue项目导出当前页Table为Excel

解决vue项目中导出当前页表格为Excel表格的方案

用到的技术:

  • Vue2
  • Element-ui
  • file-saver
  • xlsx

1、创建vue项目,安装element-ui

2、创建一个组件,组件内放入表格,和导出按钮

javascript 复制代码
<template>
  <div>
    <!-- 导出的按钮 -->
    <el-button size="small" type="primary" icon="el-icon-download" @click="exportData"
      >导出</el-button
    >
    <!-- 表格数据 -->
    <el-table id="myTable" :data="tableData" style="width: 100%" border>
      <el-table-column prop="date" label="日期" width="180"> </el-table-column>
      <el-table-column prop="name" label="姓名" width="180"> </el-table-column>
      <el-table-column prop="address" label="地址"> </el-table-column>
    </el-table>
  </div>
</template>

<script>
export default {
  props: {},
  data() {
    return {
      tableData: [
        {
          date: '2016-05-02',
          name: '王小虎',
          address: '上海市普陀区金沙江路 1518 弄'
        },
        {
          date: '2016-05-04',
          name: '王小虎',
          address: '上海市普陀区金沙江路 1517 弄'
        },
        {
          date: '2016-05-01',
          name: '王小虎',
          address: '上海市普陀区金沙江路 1519 弄'
        },
        {
          date: '2016-05-03',
          name: '王小虎',
          address: '上海市普陀区金沙江路 1516 弄'
        }
      ]
    }
  },
  methods: {}
    
</script>

<style scoped lang="less"></style>

3、安装导出表格需要的插件【xlsx 和 file-saver】

npm install --save xlsx file-saver

4、在main.js中引入安装的依赖

javascript 复制代码
// 引入导出excel的插件
import FileSaver from 'file-saver'
import * as XLSX from 'xlsx'
Vue.prototype.$FileSaver = FileSaver; //设置全局
Vue.prototype.$XLSX = XLSX; //设置全局

5、编写导出功能

javascript 复制代码
 //导出功能
    exportData() {
      let excelName = '导出表格名称.xlsx'
      var xlsxParam = { raw: true } //转换成excel时,使用原始的格式
      // 克隆节点
      let tables = document.getElementById('myTable').cloneNode(true)
      // 判断是否为固定列,解决(为固定列时,会重复生成表格)
      if (tables.querySelector('.el-table__fixed') !== null) {
        tables.removeChild(tables.querySelector('.el-table__fixed'))
      }
      let table_book = this.$XLSX.utils.table_to_book(tables, xlsxParam)
      var table_write = this.$XLSX.write(table_book, {
        bookType: 'xlsx',
        bookSST: true,
        type: 'array'
      })
      try {
        this.$FileSaver.saveAs(
          new Blob([table_write], { type: 'application/octet-stream' }),
          excelName
        )
      } catch (e) {
        if (typeof console !== 'undefined') console.log(e, table_write)
      }
      return table_write
    }

搞定!!!

完整代码

javascript 复制代码
<template>
  <div>
    <!-- 导出的按钮 -->
    <el-button size="small" type="primary" icon="el-icon-download" @click="exportData"
      >导出</el-button
    >
    <!-- 表格数据 -->
    <el-table id="myTable" :data="tableData" style="width: 100%" border>
      <el-table-column prop="date" label="日期" width="180"> </el-table-column>
      <el-table-column prop="name" label="姓名" width="180"> </el-table-column>
      <el-table-column prop="address" label="地址"> </el-table-column>
    </el-table>
  </div>
</template>

<script>
export default {
  props: {},
  data() {
    return {
      tableData: [
        {
          date: '2016-05-02',
          name: '王小虎',
          address: '上海市普陀区金沙江路 1518 弄'
        },
        {
          date: '2016-05-04',
          name: '王小虎',
          address: '上海市普陀区金沙江路 1517 弄'
        },
        {
          date: '2016-05-01',
          name: '王小虎',
          address: '上海市普陀区金沙江路 1519 弄'
        },
        {
          date: '2016-05-03',
          name: '王小虎',
          address: '上海市普陀区金沙江路 1516 弄'
        }
      ]
    }
  },
  methods: {
    //导出功能
    exportData() {
      let excelName = '导出表格名称.xlsx'
      var xlsxParam = { raw: true } //转换成excel时,使用原始的格式
      // 克隆节点
      let tables = document.getElementById('myTable').cloneNode(true)
      // 判断是否为固定列,解决(为固定列时,会重复生成表格)
      if (tables.querySelector('.el-table__fixed') !== null) {
        tables.removeChild(tables.querySelector('.el-table__fixed'))
      }
      let table_book = this.$XLSX.utils.table_to_book(tables, xlsxParam)
      var table_write = this.$XLSX.write(table_book, {
        bookType: 'xlsx',
        bookSST: true,
        type: 'array'
      })
      try {
        this.$FileSaver.saveAs(
          new Blob([table_write], { type: 'application/octet-stream' }),
          excelName
        )
      } catch (e) {
        if (typeof console !== 'undefined') console.log(e, table_write)
      }
      return table_write
    }
  },
  components: {}
}
</script>

<style scoped lang="less"></style>


相关推荐
Dwzun8 分钟前
基于SpringBoot+Vue的二手书籍交易平台系统【附源码+文档+部署视频+讲解)
java·vue.js·spring boot·后端·spring·计算机毕业设计
北辰alk36 分钟前
Vue3 事件修饰符深度解析:从基础到高级应用的完整指南
vue.js
北辰alk38 分钟前
Vue3 服务端渲染 (SSR) 深度解析:从原理到实践的完整指南
vue.js
一字白首1 小时前
Vue 项目实战,从注册登录到首页开发:接口封装 + 导航守卫 + 拦截器全流程
前端·javascript·vue.js
北辰alk1 小时前
Vue3 组件懒加载深度解析:从原理到极致优化的完整指南
vue.js
JIngJaneIL2 小时前
基于Java + vue干洗店预约洗衣系统(源码+数据库+文档)
java·开发语言·前端·数据库·vue.js·spring boot
剑小麟2 小时前
vue2项目中安装vant报错的解决办法
vue.js·java-ee·vue
Nan_Shu_6143 小时前
学习:Vue (2)
javascript·vue.js·学习
北辰alk3 小时前
Vue项目Axios封装全攻略:从零到一打造优雅的HTTP请求层
vue.js
老华带你飞4 小时前
出行旅游安排|基于springboot出行旅游安排系统(源码+数据库+文档)
java·数据库·vue.js·spring boot·后端·spring·旅游