导入导出--前端做逻辑

一、导入表 ==> 使用插件 : npm install xlsx
    
    import * as XLSX from 'xlsx'

    插件网址:https://vue-xlsx.netlify.app/

二、导出表 ==> 使用插件 : npm install file-saver


    import FileSaver from 'file-saver'


注意:    
    
    1. 导入表和导出表==>普通用法
    2. 分页数据的导出 
    3. 数据导出的组织架构
    4. 大量数据的导入导出的性能优化

 

<template>
  <div class="home">
    <!--导出表-->
    <el-button type="success" @click="exportExcel">导出</el-button>
    <hr />
    <el-upload
      action=""
      accept=".csv,.xls,.xlsx"
      :on-change="importExcel"
      :show-file-list="false"
      :auto-upload='false'
    >
        <el-button size="small" type="primary">导入</el-button>
    </el-upload>

    <hr />
    
    <el-table
      :data="tableData"
      style="width: 100%"
      class="table"
    >
      <el-table-column
        prop="id"
        label="序号"
        width="180">
      </el-table-column>
      <el-table-column
        prop="name"
        label="姓名"
        width="180">
      </el-table-column>
      <el-table-column
        prop="age"
        label="年龄"
        width="180">
      </el-table-column>
      <el-table-column
        prop="address"
        label="地址">
      </el-table-column>
    </el-table>


  </div>
</template>

<script>
import * as XLSX from 'xlsx'
import FileSaver from 'file-saver'
export default {
  data() {
    return {
      tableData: []
    }
  },
  methods:{
    //导入表
    importExcel( file ){
      let that = this;
      let { raw } = file;
      //读取文件内容
      let render = new FileReader();
      //异步按照字节读取文件内容,结果用ArrayBuffer表示
      render.readAsArrayBuffer( raw );
      render.onload = function(){
        const buffer = render.result;
        //用数组表示出来
        const bytes = new Uint8Array( buffer );
        const length = bytes.byteLength;
        let binary = '';
        for( let i=0;i<length;i++){
          binary+= String.fromCharCode( bytes[i] );
        }
        const wb = XLSX.read( binary , { type: 'binary'});
        const outdata = XLSX.utils.sheet_to_json(wb.Sheets[ wb.SheetNames[0]]);
        console.log( outdata );
        let outarr = [...outdata];
        let arr = [];
        outarr.map( v=>{
          let obj = {};
          obj.id=v.序号;
          obj.name = v.姓名;
          obj.age = v.年龄;
          obj.address = v.地址;
          arr.push( obj );
        })
        that.tableData = arr;
      }
    },
    //导出
    exportExcel(){
      let xlsxParam = { raw:true };
      let table = document.querySelector('.table');
      //从那个table中导出
      const wb = XLSX.utils.table_to_book( table,xlsxParam );
      let wbout = XLSX.write(wb,{
        bookType:'xlsx',
        bookSST:true,
        type:'array'
      })

      try{
        FileSaver.saveAs(
          //导出的文件
          new Blob([wbout],{type:'application/octet-stream;charset=utf-8'}),
          //导出的文件名
          Math.random() + '.xlsx'
        )
      }catch( e ){
        console.log(  '导出失败:', e );
      }
      return wbout;
    }
  }
}
</script>

二   vue 使用xlsx导出功能(及其选择导出,条件导出,部分字段导出)

1.下载xlsx插件

npm install --save xlsx

2.main.js中使用

import XLSX from 'xlsx'
Vue.prototype.XLSX = XLSX```

3.vue页面中使用

在这里插入图片描述

   <el-button type="success" @click="exportExcel" size="small" icon="el-icon-upload2">导出</el-button>
  exportExcel() {
                let list = [];
                if (this.selectRows.length>0){ //如图我选择了导出那几条数据则导出我需要导出的数据(this.selectRows表示我选中导出数据的数组)
                    list =this.selectRows  //选择导出部分代码
                    this.exportList(list);
                } else {//如果木有选择则导出全部数据
                    console.log(this.selectRows)
                    this.axios
                        .get("/sec/secVisitorRegister/list?isPage=false", {params: this.params})
                        .then(res => {
                            console.log(res.data.data);
                            list = res.data.data; //导出全部代码或条件查询出来的代码
                            this.exportList(list);
                        });
                }


            },
            exportList(list){
                let tableData = [
                    ['序号','姓名', '联系电话','来访时间', '同行人数',"单位或住址","来访目的","备注"]//导出表头
                ] // 表格表头
                list.forEach ((item,index)=> {
                    let rowData = []
                    //导出内容的字段
                    rowData = [
                        index+1,
                        item.name,
                        item.phone,
                        item.registerTime,
                        item.numberPeople,
                        item.address,
                        item.purpose,
                        item.memo,
                    ]
                    tableData.push(rowData)
                })
                let ws = this.XLSX.utils.aoa_to_sheet(tableData)
                let wb = this.XLSX.utils.book_new()
                this.XLSX.utils.book_append_sheet(wb, ws, '来访记录') // 工作簿名称
                this.XLSX.writeFile(wb, '来访记录.xlsx') // 保存的文件名
            },

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值