vue上传Excel文件并直接点击文件列表进行预览
本文主要内容:用elementui的Upload 组件上传Excel文件,上传后的列表采用xlsx插件实现点击预览表格内容效果。
在项目中可能会有这样的需求,有很多种方法实现。但是不想要跳转外部地址,所以用了xlsx插件来解析表格,并展示表格内容。
1.安装或CDN引用xlsx插件
xlsx插件,通常指的是SheetJS/js-xlsx,是一个功能强大的JavaScript库,它允许开发者在浏览器或Node.js环境中读取、创建、编辑和导出Excel文件(包括.xls、.xlsx、.csv、.ods等多种格式)。这个库是由纯JavaScript编写的,不依赖于任何外部库,非常适合在前端应用中处理Excel数据,也适用于服务器端处理。
对于Vue开发者来说,vue-xlsx是一个专门为Vue框架设计的轻量级封装库,提供了Vue组件和更加Vue友好的API,它使得在Vue应用中处理Excel文件变得更加简单和直接。在这里我使用的是xlsx。
(1)在项目中安装xlsx
npm install vue-xlsx //安装的是vue-xlsx库,基于SheetJS/js-xlsx的Vue封装库,专门为Vue框架设计
yarn add vue-xlsx
npm install xlsx //安装的是SheetJS/js-xlsx库,纯JavaScript编写的库
yarn add xlsx
(2)CDN引入xlsx
直接添加script标签引入
<script src="https://cdnjs.cloudflare.com/ajax/libs/xlsx/0.18.5/xlsx.full.min.js"></script>
动态添加script标签引入
mounted() {// 引入xlsx插件const script = document.createElement("script");script.src = "https://cdnjs.cloudflare.com/ajax/libs/xlsx/0.18.5/xlsx.full.min.js";//使用.full.min.js引入成功,其他不行script.onload = () =>{console.log("xlsx脚本加载完成");}document.body.appendChild(script);this.assignmentQueryForm()
},
这里的资源是从免费的开源CDN服务网站上copy下来的,cdnjs网站地址:https://cdnjs.com/libraries/xlsx(需要不同版本的请前往)或开发文档概述 | SheetJS 中文网 (nodejs.cn)


(3)CDN引入xlsx没有起作用的解决方法
我这里引入了xlsx的CDN链接,但是运用xlsx还是报错。经过解决,发现使用xlsx.full.min.js这个后缀的文件可以,也不知道为什么。SheetJS开发文档说xlsx.full.min.js是完整的独立脚本。

2.导入xlsx
(1)安装的需要在Vue组件中导入vue-xlsx
import { XlSX } from 'vue-xlsx';
import { XlSX } from 'xlsx';
(2)CDN引入的xlsx直接使用
3.利用vue组件上传Excel文件
ref: 为上传组件设置了一个引用名。
action: 上传地址的URL,但这里设置为#,表明实际的上传逻辑将不会通过action属性指定的URL进行,而是通过:http-request属性自定义。
:on-preview: 点击已上传的文件链接时的回调。
:on-remove: 文件列表移除文件时的回调。
:file-list: 已经上传的文件列表,绑定到fileList数据属性。
:auto-upload: 是否在选取文件后立即进行上传,这里设置为false,表示需要手动触发上传。
:http-request: 覆盖默认的上传行为,可以自定义上传的实现。
:on-change: 文件状态改变时的回调。
multiple: 是否支持多文件上传。
因为只做了Excel文件解析,所以可以在upload组件中设置accept属性,限制只上传表格文件。
accept=".xls, .xlsx"
代码如下:
<el-dialog title="批量导入" :visible.sync="dialogVisible1" width="30%"><el-form :model="importForm1" ref="removeControl" :rules="rules" label-position="right" label-width="auto"style="width: 50%"><el-form-item label="附件:" ref="myfile" style="background-color: #ffffff;"><div style="display: flex"><el-upload ref="upload" action="#" :on-preview="handleView" :on-remove="handleRemove" :file-list="fileList":auto-upload="false" :http-request="uploadFile" :on-change="onChange" multiple><el-button slot="trigger" size="small" type="primary" icon="el-icon-upload2"style="padding: 10px 20px">上传文件</el-button></el-upload></div></el-form-item><span @click="down()" style="cursor: pointer; color: blue">下载模板</span></el-form><span slot="footer" class="dialog-footer"><el-button @click="dialogVisible1 = false">取 消</el-button><el-button type="primary" @click="goUpload()">确 定</el-button></span>
</el-dialog>
4.解析并预览Excel文件
(1)文件上传成功后,点击解析文件
这里会用到upload组件的on-preview(点击已上传的文件链接时的回调)。

(2)解析Excel文件步骤
- 使用
new FileReader()创建一个文件存储,用于异步读取用户的文件内容。 -
当文件读取操作成功完成时,触发
onload事件。通过e.target.result获取到文件的内容。 -
使用
XLSX.read(data, { type: 'array'})将array格式的数据解析为Excel工作簿对象。
-
通过
tablelook.SheetNames[0]获取第一个工作表的名称,并通过tablelook.Sheets[firstSheetName]获取该工作表的数据。
-
使用
XLSX.utils.sheet_to_json(tablesheet, { header: 1 })将工作表的数据转换为JSON格式,其中{ header: 1 }表示第一行作为表头。
-
使用FileReader接口的
readAsArrayBuffer()方法用于开始读取指定Blob或File的内容。
(3)处理JSON数据(可根据自己需求)
- 使用
jsonData.shift()移除并保存表头(即第一行数据) - 通过
filter方法过滤掉包含空值(null、undefined、空字符串'')的行 - 使用
map方法将数据中的每一行数据转换为一个对象,对象的键是表头,值是对应的数据。
我这里处理成了elementui的table格式数据,点击文件列表就可以直接展示表格解析的内容。
代码如下:
handleView(file) {const reader = new FileReader();reader.onload = (e) => {const data = e.target.result;const tablelook = XLSX.read(data, { type: 'array' });const firstSheetName = tablelook.SheetNames[0];const tablesheet = tablelook.Sheets[firstSheetName];const jsonData = XLSX.utils.sheet_to_json(tablesheet, { header: 1 });this.whiteListHeaders = jsonData.shift();// 过滤空数据 this.whiteListTable = jsonData.filter(row => { return row.some(item => item !== null && item !== undefined && item !== ''); }); // 表格数据处理this.tableData2 = this.whiteListTable.map(row => { const obj = {}; this.whiteListHeaders.forEach((header, cellIndex) => { obj[header] = row[cellIndex]; }); return obj; }); console.log("表格头", this.whiteListHeaders); console.log("表格数据", this.whiteListTable); console.log("this.tableData2", this.tableData2); }reader.onerror = (error) => { console.error('读取文件错误:', error); };reader.readAsArrayBuffer(file.raw)this.dialogVisible2 = true;
},
预览文件表格展示
<el-dialog :visible.sync="dialogVisible2" title=" " width="50%"><el-table :data="tableData2" style="width: 100%" :cell-style="{ 'text-align': 'center' }":header-cell-style="{background: '#E5F2FF',color: '#000','text-align': 'center',}"> <el-table-column v-for="header in whiteListHeaders" :key="header" :prop="header" :label="header" width="140"> </el-table-column> </el-table>
</el-dialog>
注意:对于大型的Excel文件或需要进行复杂数据处理的场景,可能需要使用后端API来接收上传的Excel文件,在后端解析文件数据后返回给前端在展示,这样有利于提高性能。
相关文章:
vue上传Excel文件并直接点击文件列表进行预览
本文主要内容:用elementui的Upload 组件上传Excel文件,上传后的列表采用xlsx插件实现点击预览表格内容效果。 在项目中可能会有这样的需求,有很多种方法实现。但是不想要跳转外部地址,所以用了xlsx插件来解析表格,并展…...
OpenCV 像素操作—证件照换底色详细原理 C++纯手写实现
文章目录 总体步骤1.RGB转HSV2.找出要换的底色3.取反,黑白颠倒4.将原图像的非背景部分复制到新背景上 完整代码1.C纯手写版2.官方API版本 总体步骤 1.RGB转HSV 为什么一定要转为HSV 颜色空间? 将图像从BGR颜色空间转换为HSV颜色空间是因为HSV颜色空间更…...
tinygrad框架简介;MLX框架简介
目录 tinygrad框架简介 MLX框架简介 LLaMA编辑 Stable Diffusion编辑 tinygrad框架简介 极简主义与易扩展性 tinygrad 的设计理念是极简主义。与 XLA 类比,如果 XLA 是复杂指令集计算 (CISC),那么 tinygrad 就是精简指令集计算 (RISC)。这种简约的设计使得它成为添加…...
服务器重启了之后就卡在某个页面了,花屏,如何解决??
🏆本文收录于《CSDN问答解惑-专业版》专栏,主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收…...
Hospital 14.6.0全开源医院管理预约系统源码
InfyHMS 具有 60 种功能和 9 种不同类型的用户类型, 他们可以登录系统并根据他们的角色访问他们的数据。 源码下载:https://download.csdn.net/download/m0_66047725/89580674 更多资源下载:关注我。...
C/C++樱花树代码
目录 写在前面 系列文章 C简介 完整代码 代码分析 写在后面 写在前面 C实现精美的樱花树,只需这100行代码! 系列文章 序号目录直达链接1爱心代码https://want595.blog.csdn.net/article/details/1363606842李峋同款跳动的爱心https://want595.b…...
sklearn基础学习
1. 简介 1.1 什么是sklearn sklearn,或者更正式地称为scikit-learn,是一个基于Python的开源机器学习库。它建立在NumPy、SciPy和matplotlib之上,提供了简单而有效的工具用于数据挖掘和数据分析。sklearn支持监督学习和无监督学习算法&#…...
SpringBoot 自动配置原理
一、Condition Condition 是在 Spring 4.0 增加的条件判断功能,通过这个可以功能可以实现选择性的创建 Bean 操 作。 思考: SpringBoot 是如何知道要创建哪个 Bean 的?比如 SpringBoot 是如何知道要创建 RedisTemplate 的? …...
Redisson中RQueue的使用场景附一个异步的例子
RQueue 是一个基于 Redis 的分布式作业队列系统,它允许开发者在 Ruby 应用程序中实现异步任务处理和计划任务调度。由于 Redis 提供了高性能的内存数据结构存储,RQueue 可以快速地存储和检索队列中的任务,这使得它非常适合于高并发和低延迟的…...
SpringMVC 控制层框架-下
五、SpringMVC其他扩展 1. 异常处理机制 1.1 异常处理概念 开发过程中是不可避免地会出现各种异常情况,例如网络连接异常、数据格式异常、空指针异常等等。异常的出现可能导致程序的运行出现问题,甚至直接导致程序崩溃。因此,在开发过程中&a…...
(四)js前端开发中设计模式之工厂方法模式
工厂方法模式,通过对产品类的抽象,使其创建业务主要用于负责创建多类产品的实例 const Java function (content) {this.content content;(function () {let oDiv document.createElement(div)oDiv.innerHTML contentoDiv.style.color greendocument.getElement…...
新版GPT-4omini上线!快!真TM快!
大半夜,OpenAI突然推出了GPT-4o mini版本。 当我看到这条消息时,正准备去睡觉。mini版本质上是GPT-4o模型的精简版本,没有什么革命性的创新,因此我并没有太在意。 结果今天早上一觉醒来发现伴随GPT-4o mini上线,官网和…...
【Unity】RPG2D龙城纷争(十七)敌方常规AI(Normal)的实现
更新日期:2024年7月24日。 项目源码:第五章发布(正式开始游戏逻辑的章节) 索引 简介一、AI_Normal类二、AI调遣策略第一阶段:收集1.提供战场数据收集方法2.收集战场数据三、AI调遣策略第二阶段:评估四、AI调遣策略第三阶段:行动简介 AI_Normal定位为框架自带的最基础的…...
Tracy 小笔记:微信小程序 mpx 雷达图的实现
使用文档: https://www.kancloud.cn/xchhhh/wx-chart/399337 https://github.com/xiaolin3303/wx-charts https://gitee.com/mirrors/wx-charts/#wx-charts 参数说明: https://github.com/xiaolin3303/wx-charts/issues/56 下载 dist 里的 wx-charts-…...
Unity UGUI 之 Input Field
本文仅作学习笔记与交流,不作任何商业用途 本文包括但不限于unity官方手册,唐老狮,麦扣教程知识,引用会标记,如有不足还请斧正 1.Input Field是什么? 给玩家提供输入的输入框 2.重要参数 中英文对照着看…...
SpringBoot接入mongodb例子,并有增删改查功能
1,首先,在pom.xml中添加依赖: <dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-mongodb</artifactId></dependency><!--上面这…...
类和对象(三)
目录 一. 构造函数初始化列表 二. 类型转换 三. static成员 四. 友元 五. 内部类 六. 匿名对象 七. 对象拷贝时的编译器优化 一. 构造函数初始化列表 1. 之前我们实现构造函数时,初始化成员变量主要使用函数体内赋值,构造函数初始化还有一种方式&…...
Android SurfaceFlinger——GraphicBuffer初始化(二十九)
在 SurfaceFlinger 中,GraphicBuffer 是一个关键的数据结构,用于封装和管理图形数据的内存缓冲区。它不仅在 SurfaceFlinger 内部使用,也被其他组件如 GPU 驱动、摄像头服务、视频解码器等广泛利用,以实现高效的数据交换和图形渲染。 一、概述 GraphicBuffer 对象封装了一…...
pytest:4种方法实现 - 重复执行用例 - 展示迭代次数
简介:在软件测试中,我们经常需要重复执行测试用例,以确保代码的稳定性和可靠性。在本文中,我们将介绍四种方法来实现重复执行测试用例,并显示当前迭代次数和剩余执行次数。这些方法将帮助你更好地追踪测试执行过程&…...
一文入门SpringSecurity 5
目录 提示 Apache Shiro和Spring Security 认证和授权 RBAC Demo 环境 Controller 引入Spring Security 初探Security原理 认证授权图示编辑 图中涉及的类和接口 流程总结 提示 Spring Security源码的接口名和方法名都很长,看源码的时候要见名知意&am…...
高效解决付费墙难题:Bypass Paywalls Clean实用技术指南
高效解决付费墙难题:Bypass Paywalls Clean实用技术指南 【免费下载链接】bypass-paywalls-chrome-clean 项目地址: https://gitcode.com/GitHub_Trending/by/bypass-paywalls-chrome-clean 在数字信息时代,付费墙已成为获取优质内容的主要障碍&…...
browser-use爆火:AI Agent接管浏览器,测试自动化正在被重构
导读 最近在实际项目和工具演进中,可以明显看到一个变化: AI 不再只是写代码,而是开始“直接干活”。 这款 browser-use开源工具非常厉害。它能让AI Agent🚀直接操控浏览器。实现网页任务自动化简单高效 (๑•̀ㅂ•́)و✧。该…...
功能关键词 AI 短剧爆发:Sora、Pixverse、可灵视频重构影视行业(中外模型对比)
c.myliang.cn深耕 AI 内容创作与 SEO 优化多年,聚焦 2026 年百度 SEO/GEO 关键词布局,结合 AI 短剧行业爆发趋势,帮影视从业者快速掌握 Sora、Pixverse、可灵视频等中外模型实操技巧,适配百度算法与行业需求,低成本打造…...
5分钟掌握精灵图智能切割:Pixelorama扩展让资源提取效率倍增
5分钟掌握精灵图智能切割:Pixelorama扩展让资源提取效率倍增 【免费下载链接】Pixelorama A free & open-source 2D sprite editor, made with the Godot Engine! Available on Windows, Linux, macOS and the Web! 项目地址: https://gitcode.com/gh_mirrors…...
RabbitMQ 3.13.2安装踩坑实录:如何绕过rabbitmq-service.bat install code 1错误
RabbitMQ 3.13.2安装实战:深度解析服务注册失败与系统级解决方案 当你在Windows系统上部署RabbitMQ 3.13.2时,那个刺眼的rabbitmq-service.bat install exited with code 1错误就像一堵突然出现的墙。这不仅仅是简单的安装失败,而是系统权限、…...
RKNN模型量化全解析:如何用1.5.2版本工具链提升瑞芯微3588芯片推理效率
RKNN模型量化实战指南:1.5.2版本工具链在RK3588芯片的深度优化 边缘计算时代的模型效率革命 当无人机需要在毫秒间识别障碍物,当零售摄像头要同时追踪上百个顾客行为,传统云端AI的响应速度已无法满足需求。这正是边缘AI芯片大显身手的舞台——…...
SAM3图片分割模型入门:无需训练,输入提示词即可提取物体掩码
SAM3图片分割模型入门:无需训练,输入提示词即可提取物体掩码 1. 什么是SAM3图片分割模型 SAM3(Segment Anything Model 3)是2025年发布的一款革命性图像分割模型,它彻底改变了传统需要大量标注数据训练的模式。这个模…...
告别臃肿OS!手把手教你将Zephyr蓝牙协议栈移植到资源受限MCU(基于Polling轮询架构)
从零构建极简蓝牙协议栈:Zephyr Polling架构在资源受限MCU的实战指南 当智能手环的PCB面积被压缩到硬币大小,当电子价签需要依靠纽扣电池运行三年,传统蓝牙协议栈的"豪华配置"突然成了奢侈品。在深圳华强北的某个研发实验室里&…...
科研绘图没美术功底?只需这一招
相信很多科研同仁都有过这样的痛点:明明实验数据很漂亮,创新点也足够突出,却因为一张制作粗糙、配色杂乱的插图,让论文的整体质量大打折扣。甚至在一些高水平期刊的审稿过程中,精美的图像往往能给审稿人留下更好的第一…...
高效游戏辅助与开源工具:League Toolkit 智能英雄联盟助手全解析
高效游戏辅助与开源工具:League Toolkit 智能英雄联盟助手全解析 【免费下载链接】League-Toolkit 兴趣使然的、简单易用的英雄联盟工具集。支持战绩查询、自动秒选等功能。基于 LCU API。 项目地址: https://gitcode.com/gh_mirrors/le/League-Toolkit 在竞…...
