【前端 VUE】Vue中 excel 导入导出 XLSX

npm安装

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

Blob.js,Export2Excel.js下载地址:

然后再main.js中导入这两个文件;

<input id="upload" type="file" @change="importfxx(this)" accept=".csv, application/vnd.openxmlformats-officedocument.spreadsheetml.sheet, application/vnd.ms-excel" />
//导入
    importfxx(obj) {
      let _this = this;
      let inputDOM = this.$refs.inputer;
      // 通过DOM取文件数据
      this.file = event.currentTarget.files[0];
      var rABS = false; //是否将文件读取为二进制字符串
      var f = this.file;
      var reader = new FileReader();
      //if (!FileReader.prototype.readAsBinaryString) {
      FileReader.prototype.readAsBinaryString = function(f) {
        var binary = "";
        var rABS = false; //是否将文件读取为二进制字符串
        var pt = this;
        var wb; //读取完成的数据
        var outdata;
        var reader = new FileReader();
        reader.onload = function(e) {
          var bytes = new Uint8Array(reader.result);
          var length = bytes.byteLength;
          for (var i = 0; i < length; i++) {
            binary += String.fromCharCode(bytes[i]);
          }
          var XLSX = require("xlsx");
          if (rABS) {
            wb = XLSX.read(btoa(fixdata(binary)), {
              //手动转化
              type: "base64"
            });
          } else {
            wb = XLSX.read(binary, {
              type: "binary"
            });
          }
          outdata = XLSX.utils.sheet_to_json(wb.Sheets[wb.SheetNames[0]]); //outdata就是你想要的东西
          this.outdata = outdata;
          _this.$message({
            message: "导入成功",
            type: "success"
          });
        };
        reader.readAsArrayBuffer(f);
      };
      if (rABS) {
        reader.readAsArrayBuffer(f);
      } else {
        reader.readAsBinaryString(f);
      }
    },

提炼 导入excel文件 解析数据得到 列表 使用vue elementUI 做示例

引入xlsx插件"xlsx": "^0.16.0"

import XLSX from xlsx

使用elementUI 的上传组件 el-upload

<el-upload class="avatar-uploader" action="uploadImg" :show-file-list="false"
       accept=".xlsx, .xls" :http-request="newrequest">
    <template #tip>
         <div class="el-upload__tip">
              {
         
  {上传格式为excel文件}}
         </div>
    </template>
    <span style="color:#0369AB;cursor:pointer;">导入</span>
</el-upload>

上传文件回调事件(newrequest) 获得file 并进行处理

const newrequest = async (param: any) => {
    console.log(param)
    let dataBinary = await filterFile(param.file)
    let Book = XLSX.read(dataBinary, {type: binary, cellDates: true})
    let Sheet = Book.Sheets[Book.SheetNames[0]]
    const data = XLSX.utils.sheet_to_json(Sheet)
    console.log(data)
}
const filterFile = (file:any) => {
    return new Promise(resolve => {
        let reader = new FileReader()
        reader.readAsBinaryString(file)
        reader.onload = ev => {
            resolve(ev.target.result)
        }
    })
}

数据结果展示

经验分享 程序员 微信小程序 职场和发展