Vue中导入并读取Excel数据

在工作中遇到需要前端上传excel文件获取到相应数据处理之后传给后端并且展示上传文件的数据.

一、引入依赖

javascript 复制代码
 npm install -S file-saver xlsx
 npm install -D script-loader
 npm install xlsx

二、在main.js中引入

javascript 复制代码
import XLSX from 'xlsx'

三、创建vue文件

javascript 复制代码
<div>
      <el-upload
          class="upload-demo"
          action=""
          :on-change="handleChange"
          :on-remove="handleRemove"
          :on-exceed="handleExceed"
          :limit="limitUpload"
          accept="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet,application/vnd.ms-excel"
          :auto-upload="false">
        <!-- 只 能 上 传 xlsx / xls 文 件 -->
      <el-button size="small" type="primary">点击上传</el-button>
      </el-upload>
  
      <!-- 数据展示 -->
        <el-main>
            <el-table :data="da">
              <el-table-column prop="code" label="编号">
              </el-table-column>
              <el-table-column prop="name" label="姓名">
              </el-table-column>
              <el-table-column prop="pro" label="省份">
              </el-table-column>
              <el-table-column prop="cit" label="城市">
              </el-table-column>
              <el-table-column prop="dis" label="区县">
              </el-table-column>
            </el-table>
          </el-main>
    </div>

四、核心方法

javascript 复制代码
handleChange(file, fileList){
              this.fileTemp = file.raw;
              if(this.fileTemp){
                  if((this.fileTemp.type == 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet') 
                      || (this.fileTemp.type == 'application/vnd.ms-excel')){
                      this.handleExcel(this.fileTemp);
                  } else {
                      this.$message({
                          type:'warning',
                          message:'文件格式错误,请删除后重新上传!'
                      })
                  }
              } else {
                  this.$message({
                      type:'warning',
                      message:'请上文件!'
                  })
              }
          },
          handleExcel(fileTemp) {
              let _this = this;
              this.file = fileTemp;
              var rABS = false; //是否将文件读取为二进制字符串
              var f = this.file;
  
              var reader = new FileReader();
              FileReader.prototype.readAsBinaryString = function(f) {
                  var binary = "";
                  var rABS = false; //是否将文件读取为二进制字符串
                  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就是你想要的东西
                      console.log('未处理的原始数据如下:');
                      console.log(outdata);
                      //此处可对数据进行处理
                      let arr = [];
                      outdata.map(v => {
                          let obj = {}
                          obj.code = v['code']
                          obj.name = v['name']
                          obj.pro = v['province']
                          obj.cit = v['city']
                          obj.dis = v['district']
                          arr.push(obj)
                      });
                      _this.da=arr;
                      _this.dalen=arr.length;
                      return arr;
                  };
                  reader.readAsArrayBuffer(f);
              };
              if (rABS) {
                  reader.readAsArrayBuffer(f);
              } else {
                  reader.readAsBinaryString(f);
              }
          }

结果展示

相关推荐
bin91533 分钟前
【EXCEL数据处理】000010 案列 EXCEL文本型和常规型转换。使用的软件是微软的Excel操作的。处理数据的目的是让数据更直观的显示出来,方便查看。
大数据·数据库·信息可视化·数据挖掘·数据分析·excel·数据可视化
Мартин.8 分钟前
[Meachines] [Easy] Sea WonderCMS-XSS-RCE+System Monitor 命令注入
前端·xss
一 乐1 小时前
学籍管理平台|在线学籍管理平台系统|基于Springboot+VUE的在线学籍管理平台系统设计与实现(源码+数据库+文档)
java·数据库·vue.js·spring boot·后端·学习
昨天;明天。今天。2 小时前
案例-表白墙简单实现
前端·javascript·css
数云界2 小时前
如何在 DAX 中计算多个周期的移动平均线
java·服务器·前端
风清扬_jd2 小时前
Chromium 如何定义一个chrome.settingsPrivate接口给前端调用c++
前端·c++·chrome
安冬的码畜日常2 小时前
【玩转 JS 函数式编程_006】2.2 小试牛刀:用函数式编程(FP)实现事件只触发一次
开发语言·前端·javascript·函数式编程·tdd·fp·jasmine
ChinaDragonDreamer2 小时前
Vite:为什么选 Vite
前端
小御姐@stella2 小时前
Vue 之组件插槽Slot用法(组件间通信一种方式)
前端·javascript·vue.js
GISer_Jing2 小时前
【React】增量传输与渲染
前端·javascript·面试