• 如何将vue-element-admin中的excel导入导出功能模块, 单独拿出来用 更新中...


    一. 创建一个空的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内容覆盖为 

    1. <template>
    2. <div class="app-container">
    3. <upload-excel-component :on-success="handleSuccess" :before-upload="beforeUpload" />
    4. <el-table :data="tableData" border highlight-current-row style="width: 100%;margin-top:20px;">
    5. <el-table-column v-for="item of tableHeader" :key="item" :prop="item" :label="item" />
    6. </el-table>
    7. </div>
    8. </template>
    9. <script>
    10. import UploadExcelComponent from '@/components/UploadExcel/index.vue'
    11. export default {
    12. components: { UploadExcelComponent },
    13. data() {
    14. return {
    15. tableData: [],
    16. tableHeader: []
    17. }
    18. },
    19. methods: {
    20. beforeUpload(file) {
    21. const isLt1M = file.size / 1024 / 1024 < 1
    22. if (isLt1M) {
    23. return true
    24. }
    25. this.$message({
    26. message: 'Please do not upload files larger than 1m in size.',
    27. type: 'warning'
    28. })
    29. return false
    30. },
    31. handleSuccess({ results, header }) {
    32. this.tableData = results
    33. this.tableHeader = header
    34. console.log(results, header)
    35. }
    36. }
    37. }
    38. </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. 编写导出函数,这里有个坑 替你们踩了

    1. handleDownload() {
    2. if(this.tableData.length === 0) return this.$message.error('无数据可导出')
    3. import('@/vendor/Export2Excel.js').then(excel => {
    4. /*
    5. 这里有个坑!!!
    6. 导出要的表格数据 需要数组嵌套内容数组, 而this.tableData是数组嵌套对象
    7. 对象里面是 键值对, 所以需要格式化一下才能用
    8. 否则会卡死!!!
    9. */
    10. const tableDatas = this.tableData.map(item=> {
    11. return Object.values(item)
    12. })
    13. // 转化后符合导出规格的表格数据
    14. console.log('tableDatas',tableDatas);
    15. // 调用插件的函数开始生成excel文件
    16. excel.export_json_to_excel({
    17. header: this.tableHeader,
    18. data: tableDatas,
    19. filename: 'demo-excel-list', // 文件名称
    20. autoWidth: true, // 宽度是否自适应
    21. bookType: 'xlsx' // 生成的文件类型
    22. })
    23. })
    24. },

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

    导出效果↓↓↓

     

     

     

  • 相关阅读:
    mitmproxy 使用
    服务访问质量(QoS)——流量整形与拥塞管理
    通过数组模拟理解队列、环形队列
    TraceId 搭配 ELK ,碉堡了!
    使用Jaeger进行分布式跟踪:学习如何在服务网格中使用Jaeger来监控和分析请求的跟踪信息
    UACANet: Uncertainty Augmented Context Attention for Polyp Segmentation
    设计数据库:一条记录/一篇文章/一篇日志 关联存储多张图片
    WoShop分销积分直播短视频商城全开源无加密商城源码
    Linux(Centos6)搭建ElasticSearch(图文教程)
    某小厂面试题
  • 原文地址:https://blog.csdn.net/qq_18816201/article/details/125450493