当前位置: 首页 > news >正文

通过xlsx库解析读取excel表格内容

一、使用

有时项目中有需要前端自己将本地的excel文件导入并获取内部数据,最终处理数据(批量导入等场景)
这时我们就可以用到一个库(xlsx)来读取excel中的内容,然后通过其API能力将数据转换成json格式

具体使用如下:


const TABLE_HEADER_ENUM = {姓名: 'name',工号: 'workId',班次: 'shift',月份: 'month',日期: 'date',年份: 'year'};// 导入const fileImport = file => {// 通过FileReader对象读取文件const fileReader = new FileReader();fileReader.onload = event => {try {const { result } = event.target;// 以二进制流方式读取得到整份excel表格对象const workbook = XLSX.read(result, { type: 'binary' });// 存储获取到的数据const data = {};const tempData = [];// 遍历每张工作表进行读取(这里默认只读取第一张表)for (const sheet in workbook.Sheets) {if (Object.prototype.hasOwnProperty.call(workbook.Sheets, sheet)) {// 利用 sheet_to_json 方法将 excel 转成 json 数据data[sheet] = tempData.concat(XLSX.utils.sheet_to_json(workbook.Sheets[sheet]));}}const firstSheetData = data[Object.keys(workbook.Sheets)[0]];const importData = [];firstSheetData.forEach(item => {const itemObj = {};for (const attr in item) {const key = TABLE_HEADER_ENUM[attr] ? TABLE_HEADER_ENUM[attr] : attr; itemObj[key] = item[attr];}importData.push(itemObj);});// 这里最终处理完的importData就是一个对象数组} catch (e) {Message.error(e.message || '文件导入失败',);}};// 以二进制方式打开文件fileReader.readAsBinaryString(file[0].originFileObj);};

备注: 上文中的TABLE_HEADER_ENUM 是一个标题的中英文映射对象,因为我们excel表中标题经常是中文的,但接口中的传递字段基本都为英文,所以这个由你们实际excel表中的标题自定义

总结

这里我就简单记录下,有需要的小伙伴可以参考下

相关文章:

  • 现代化的轻量级Redis桌面客户端Tiny RDM
  • 加速 PyTorch 模型预测常见方法梳理
  • 《系统架构设计师教程(第2版)》第6章-据库设计基础知识-03-关系数据库设计
  • Springboot 使用【过滤器】实现在请求到达 Controller 之前修改请求体参数和在结果返回之前修改响应体
  • 14、Linux-Shell03:echo、printf和test命令
  • CSAPP Malloc lab
  • 【LLMs+小羊驼】23.03.Vicuna: 类似GPT4的开源聊天机器人( 90%* ChatGPT Quality)
  • Python (用户登录、身份归属地查询添加异常处理、绘制多角星、电影信息提取)
  • Git之版本回退
  • 云原生技术实践:Kubernetes集群的部署与运维
  • Unity自带的WebSocket使用说明
  • SQLiteC/C++接口详细介绍之sqlite3类(五)
  • 25.网络游戏逆向分析与漏洞攻防-网络通信数据包分析工具-利用全新的通信结构传递消息
  • 7. Linux进程环境
  • 【MySQL 系列】MySQL 函数篇
  • 002-读书笔记-JavaScript高级程序设计 在HTML中使用JavaScript
  • centos安装java运行环境jdk+tomcat
  • Create React App 使用
  • go append函数以及写入
  • Java超时控制的实现
  • jdbc就是这么简单
  • js ES6 求数组的交集,并集,还有差集
  • mysql innodb 索引使用指南
  • rc-form之最单纯情况
  • SpiderData 2019年2月25日 DApp数据排行榜
  • tab.js分享及浏览器兼容性问题汇总
  • 后端_MYSQL
  • 基于游标的分页接口实现
  • 那些被忽略的 JavaScript 数组方法细节
  • 前端工程化(Gulp、Webpack)-webpack
  • 如何优雅的使用vue+Dcloud(Hbuild)开发混合app
  • 使用权重正则化较少模型过拟合
  • 腾讯大梁:DevOps最后一棒,有效构建海量运营的持续反馈能力
  • 为什么要用IPython/Jupyter?
  • #!/usr/bin/python与#!/usr/bin/env python的区别
  • #git 撤消对文件的更改
  • #LLM入门|Prompt#1.7_文本拓展_Expanding
  • #免费 苹果M系芯片Macbook电脑MacOS使用Bash脚本写入(读写)NTFS硬盘教程
  • #中的引用型是什么意识_Java中四种引用有什么区别以及应用场景
  • #周末课堂# 【Linux + JVM + Mysql高级性能优化班】(火热报名中~~~)
  • (01)ORB-SLAM2源码无死角解析-(66) BA优化(g2o)→闭环线程:Optimizer::GlobalBundleAdjustemnt→全局优化
  • (1)(1.8) MSP(MultiWii 串行协议)(4.1 版)
  • (14)目标检测_SSD训练代码基于pytorch搭建代码
  • (八)Docker网络跨主机通讯vxlan和vlan
  • (亲测成功)在centos7.5上安装kvm,通过VNC远程连接并创建多台ubuntu虚拟机(ubuntu server版本)...
  • (十二)devops持续集成开发——jenkins的全局工具配置之sonar qube环境安装及配置
  • (转)VC++中ondraw在什么时候调用的
  • .NET Core MongoDB数据仓储和工作单元模式封装
  • .NET Core、DNX、DNU、DNVM、MVC6学习资料
  • .NET Core6.0 MVC+layui+SqlSugar 简单增删改查
  • .NET Core实战项目之CMS 第一章 入门篇-开篇及总体规划
  • .NET 将多个程序集合并成单一程序集的 4+3 种方法
  • .NET 解决重复提交问题
  • .net分布式压力测试工具(Beetle.DT)
  • @基于大模型的旅游路线推荐方案