Vue 根据table导出一个 简单的Excel表格

3,835 阅读2分钟

一. 首先安装依赖。

  • npm install -S file-saver xlsx
  • npm install -D script-loader

二. 在项目中创建一个文件夹(随便哪里都行,只要是能引对),我这边是放在 src 下了,该文件夹的名字也是随便起,我这边叫 vendor

  • 然后先下载两个文件,链接 链接:pan.baidu.com/s/1l_d62Y-U… 提取码:ya1v
  • 把刚才下载的文件 放在 verdor文件夹里面。
    这是图片

三.

  • 在需要导出的页面中,写一个click事件。调用下面的方法,浏览器会自动下载。
    html.
    <el-button type="primary" style="margin-top: 20px;" @click="handleDownload">导出</el-button>
    --------
    js.
    
    handleDownload () {
      this.downloadLoading = true
      require.ensure([], () => {
        const { export_json_to_excel } = require('@/vendor/Export2Excel')
        const tHeader = ['序号', '姓名', '地址']
        const filterVal = ['id', 'author', 'reviewer']
        const list = this.tableData
        const data = this.formatJson(filterVal, list)
        export_json_to_excel(tHeader, data, '列表excel')
        this.downloadLoading = false
      })
    },
    
    formatJson(filterVal, jsonData) {
      return jsonData.map(v => filterVal.map(j => v[j]))
    }

到这所有就结束了,我一开始也是各种百度,结果发现下载的那两个 文件有点问题。上面下载的是我改完的,亲测没毛病。

下面是我的所有demo:

Excel.vue

<template>
  <div class="about" style="width: 80%;margin: 0 auto;">
    <el-table :data="tableData" style="width: 100%">
      <el-table-column prop="id" label="序号" width="180"></el-table-column>
      <el-table-column prop="author" label="姓名" width="180"></el-table-column>
      <el-table-column prop="reviewer" label="地址"></el-table-column>
    </el-table>
    <el-button type="primary" style="margin-top: 20px;" @click="handleDownload">导出</el-button>
  </div>
</template>
<script>
export default {
  data() {
    return {
      tableData: [
        {
          id: 1,
          timestamp: 375676396994,
          author: '哈哈哈哈',
          reviewer: 'Angela'
        },
        {
          id: 2,
          timestamp: 375676396994,
          author: '嘿嘿嘿',
          reviewer: 'Angela'
        },
        {
          id: 3,
          timestamp: 375676396994,
          author: '嘻嘻嘻',
          reviewer: 'Angela'
        }
      ]
    }
  },
  methods: {
    handleDownload() {
      this.downloadLoading = true
      require.ensure([], () => {
        const { export_json_to_excel } = require('@/vendor/Export2Excel')
        const tHeader = ['序号', '姓名', '地址']
        const filterVal = ['id', 'author', 'reviewer']
        const list = this.tableData
        const data = this.formatJson(filterVal, list)
        export_json_to_excel(tHeader, data, '列表excel')
        this.downloadLoading = false
      })
    },
    formatJson(filterVal, jsonData) {
      return jsonData.map(v => filterVal.map(j => v[j]))
    }
  }
}
</script>

效果图:

图片