一. 创建一个空的vue2项目

 一顿操作后

1. vue create excel_demo

2. cd excel_demo

3. npm run serve

效果如下

  

二. 前期准备

1. 关闭eslint检查

vue.config.js加上 

lintOnSave: false

2.安装插件 element-ui

npm i element-ui

main.js里面加上 

import ElementUI from 'element-ui';

import 'element-ui/lib/theme-chalk/index.css';

Vue.use(ElementUI);

2. 安装插件xlsx        

npm install xlsx@0.16.0 --save

三. 找到vue-element-admin模板中 excel导入功能所用的关键代码

1. 全局搜索upload-excel  找封装好的excel上传组件

2. 找到 components/UploadExcel/index.vue  将整个UploadExcel文件夹复制到 excel_demo项目的 components目录下 

3. App.vue内容覆盖为 

<template>
  <div class="app-container">
    <upload-excel-component :on-success="handleSuccess" :before-upload="beforeUpload" />
    <el-table :data="tableData" border highlight-current-row style="width: 100%;margin-top:20px;">
      <el-table-column v-for="item of tableHeader" :key="item" :prop="item" :label="item" />
    </el-table>
  </div>
</template>

<script>
import UploadExcelComponent from '@/components/UploadExcel/index.vue'

export default {
  components: { UploadExcelComponent },
  data() {
    return {
      tableData: [],
      tableHeader: []
    }
  },
  methods: {
    beforeUpload(file) {
      const isLt1M = file.size / 1024 / 1024 < 1

      if (isLt1M) {
        return true
      }

      this.$message({
        message: 'Please do not upload files larger than 1m in size.',
        type: 'warning'
      })
      return false
    },
    handleSuccess({ results, header }) {
      this.tableData = results
      this.tableHeader = header
      console.log(results, header)
    }
  }
}
</script>

此时效果 ↓↓↓↓↓↓

 

四. 找到 excel导出功能所用的关键代码

 1. src\vendor目录整个文件夹复制到demo项目的src目录下

2.安装依赖

npm install file-saver script-loader xlsx --save

3. app.vue 加一个导出按钮

<el-button type="primary" @click="handleDownload">导出</el-button>

4. 编写导出函数,这里有个坑 替你们踩了

handleDownload() {
      if(this.tableData.length === 0) return this.$message.error('无数据可导出')
      import('@/vendor/Export2Excel.js').then(excel => {

         /* 
         这里有个坑!!!

         导出要的表格数据 需要数组嵌套内容数组, 而this.tableData是数组嵌套对象
         对象里面是 键值对, 所以需要格式化一下才能用

         否则会卡死!!!
         */
        const tableDatas = this.tableData.map(item=> {
          return Object.values(item)
        })
        // 转化后符合导出规格的表格数据
        console.log('tableDatas',tableDatas);
        // 调用插件的函数开始生成excel文件
        excel.export_json_to_excel({
          header: this.tableHeader,
          data: tableDatas,
          filename: 'demo-excel-list', // 文件名称
          autoWidth: true, // 宽度是否自适应
          bookType: 'xlsx' // 生成的文件类型
        })
      })
    },

 初始获取的表格数据, 不能直接用来导出, 需要先格式化, 否则会卡死 !!!

导出效果↓↓↓

 

 

 

GitHub 加速计划 / vu / vue-element-admin
87.26 K
30.42 K
下载
PanJiaChen/vue-element-admin: 是一个基于 Vue.js 和 Element UI 的后台管理系统模板,支持多种数据源和插件扩展。该项目提供了一个完整的后台管理系统模板,可以方便地实现后台管理系统的快速搭建和定制,同时支持多种数据源和插件扩展。
最近提交(Master分支:2 个月前 )
0caa975e - 2 年前
cd3f7267 - 2 年前
Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐