前言:

用到的库参考链接:

FileReader:https://developer.mozilla.org/zh-CN/docs/Web/API/FileReader    这个在之前的下载excel的随笔中有用到

xlsx: https://www.npmjs.com/package/xlsx 本次用到读取excel数据插件,功能很强大,文档太大了,需要多琢磨

前端上传excel文件,读取Excel数据并展示成表格

通常情况下上传文件调用后台接口,接口返回改文件的数据,前端处理展示成表格,有些需求,例如,后台只需要表格需要的数据,上传过程后台不落库,并不提供接口,这是就需要我们自己上传文件读取到改文件的数据展示,并提交给后台

1.安装 file-saver 和 xlsx

1 npm install file-saver xlsx

2.main.js中引入依赖

1 import XLSX from 'xlsx'
2 Vue.use(XLSX)

3.用到elementUI的upload上传控件,设置action, http-request等标签属性,由于不需要直接发请求上传到服务器,暂不这是action属性,不需要考虑跨域问题

“httpRequest”是自定义上传方法,用来处理文件中的数据,上传过程会触发改方法

1 <el-upload
2 class="upload-excel"
3 action=""
4 drag
5 :http-request="httpRequest"
6 accept="csv, application/vnd.ms-excel, application/vnd.openxmlformats-officedocument.spreadsheetml.sheet">
7 <i class="el-icon-upload"></i>
8 <div class="el-upload__text">将文件拖到此处,或<em>点击上传</em></div>
9 </el-upload>

4.上传方法

 1 httpRequest(e) {
2 var _this = this;
3 var rABS = false; //是否将文件读取为二进制字符串
4 let f = e.file // 文件信息
5 if(!f) return false;
6 else if(!/\.(xls|xlsx)$/.test(f.name.toLowerCase())) {
7 this.$message.error('上传格式不正确,请上传xls或者xlsx格式')
8 return false
9 }
10
11 var reader = new FileReader();
12 FileReader.prototype.readAsBinaryString = function(f) {
13 var binary = "";
14 var rABS = false; //是否将文件读取为二进制字符串
15 var wb; //读取完成的数据
16 var outdata;
17 var reader = new FileReader();
18 reader.onload = function(e) {
19 var bytes = new Uint8Array(reader.result);
20 var length = bytes.byteLength;
21 for(var i = 0; i < length; i++) binary += String.fromCharCode(bytes[i]);
22 var XLSX = require('xlsx');
23 if(rABS) wb = XLSX.read(btoa(fixdata(binary)), {type: 'base64'}); //手动转化
24 else wb = XLSX.read(binary, { type: 'binary' }); // 这里能获取到所有的数据
25 outdata = XLSX.utils.sheet_to_json(wb.Sheets[wb.SheetNames[0]], {defval: ''}); //outdata的格式可打印了自行查看,注意这里只取到了第一个sheet的数据
26 // 以下是对outdata的格式化,可按个人需要自行转换
27 outdata.map((p, idx)=> {
28 // ...
29 })
30 }
31 reader.readAsArrayBuffer(f);
32 }
33 if(rABS) reader.readAsArrayBuffer(f);
34 else reader.readAsBinaryString(f);
35 },

代码第24行中,变量wb的数据是所有的数据

vue导入Excel数据并展示成表格的更多相关文章

  1. POI 导入excel数据自动封装成model对象--代码

    所有的代码如下: import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; ...

  2. POI 导入excel数据自动封装成model对象--介绍

    1.项目开发中,导入输入应该是常用的基本功能.我们经常会使用excel将数据导入到数据库,在导入之前必须得将excel数据转换成javaBean对象 2.由于此功能经常使用,所以开发此工具类方便日后轻 ...

  3. POI 导入excel数据自动封装成model对象--代码分析

    上完代码后,对代码进行主要的分析: 1.主要使用反射api将数数据注入javabean对象 2.代码中的日志信息级别为debug级别 3.获取ExcelImport对象后需要调用init()方法初始化 ...

  4. 结合bootstrap fileinput插件和Bootstrap-table表格插件,实现文件上传、预览、提交的导入Excel数据操作流程

    1.bootstrap-fileinpu的简单介绍 在前面的随笔,我介绍了Bootstrap-table表格插件的具体项目应用过程,本篇随笔介绍另外一个Bootstrap FieInput插件的使用, ...

  5. vue多个数据不一样的表格导出到同一张excel里面

    刚来公司第二天, 甩了个需求, 把两个不同表格的数据 导出到同一个excel中 ........额,好吧 你要说,两个表格数据差不多, 直接合并数据导出就行: async function getDa ...

  6. 基于 Aspose.Cells与XML导入excel 数据----操作类封装

    前言 导入excel数据, 在每个项目中基本上都会遇到,第三方插件或者基于微软office,用的最多的就是npoi,aspose.cells和c#基于office这三种方式,其中各有各的优缺点,在这也 ...

  7. (转)PLSQL Developer导入Excel数据

    场景:近来在做加班记录的统计,主要是统计Excel表格中的时间,因为我对于Excel表格的操作不是很熟悉,所以就想到把表格中的数据导入到数据库中,通过脚本语言来统计,就很方便了!但是目前来看,我还没有 ...

  8. 【转】 如何导入excel数据到数据库,并解决导入时间格式问题

    在办公环境下,经常会用到处理excel数据,如果用写程序导入excel数据到数据库那就太麻烦了,涉及解析excel,还要各种格式问题,下面简单利用数据库本身支持的功能解决这类导入问题. 准备 创建表 ...

  9. Oracle导入excel数据快速方法

    Oracle导入excel数据快速方法 使用PLSQL  Developer工具,这个可是大名鼎鼎的Oracle  DBA最常使用的工具.    在单个文件不大的情况下(少于100000行),并且目的 ...

  10. thinkphp整合系列之phpexcel导入excel数据

    一:导入phpexcel /ThinkPHP/Library/Vendor/PHPExcel 二:导入excel的函数 /** * 导入excel文件 * @param string $file ex ...

随机推荐

  1. 新的世界,我们推荐不劳而获 -> 持续更新中

    随着技术带来的生产力爆发越来越猛烈,有人提出是不是有必要保留一些落后的生产工艺及相关岗位,以避免社会动荡. 我的答案:不用.但是要改变社会对于不劳而获的态度:我们对于生活资料的不劳而获持接受的态度,但 ...

  2. Linux 提示符后面显示全路径

    vi /root/.bashrc # .bashrc # User specific aliases and functions alias rm='rm -i' alias cp='cp -i' a ...

  3. raid随笔

    1.raid 0 准备两个磁盘 [root@localhost ~]# lsblkNAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTsda 8:0 0 40G 0 disk ...

  4. Net6 读取POST请求 BODY中的内容

    StreamReader stream = new StreamReader(Request.Body); string body = stream.ReadToEndAsync().GetAwait ...

  5. 实验1.SDN拓扑实践

    实验1:SDN拓扑实践 一.基本要求 (一)Mininet运行结果截图 (二) 使用Mininet的命令行生成如下拓扑: 1. 3台交换机,每个交换机连接1台主机,3台交换机连接成一条线. 2. 3台 ...

  6. [picoCTF]Insp3ct0r write up

    根据提示,需要检查浏览器上的Web代码(动手翻译一下啦) (漫不经心的瞅瞅页面,curl+UUUUUUU(一只U就行)一下下,微微瞄一瞄,where is flag? fn+f12(或其它)打开源代码 ...

  7. 学习记录--C++组合+依赖+依赖倒置

    组合关系:表示类之间的关系是整体与部分的关系.即has a / contains a的关系 在面向对象程序设计中,将一个复杂对象分解为简单对象的组合. 在代码中,体现为将一个或多个类的对象作为另一个类 ...

  8. Less-7 '))闭合 和 secure_file_priv 配置写入一句话木马

    Less-7使用的文件导出select ... into outfile ....,一个文件上传. mysql安全配置里有一个配置secure_file_priv控制文件的导出导入. secure_f ...

  9. 今日Python相关练习

    1.计算日期范围内的所有日期 def get_date_list(begin_date,end_date): date_list = [] while begin_date <= end_dat ...

  10. Java程序死锁问题定位与解决

    更多内容,前往 IT-BLOG 一.概述 死锁是指两个或两个以上的进程在执行过程中,因争抢资源而造成的一种互相等待的现象,若无外力干涉它们将无法推进,如果系统资源充足,进程的资源请求能够得到满足,死锁 ...