el-table使用xlsx实现导入文件编辑功能
需求:列表根据xlsx文件导入后,和列表进行对比,之后实现编辑功能

1.下载xlsx
我下的是之前的版本,新版不知道兼不兼容,这个包900多k
npm install xlsx@0.14.5
2.在需要使用表格导入的页面引入
import XLSX from "xlsx";
3.写个导入的el-upload
<el-uploadref="upload"action="/":on-change="onChangeFile":auto-upload="false":show-file-list="false"accept=".xls, .xlsx"class="dialog-upload"><el-button type="primary" icon="el-icon-folder-add">导入</el-button></el-upload>
// 导入表格onChangeFile(file) {console.log(file);// 保存当前选择文件this.fileData = file;// 调用读取数据的方法this.readExcel();},// 读取数据readExcel() {const files = this.fileData;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 = e => {try {const data = e.target.result;const workbook = XLSX.read(data, {type: 'binary',cellDates: true,//设为true,将天数的时间戳转为时间格式});if (workbook.SheetNames.length >= 1) {this.$message.success('导入成功');}// 取第一张表const wsname = workbook.SheetNames[0];console.log(wsname,'e.target.result');// 生成json表格内容const ws = XLSX.utils.sheet_to_json(workbook.Sheets[wsname]);// this.$emit('getUploadData', ws);console.log(ws, '生成json表格内容');this.endPoint(ws);// 清空value值,不然页面为刷新时无法重复使用this.$refs.upload.value = '';} catch (e) {return false;}};fileReader.readAsBinaryString(files.raw);},
得到的json格式如下

表格数据如下

4.比对文件后数据回填
findIndex:如果有符合条件的会返回索引值
endPoint(ws) {// 遍历从Excel导入的数据for (const data of ws) {const name = data['姓名'];const updUsername = data['修改姓名'];const updAddress = data['修改地址'];// 在另一个表格中查找对应的点名const matchedRowIndex = this.tableData.findIndex(row => row.name == name);console.log(matchedRowIndex,'对应数据信息');// 如果找到了匹配的行,则进行数据回填if (matchedRowIndex !== -1) {this.tableData[matchedRowIndex].updName = updUsername;this.tableData[matchedRowIndex].updAddress = updAddress;}// 将数组赋值给另一个变量以触发Vue响应式更新this.tableData = [...this.tableData];console.log(this.tableData, '点名筛选');}},
5.完整代码
<template><div class="content-box"><div class="container"><el-uploadref="upload"action="/":on-change="onChangeFile":auto-upload="false":show-file-list="false"accept=".xls, .xlsx"class="dialog-upload"><el-button type="primary" icon="el-icon-folder-add">导入</el-button></el-upload><el-table :data="tableData" style="width: 100%"><el-table-column prop="date" label="日期" width="180"> </el-table-column><el-table-column prop="name" label="姓名" width="180"> </el-table-column><el-table-column prop="address" label="地址"> </el-table-column><el-table-column label="修改姓名"><template slot-scope="scope"><el-inputsize="small"v-model="scope.row.updName"oninput="if(value==0)value=null"placeholder="修改日期"type="text"></el-input></template></el-table-column><el-table-column label="修改地址"><template slot-scope="scope"><el-inputsize="small"v-model="scope.row.updAddress"oninput="if(value==0)value=null"placeholder="修改姓名"type="text"></el-input></template></el-table-column></el-table><el-button @click="saveData">保存</el-button></div></div>
</template><script>
import XLSX from "xlsx";
export default {data() {return {tableData: [{date: '2016-05-02',name: '王小虎',address: '上海市普陀区金沙江路 1518 弄',updAddress:null,updName:null},{date: '2016-05-04',name: '王小二',address: '上海市普陀区金沙江路 1517 弄',updAddress:null,updName:null},{date: '2016-05-01',name: '王小三',address: '上海市普陀区金沙江路 1519 弄',updAddress:null,updName:null},{date: '2016-05-03',name: '王小四',address: '上海市普陀区金沙江路 1516 弄',updAddress:null,updName:null}],fileData:""};},mounted() {},methods: {// 导入表格onChangeFile(file) {console.log(file);// 保存当前选择文件this.fileData = file;// 调用读取数据的方法this.readExcel();},// 读取数据readExcel() {const files = this.fileData;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 = e => {try {const data = e.target.result;const workbook = XLSX.read(data, {type: 'binary',cellDates: true,//设为true,将天数的时间戳转为时间格式});if (workbook.SheetNames.length >= 1) {this.$message.success('导入成功');}// 取第一张表const wsname = workbook.SheetNames[0];console.log(wsname,'e.target.result');// 生成json表格内容const ws = XLSX.utils.sheet_to_json(workbook.Sheets[wsname]);// this.$emit('getUploadData', ws);console.log(ws, '生成json表格内容');this.endPoint(ws);// 清空value值,不然页面为刷新时无法重复使用this.$refs.upload.value = '';} catch (e) {return false;}};fileReader.readAsBinaryString(files.raw);},endPoint(ws) {// 遍历从Excel导入的数据for (const data of ws) {const name = data['姓名'];const updUsername = data['修改姓名'];const updAddress = data['修改地址'];// 在另一个表格中查找对应的点名const matchedRowIndex = this.tableData.findIndex(row => row.name == name);console.log(matchedRowIndex,'对应数据信息');// 如果找到了匹配的行,则进行数据回填if (matchedRowIndex !== -1) {this.tableData[matchedRowIndex].updName = updUsername;this.tableData[matchedRowIndex].updAddress = updAddress;}// 将数组赋值给另一个变量以触发Vue响应式更新this.tableData = [...this.tableData];console.log(this.tableData, '点名筛选');}},saveData(){// 保存的话这边只用判断下修改姓名或者修改地址是否有值之后再把修改后的数据进行提交到后台就可以了}}
};
</script><style lang="scss" scoped></style>
文章到此结束,希望对你有所帮助~~
相关文章:
el-table使用xlsx实现导入文件编辑功能
需求:列表根据xlsx文件导入后,和列表进行对比,之后实现编辑功能 1.下载xlsx 我下的是之前的版本,新版不知道兼不兼容,这个包900多k npm install xlsx0.14.5 2.在需要使用表格导入的页面引入 import XLSX from &quo…...
Android9、11 有线网络开关设置
Android9、11 有线网络开关设置 Android9、11 有线网络开关设置_android 以太网开关_峥嵘life的博客-CSDN博客...
【MySQL】mysql问题 | [ERROR] unknown variable ‘column-statistics=0‘
一、说明 1、用到一个开源项目,dbBkTool[asurplus] 2、这个项目用于MySQL定时备份的 3、然后有个执行的时候,发下报错 [ERROR] unknown variable column-statistics0 二、解决 1、把MySQL客户端升级到8.0.19之后,就不报错了 2、column-stat…...
ElasticSearch 7.x
前言 elastic表示可伸缩,search表示查询。所以es的核心即为查询。通常情况下,我们的数据可以分为三类:结构化数据、非结构化数据、半结构化数据。 结构化数据:一般会用特定的结构来组织和管理数据,表现为二维表结构。…...
MVC乱码问题
RequestMapping(value "insert",produces {"text/html;charsetutf-8"}) //前端响应回去加响应头,解决乱码问题,这个还跟JSP响应头还不一样,这是响应的字符串,纯文本,那个前端的是out.Writer()对象ÿ…...
1004. 最大连续1的个数 III
题目描述: 主要思路: 刚看到这个问题首先想到的是二分答案,二分长度,然后利用滑动窗口判断是否可以达成。 class Solution { public:bool find(int x,vector<int> nums, int k){int now0;for(int i0,j0;i<nums.size();…...
【机器学习】西瓜书学习心得及课后习题参考答案—第3章线性模型
过了一遍第三章,大致理解了内容,认识了线性回归模型,对数几率回归模型,线性判别分析方法,以及多分类学习,其中有很多数学推理过程以参考他人现有思想为主,没有亲手去推。 术语学习 线性模型 l…...
面试官问我:一个 TCP 连接可以发多少个 HTTP 请求?我竟然回答不上来...
一道经典的面试题是从 URL 在浏览器被被输入到页面展现的过程中发生了什么,大多数回答都是说请求响应之后 DOM 怎么被构建,被绘制出来。但是你有没有想过,收到的 HTML 如果包含几十个图片标签,这些图片是以什么方式、什么顺序、建…...
树莓派Pico|RP2040|官方文档|在MS Windows上构建“Hello World”及环境配置
9.2. 在MS Windows上构建 在Microsoft Windows 10或Windows 11上安装工具链与其他平台有些不同。然而安装后,RP2040的构建代码基本类似。 警告 官方不支持在Windows 7或8上使用Raspberry Pi Pico,但在Windows 7或8上可以使其工作。 9.2.1. 安装工具…...
全球公链进展| 2023/7/31
一周速览 过去一周,明星项目动态如下: 第114次以太坊核心开发者共识会议:Devnet #8 最早下周推出 Layer2网络Shibarium跨链桥已上线公开测试 Optimism 推出「Law of Chains」v0.1 版本 Sui 通过 SIP#6 ,允许开发人员构建流动…...
Spring源码(三)Spring Bean生命周期
Bean的生命周期就是指:在Spring中,一个Bean是如何生成的,如何销毁的 Bean生命周期流程图 1、生成BeanDefinition Spring启动的时候会进行扫描,会先调用org.springframework.context.annotation.ClassPathScanningCandidateCompo…...
【iOS】Cydia Impactor 错误:file http.hpp; line:37; what: _assert(code == 200)
Cydia Impactor 报错,信息如下 file http.hpp; line:37; what: _assert(code 200)解决方案:Cydia Impactor 已被弃用,切换到sideloadly 即可,亲测成功,并且支持双重验证登录 csdn备份地址 HERE...
3ds MAX绘制茶壶
综合一下之前的内容画个茶壶 长方形,然后转化为可编辑多边形,添加节点并设置圆角,如下图 车削生成一个圆环,其实这一步也可以用一个圆柱体和两个圆角圆柱体解决 效果如下: 茶壶的底座绘制好了 接下来是茶壶的上半边 …...
【element-plus】 table表格每行圆角解决方案 element也通用
系列文章目录 【Vue3ViteTselement-plus】使用tsx实现左侧栏菜单无限层级封装 前言 我们在使用element-plus或element 的table时是否有时UI给到的UI效果是如下面这样的,但是我们翻遍了组件库的文档 调整了很多次样式 发现在 左右侧栏固定的时候 普通的方法是完全…...
【状态估计】基于UKF、AUKF的电力系统负荷存在突变时的三相状态估计研究(Matlab代码实现)
💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…...
webstorm格式化代码后单引号转成了双引号
webStorm格式化js代码时单引号变成了双引号,问题如下: 格式化前: 格式化后: 解决办法: window: File -> Settings -> Editor -> Code Style -> Javascript; mac: webStorm -> Preference …...
在langchain中使用带简短知识内容的prompt template
简介 langchain中有个比较有意思的prompt template叫做FewShotPromptTemplate。 他是这句话的简写:“Prompt template that contains few shot examples.” 什么意思呢?就是说在Prompt template带了几个比较简单的例子。然后把这些例子发送给LLM&…...
java医院电子病历系统源码:云端SaaS服务 前后端分离模式开发和部署
电子病历系统是什么? 电子病历是指医务人员在医疗活动过程中,使用医疗机构信息系统生成的文字、符号、图表、图形、数据、影像等数字化信息,并能实现存储、管理、传输和重现的医疗记录,是病历的一种记录形式。 医院通过电子病历以电子化方式记录患者就诊的信息&…...
【Golang 接口自动化01】使用标准库net/http发送Get请求
目录 发送Get请求 响应信息 拓展 资料获取方法 发送Get请求 使用Golang发送get请求很容易,我们还是使用http://httpbin.org作为服务端来进行演示。 package mainimport ("bytes""fmt""log""net/http""net/url&qu…...
Excel透视表与python实现
目录 一、Excel透视表 1、源数据 2、数据总分析 3、数据top分析 二、python实现 1、第一张表演示 2、第二张表演示 一、Excel透视表 1、源数据 1)四个类目,每类50条数据 2)数据内容 2、数据总分析 1)选择要分析的字段&…...
Docker 离线安装指南
参考文章 1、确认操作系统类型及内核版本 Docker依赖于Linux内核的一些特性,不同版本的Docker对内核版本有不同要求。例如,Docker 17.06及之后的版本通常需要Linux内核3.10及以上版本,Docker17.09及更高版本对应Linux内核4.9.x及更高版本。…...
JavaSec-RCE
简介 RCE(Remote Code Execution),可以分为:命令注入(Command Injection)、代码注入(Code Injection) 代码注入 1.漏洞场景:Groovy代码注入 Groovy是一种基于JVM的动态语言,语法简洁,支持闭包、动态类型和Java互操作性,…...
大数据零基础学习day1之环境准备和大数据初步理解
学习大数据会使用到多台Linux服务器。 一、环境准备 1、VMware 基于VMware构建Linux虚拟机 是大数据从业者或者IT从业者的必备技能之一也是成本低廉的方案 所以VMware虚拟机方案是必须要学习的。 (1)设置网关 打开VMware虚拟机,点击编辑…...
基于数字孪生的水厂可视化平台建设:架构与实践
分享大纲: 1、数字孪生水厂可视化平台建设背景 2、数字孪生水厂可视化平台建设架构 3、数字孪生水厂可视化平台建设成效 近几年,数字孪生水厂的建设开展的如火如荼。作为提升水厂管理效率、优化资源的调度手段,基于数字孪生的水厂可视化平台的…...
如何将联系人从 iPhone 转移到 Android
从 iPhone 换到 Android 手机时,你可能需要保留重要的数据,例如通讯录。好在,将通讯录从 iPhone 转移到 Android 手机非常简单,你可以从本文中学习 6 种可靠的方法,确保随时保持连接,不错过任何信息。 第 1…...
Rust 异步编程
Rust 异步编程 引言 Rust 是一种系统编程语言,以其高性能、安全性以及零成本抽象而著称。在多核处理器成为主流的今天,异步编程成为了一种提高应用性能、优化资源利用的有效手段。本文将深入探讨 Rust 异步编程的核心概念、常用库以及最佳实践。 异步编程基础 什么是异步…...
Springboot社区养老保险系统小程序
一、前言 随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱,社区养老保险系统小程序被用户普遍使用,为方…...
C++使用 new 来创建动态数组
问题: 不能使用变量定义数组大小 原因: 这是因为数组在内存中是连续存储的,编译器需要在编译阶段就确定数组的大小,以便正确地分配内存空间。如果允许使用变量来定义数组的大小,那么编译器就无法在编译时确定数组的大…...
return this;返回的是谁
一个审批系统的示例来演示责任链模式的实现。假设公司需要处理不同金额的采购申请,不同级别的经理有不同的审批权限: // 抽象处理者:审批者 abstract class Approver {protected Approver successor; // 下一个处理者// 设置下一个处理者pub…...
无人机侦测与反制技术的进展与应用
国家电网无人机侦测与反制技术的进展与应用 引言 随着无人机(无人驾驶飞行器,UAV)技术的快速发展,其在商业、娱乐和军事领域的广泛应用带来了新的安全挑战。特别是对于关键基础设施如电力系统,无人机的“黑飞”&…...
