首页 > 其他分享 >Vue项目实现导入导出Excel表格功能

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

时间:2022-10-27 11:46:53浏览次数:50  
标签:files Vue console log Excel 导入 ws const

前提:在我的项目中我使用的是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: {}中配置方法,代码如下:



// ----------以下为导入Excel数据功能--------------
// 文件选择回调
onChange(file, fileList) {
    console.log(fileList);
    this.fileData = file; // 保存当前选择文件
    this.readExcel(); // 调用读取数据的方法
},
// 读取数据
readExcel(e) {
    console.log(e);
    let that = this;
    const files = that.fileData;
    console.log(files);
    if (!files) {
        //如果没有文件
        return false;
    } else if (!/.(xls|xlsx)$/.test(files.name.toLowerCase())) {
        this.$message.error("上传格式不正确,请上传xls或者xlsx格式");
        return false;
    }
    const fileReader = new FileReader();
    fileReader.onload = ev => {
        try {
            const data = ev.target.result;
            // console.log(data)
            const workbook = this.XLSX.read(data, {
                type: "binary"
            });
            console.log(workbook.SheetNames);
            if (workbook.SheetNames.length >= 1) {
                this.$message({
                    message: "导入数据表格成功",
                    showClose: true,
                    type: "success"
                });
            }
            const wsname = workbook.SheetNames[0]; //取第一张表
            const ws = this.XLSX.utils.sheet_to_json(workbook.Sheets[wsname]); //生成json表格内容
            console.log(ws);
            that.outputs = []; //清空接收数据
            for (var i = 0; i < ws.length; i++) {
                var sheetData = {
                    // 键名为绑定 el 表格的关键字,值则是 ws[i][对应表头名]
                    id: ws[i]["id"],
                    stuNumber: ws[i]["学号"],
                    stuName: ws[i]["姓名"],
                    sex: ws[i]["性别"],
                    tel: ws[i]["电话"],
                    xueyuan: ws[i]["学院"],
                    banji: ws[i]["班级"],
                    lyNumber: ws[i]["楼宇号"],
                    sushe: ws[i]["宿舍号"]
                };
                that.studentlist.unshift(sheetData);
            }
            this.$refs.upload.value = "";
        } catch (e) {
            return false;
        }
    };
    // 如果为原生 input 则应是 files[0]
    fileReader.readAsBinaryString(files.raw);
},


  

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

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

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

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

// ----------以下为导出Excel数据功能--------------
exportToExcel() {
    //excel数据导出
    require.ensure([], () => {
        const { export_json_to_excel } = require("../../excel/Export2Excel");
        const tHeader = [
            "id",
            "学号",
            "姓名",
            "性别",
            "联系电话",
            "宿舍号",
            "学院",
            "班级",
            "楼宇号"
        ];
        const filterVal = [
            "id",
            "stuNumber",
            "stuName",
            "sex",
            "tel",
            "sushe",
            "xueyuan",
            "banji",
            "lyNumber"
        ];
        const list = this.studentlist;
        const data = this.formatJson(filterVal, list);
        export_json_to_excel(tHeader, data, "学生列表excel");
    });
},
formatJson(filterVal, jsonData) {
    return jsonData.map(v => filterVal.map(j => v[j]));
},

标签:files,Vue,console,log,Excel,导入,ws,const
From: https://www.cnblogs.com/yd15321/p/16831656.html

相关文章

  • 一、认识Vue-单文本组件
        在大多数启用了构建工具的Vue项目中,我们可以使用一种类似HTML格式的文件来书写Vue组件。    它被称为单文件组件 (也被称为 *.vue 文件,英文......
  • vue跨域简易版
    当后端接口没有跨域功能时且无法去修改(比如调用第三方接口),就需要前端自己实现跨域功能。vue-cli项目1.在根目录的vue.config.js中配置哪些请求需要转发到没有跨域功能的接......
  • hansontable在vue中的基本使用
    代码Test.vue<template><divid="hansontable"><hot-table:data="data":settings="hotSettings"ref="hotTableRef"></hot-table><......
  • 解决PHPExcel科学计数法问题
     1.使用PhpSpreadsheet进行导入导出最简单正确直接的办法是使用正确的(方法)常见给单元格赋值方法:setCellValue是不行的解决办法:1.单元格值后接......
  • java导出excel(java导出excel数据量大 优化)
    如何利用JAVA生成Excel文件packagebeans.excel;importjava.io.IOException;importjava.io.OutputStream;importjxl.Workbook;importjxl.write.Label;importjxl.write.......
  • vue之hello
    <!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><metaname="viewport"content="width=device-width,initial-scale=1.0"><metahttp-......
  • 8_vue是如何进行数据代理的
    在了解了关于js当中的Object.defineProperty()这个方法后,我们继续对vue当中的数据代理做一个基于现在的解析建议观看之前先了解下js当中的Obejct.defineProperty()链接地......
  • vue3-setup 的参数
    setup(props,context){}第一个参数:    props,是一个对象,包含父组件传递给子组件的所有数据。在子组件中使用props进行接收,包含配置声明并传入的所有的属性的......
  • excel对比两列内容是否相同
    有两列内容,乱序不排,比较两列的内容是否相同(或者查询A列是否都在B列中)使用函数,在C1格,输入如下Excel函数然后下拉,实现测试A中每个格子的内容是否在B中。如果C列中的格中是1,......
  • Tauri-Vue3桌面端聊天室|tauri+vite3仿微信|tauri聊天程序EXE
    基于tauri+vue3.js+vite3跨桌面端仿微信聊天实例TauriVue3Chat。tauri-chat运用最新tauri+vue3+vite3+element-plus+v3layer等技术跨桌面端仿微信|QQ聊天程序EXE。基本实......