纯前端实现了Excel文件转JSON和JSON转Excel下载

需求前提:

  1. 上传Excel文件,并将Excel文件的内容拿出来转换为JSON
  2. 本地定义JSON数据,然后将它封装后转换为Excel文件下载

安装依赖

这两个功能是借助xlsx包实现的,所以需要先安装xlsx包:

npm install xlxs

依赖引用

import * as XLSX from 'xlsx'

Excel文件上传并转JSON

  1. 实现上传功能
<el-uploadref="fileUpload"v-model:file-list="form.fileList"class="upload-demo"action="#"multiple:limit="1"dragaccept=".xlsx,.xls":auto-upload="false"
><el-icon class="el-icon--upload"><upload-filled /></el-icon><div class="el-upload__text">拖拽文件到此处 or <em>点击上传</em></div><template #tip><div class="el-upload__tip">支持格式:.xlxs 或 .xls,点击此处 <el-link type="primary" :underline="false" @click="downloadExcelTemplate">下载</el-link> 文件模板</div></template>
</el-upload>

说明:

  • 文件使用上传
  • 上述的downloadExcelTemplate方法中,编写JSON转换Excel下载的方法
  1. 编写读取文件的方法
// 上传文件
const readFile = (file) => {return new Promise(resolve => {let reader = new FileReader()reader.readAsBinaryString(file)reader.onload = ev => {resolve((ev as any).target.result)}})
}
  1. 文件上传并转JSON
multiUploadFormRef.value.validate(async(valid) => {if(valid) {// 调用readFile方法let dataBinary = await readFile(form.fileList[0].raw)let workBook = XLSX.read(dataBinary, { type: 'binary', cellDates: true })let workSheet = workBook.Sheets[workBook.SheetNames[0]]// 读取到的Excel的内容,当前已经为JSON格式了let data = XLSX.utils.sheet_to_json(workSheet)console.log('读取到的excel的内容',data)// do something...}
})

JSON转Excel并下载

在上述定义的downloadExcelTemplate中编写下载方法:

// JSON转Excel并下载
const downloadExcelTemplate = () => {// 定义文件名称const filename = '模板下载.xlsx'// 定义Excel内容,这是一个Arrary[]格式的数组,数组的第一个元素为表头,从第二个元素开始,是文件的内容const data = [['order','tag','source','resource','request','response','appName','comment','model','imgUrl','accountCode','uid','externalTraceId','internalTraceId','deviceId','knowledgeBaseIds','requestTime']]// 设置Excel表格的sheet名称const ws_name = 'bad_case_feedback'// 创建新的表格const wb = XLSX.utils.book_new()// 将数据写入定义的sheet中const ws = XLSX.utils.aoa_to_sheet(data)// 上sheet添加到表格中XLSX.utils.book_append_sheet(wb, ws, ws_name)// 写入文件XLSX.writeFile(wb, filename)
}

实现效果

  1. Excel转JSON

在这里插入图片描述

  1. JSON转Excel下载

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/244934.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【GitHub项目推荐--一款美观的开源社区系统】【转载】

推荐一款开源社区系统&#xff0c;该系统基于主流的 Java Web 技术栈&#xff0c;如果你是一名 Java 新手掌握了基本 JavaEE 框架知识&#xff0c;可以拿本项目作为练手项目。 开源社区系统功能还算完善包含发布帖子、发布评论、私信、系统通知、点赞、关注、搜索、用户设置、…

Android14源码剖析:MediaPlayer与MediaPlayerService区别?(五十四)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 优质专栏:多媒体系统工程师系列【原创干货持续更新中……】🚀 人生格言: 人生从来没有捷径,只…

opencv#34 边缘检测(二)

Laplacian(拉普拉斯)算子 前面介绍的Sobel算子和Scharr算子存在的问题: 1.要分别计算两个方向&#xff08;x,y)的边缘&#xff0c;之后将两方向的边缘进行叠加。 2.边缘与方向相关性较大。当我们通过Sobel算子提取x方向检测时&#xff0c;它所能够检测到的边缘都是一个沿着y…

JVM工作原理与实战(二十一):内存管理

专栏导航 JVM工作原理与实战 RabbitMQ入门指南 从零开始了解大数据 目录 专栏导航 前言 一、不同语言的内存管理 1.C/C的内存管理 2.Java的内存管理 二、垃圾回收的对比 1.自动垃圾回收与手动垃圾回收的对比 2.优点与缺点 总结 前言 JVM作为Java程序的运行环境&#…

Spring Boot 3.2.2整合MyBatis-Plus 3.5.5依赖不兼容问题

问题演示 导依赖 当你启动项目就会 抛出该异常 java.lang.IllegalArgumentException: Invalid value type for attribute factoryBeanObjectType: java.lang.String 问题原因 mybatis-plus 中 mybatis 的整合包版本不够导致的 解决方案 排除掉mybatis-plus 中 mybatis 的整合…

51-15 视频理解串讲—TimeSformer论文精读

今天读的论文题目是Is Space-Time Attention All You Need for Video Understanding? Facebook AI提出了一种称为TimeSformer视频理解的新架构&#xff0c;这个架构完全基于transformer&#xff0c;不使用卷积层。它通过分别对视频的时间和空间维度应用自注意力机制&#xff…

【Flink-1.17-教程】-【四】Flink DataStream API(1)源算子(Source)

【Flink-1.17-教程】-【四】Flink DataStream API&#xff08;1&#xff09;源算子&#xff08;Source&#xff09; 1&#xff09;执行环境&#xff08;Execution Environment&#xff09;1.1.创建执行环境1.2.执行模式&#xff08;Execution Mode&#xff09;1.3.触发程序执行…

智能家居20年,从「动手」到「用脑」

【潮汐商业评论/原创】 正在装修新家的Carro最近陷入了纠结之中&#xff0c;“还没想好要怎么装一套完整的智能家居&#xff0c;家里的基装就已经开始了。” 事实上&#xff0c;Carro对智能家居也不了解&#xff0c;并不知道该如何下手&#xff0c;心想“要是能一次性设计好就…

Mysql复习1--理论基础+操作实践--更新中

Mysql 索引索引的分类索引失效sql优化 删除数据库数据恢复 索引InnoDB引擎MyISAM引擎Memory引擎Btree索引支持支持支持hash索引不支持不支持支持R-tree索引不支持支持不支持Full-text索引5.6版本以后支持支持不支持 索引 解释说明: 索引指的是帮助mysql高效的获取数据的结构叫…

list下

文章目录 注意&#xff1a;const迭代器怎么写&#xff1f;运用场合&#xff1f; inserterase析构函数赋值和拷贝构造区别&#xff1f;拷贝构造不能写那个swap,为什么&#xff1f;拷贝构造代码 面试问题什么是迭代器失效&#xff1f;vector、list的区别&#xff1f; 完整代码 注…

4 课程分类查询

4 课程分类查询 4.1 需求分析 下边根据内容管理模块的业务流程&#xff0c;下一步要实现新增课程&#xff0c;在新增课程界面&#xff0c;有三处信息需要选择&#xff0c;如下图&#xff1a; 课程等级、课程类型来源于数据字典表&#xff0c;此部分的信息前端已从系统管理服…

【jetson笔记】vscode远程调试

vscode安装插件 vscode安装远程插件Remote-SSH 安装完毕点击左侧远程资源管理器 打开SSH配置文件 添加如下内容&#xff0c;Hostname为jetson IP&#xff0c;User为登录用户名需替换为自己的 Host aliasHostName 192.168.219.57User jetson配置好点击连接&#xff0c;控制台输…

66.Spring是如何整合MyBatis将Mapper接口注册为Bean的原理?

原理 首先MyBatis的Mapper接口核心是JDK动态代理 Spring会排除接口&#xff0c;无法注册到IOC容器中 MyBatis 实现了BeanDefinitionRegistryPostProcessor 可以动态注册BeanDefinition 需要自定义扫描器&#xff08;继承Spring内部扫描器ClassPathBeanDefinitionScanner ) 重…

【计算机网络】UDP协议与TCP协议

文章目录 一、端口号1.什么是端口号2.端口号范围划分3.认识知名端口号(Well-Know Port Number)4.netstat5.pidof 二、UDP协议1.UDP协议端格式2.UDP的特点3.面向数据报4.UDP的缓冲区5.UDP使用注意事项6.基于UDP的应用层协议 三、TCP协议1.TCP协议段格式1.1理解封装解包和分用1.2…

【数学建模】插值与拟合

文章目录 插值插值方法用Python解决插值问题 拟合最小二乘拟合数据拟合的Python实现 适用情况 处理由试验、测量得到的大量数据或一些过于复杂而不便于计算的函数表达式时&#xff0c;构造一个简单函数作为要考察数据或复杂函数的近似 定义 给定一组数据&#xff0c;需要确定满…

伸向Markdown的黑手,知名博客平台曝出LFI漏洞

如果你至今依然在坚持写博客&#xff0c;在知乎或其他自媒体平台上发表文章&#xff0c;那你应该对Markdown很熟悉了。这是一种轻量级标记语言&#xff0c;借此可以用纯文本格式编写文档&#xff0c;并用简单的标记设置文档格式&#xff0c;随后即可轻松转换为具备精美排版的内…

安装宝塔面板后k8s所在节点pod无法正常工作解决方法,kubernetes k8s 与宝塔面板冲突解决方法

在实际项目过程中我们使用了k8s 在生产环境中运行管理服务。 但是对服务器的状态管理我们使用了宝塔面板进行 K8s 版本1.2.8 宝塔面板 版本 8.05 操作步骤是这样的。 1.完成1.2.8 k8s的节点安装&#xff0c;并正常运行服务。 过程略 2.安装宝塔面板 ​ yum install -y …

vue中图片不显示问题 - vue中静态资源加载

文章目录 vue中图片不显示问题静态资源URL 转换规则webpack 静态资源处理 图片不显示问题问题描述解决办法1&#xff1a;使用require引入require is not defined 解决办法2&#xff1a;使用import引入解决办法3&#xff1a;将图片放进公共文件夹static或public vue中图片不显示…

PHP中一些特征函数导致的漏洞总结

第一部分&#xff1a; 特征函数 接触到几个常用的函数&#xff1a; \\ \\\ md5 intval strpos in_array preg_match str_replacephp用这些函数实现过滤一些代码&#xff0c;漏洞可能有一些特性&#xff0c;利用这些特征代码进行对比&#xff1b;账号密码对比&#xff1b;强制检…

ChatGPT无法胜任的五种编程任务

我喜欢把ChatGPT看作是StackOverflow的智能版&#xff0c;它大有帮助&#xff0c;但短期内不会取代专业人士。作为一名前数据科学家&#xff0c;ChatGPT问世后&#xff0c;我花了大量时间来试用它。其编程能力确实给我留下了深刻的印象。它可以从零开始生成非常有用的代码&…