• Vue项目实现导入导出Excel表格功能


    前提:在我的项目中我使用的是ElementUi前端UI框架,用到的是里面的Upload上传组件。

    第一步:需要安装三个依赖

    npm install -S file-saver xlsx  (这里其实安装了2个依赖)

    npm install -D script-loader

     

    第二步:在main.js文件中全局导入挂载xlsx插件

    //  导入excel插件

    import XLSX from 'xlsx'

    Vue.prototype.XLSX = XLSX

     

    第三步:在src目录新建一个文件夹(名字随意),在这个文件夹里面放入2个JS文件分别是:Blob.js和Export2Excel.js,网上可百度下载。

     

    第四步,需要的页面的template标签中开始写代码(我先写导入的代码)

    <!-- 导入Excel -->
    <el-upload
       action="/上传文件的接口"
       :on-change="onChange"
       :auto-upload="false"
       :show-file-list="false"
       accept=".xls, .xlsx" >
       <el-button type="warning" icon="el-icon-folder-add">批量导入</el-button>
    </el-upload>

    第五步:然后在  methods: {}中配置方法,代码如下:

     1 // ----------以下为导入Excel数据功能--------------
     2     // 文件选择回调
     3     onChange(file, fileList) {
     4       console.log(fileList);
     5       this.fileData = file; // 保存当前选择文件
     6       this.readExcel(); // 调用读取数据的方法
     7     },
     8     // 读取数据
     9     readExcel(e) {
    10       console.log(e);
    11       let that = this;
    12       const files = that.fileData;
    13       console.log(files);
    14       if (!files) {
    15         //如果没有文件
    16         return false;
    17       } else if (!/.(xls|xlsx)$/.test(files.name.toLowerCase())) {
    18         this.$message.error("上传格式不正确,请上传xls或者xlsx格式");
    19         return false;
    20       }
    21       const fileReader = new FileReader();
    22       fileReader.onload = ev => {
    23         try {
    24           const data = ev.target.result;
    25           // console.log(data)
    26           const workbook = this.XLSX.read(data, {
    27             type: "binary"
    28           });
    29           console.log(workbook.SheetNames);
    30           if (workbook.SheetNames.length >= 1) {
    31             this.$message({
    32               message: "导入数据表格成功",
    33               showClose: true,
    34               type: "success"
    35             });
    36           }
    37           const wsname = workbook.SheetNames[0]; //取第一张表
    38           const ws = this.XLSX.utils.sheet_to_json(workbook.Sheets[wsname]); //生成json表格内容
    39           console.log(ws);
    40           that.outputs = []; //清空接收数据
    41           for (var i = 0; i < ws.length; i++) {
    42             var sheetData = {
    43               // 键名为绑定 el 表格的关键字,值则是 ws[i][对应表头名]
    44               id: ws[i]["id"],
    45               stuNumber: ws[i]["学号"],
    46               stuName: ws[i]["姓名"],
    47               sex: ws[i]["性别"],
    48               tel: ws[i]["电话"],
    49               xueyuan: ws[i]["学院"],
    50               banji: ws[i]["班级"],
    51               lyNumber: ws[i]["楼宇号"],
    52               sushe: ws[i]["宿舍号"]
    53             };
    54             that.studentlist.unshift(sheetData);
    55           }
    56           this.$refs.upload.value = "";
    57         } catch (e) {
    58           return false;
    59         }
    60       };
    61       // 如果为原生 input 则应是 files[0]
    62       fileReader.readAsBinaryString(files.raw);
    63     },

    此时导入的功能就结束了,下面开始实现导出的功能

    第一步,在template标签中写入导出的按钮,并绑定单击事件,代码如下:

    <el-button type="warning" icon="el-icon-download" @click="exportToExcel">批量导出</el-button>

    第二步:在methods{}方法中写对应的方法

     1 // ----------以下为导出Excel数据功能--------------
     2     exportToExcel() {
     3       //excel数据导出
     4       require.ensure([], () => {
     5         const { export_json_to_excel } = require("../../excel/Export2Excel");
     6         const tHeader = [
     7           "id",
     8           "学号",
     9           "姓名",
    10           "性别",
    11           "联系电话",
    12           "宿舍号",
    13           "学院",
    14           "班级",
    15           "楼宇号"
    16         ];
    17         const filterVal = [
    18           "id",
    19           "stuNumber",
    20           "stuName",
    21           "sex",
    22           "tel",
    23           "sushe",
    24           "xueyuan",
    25           "banji",
    26           "lyNumber"
    27         ];
    28         const list = this.studentlist;
    29         const data = this.formatJson(filterVal, list);
    30         export_json_to_excel(tHeader, data, "学生列表excel");
    31       });
    32     },
    33     formatJson(filterVal, jsonData) {
    34       return jsonData.map(v => filterVal.map(j => v[j]));
    35     },

    https://www.bilibili.com/video/BV1H7411N7Qq/?spm_id_from=333.788.videocard.0

    https://github.com/liyaxu123/-Vue-ElementUi-NodeJS-Mysql-

  • 相关阅读:
    openwrt的内核版本是在哪个文件中指定的?
    git如何将一个分支合并到另一个分支?
    cygwin如何下编译安装tmux?
    如何合并ts文件?
    在cygwin下创建的文件位于windows的哪个目录下?
    linux shell的for循环语法是怎样的?
    内部类访问局部变量时,为什么需要加final关键字
    Java8函数式编程的宏观总结
    Maven私服使用经验总结
    java关于Integer设置-128到127的静态缓存
  • 原文地址:https://www.cnblogs.com/guwufeiyang/p/13245875.html
Copyright © 2020-2023  润新知