【纯前端实现xlsx的解析并处理成table需要的格式】

devtools/2024/10/11 7:09:38/

概要

xlsx纯前端导入并解析成json

整体架构流程

xlsx导入并解析成json,并与table中的数据进行对比,根据唯一标识更新对应数据项

技术名词解释

技术细节

  1. 首先下载xlsx依赖
javascript">npm install xlsx --save
  1. 然后在需要导入xlsx的地方

在这里插入图片描述
这里主要用input弹出选择文件框 这里的导入按钮自己可以用自己的按钮
需要初始化的数据

javascript">data(){return{tableData:[]}
}
  1. 这个方法很重要,展示选择文件框
javascript">triggerFileInput(){this.$refs.fileInput.click();
}
  1. 然后开始解析xlsx内容
javascript">handleFileUpload(event) {const file = event.target.files[0];if (file) {const reader = new FileReader();reader.onload = (e) => {const data = new Uint8Array(e.target.result);const workbook = XLSX.read(data, { type: 'array' });const firstSheetName = workbook.SheetNames[0];const worksheet = workbook.Sheets[firstSheetName];const jsonData = XLSX.utils.sheet_to_json(worksheet, { header: 1 });// 处理数据this.processData(jsonData);};reader.readAsArrayBuffer(file);}},

jsonData格式是这样的

javascript">[["变量名", "描述", "计算方式"],["abcd", "婚姻状况", "async"],["abcde", "婚姻状况", "sync"]
]
  1. 然后就是最关键的一步,把这个数据处理成 [{}] ,标准的数组对象格式,我要处理的数据是个表格的数据,大致长这样,这也是tableData的数据
javascript">tableData:[{"vvv": 333,"varName": "abcd","sort": "内部","nnn": null,"vvv": null,"ccc": null,"aaa": "derivative","dataType": "Integer","version": 1,"description": "测试","templateld": 5454,"templateName": "mmm","dataSource": "报告","explanation": "gg","status": 1,"createDate": "2024-09-13 17:16:46","history ld": 3232,"calculation": "sync"}
]
  1. “变量名”, “描述”, “计算方式”,分别对应上面的varName,description,description字段
    接下来就是处理方法了
javascript">processData(jsonData) {// 取得 Excel 数据(跳过标题行)const excelData = jsonData.slice(1);// 将 Excel 数据转换为对象数组const updatedData = excelData.map(row => {return {varName: row[0] ? row[0].replace(/\n/g, '') : '', // 去除换行符 description: row[1] || '', // 如果 row[1] 不存在,返回空字符串calculation: row[2] || '' // 如果 row[2] 不存在,返回空字符串};});// 更新 tableDatathis.tableData.forEach(baseItem => {const matchedItem = updatedData.find(item => item.varName === baseItem.varName);if (matchedItem) {baseItem.description = matchedItem.description;baseItem.calculation = matchedItem.calculation;}});
},,

注* varName: row[0] ? row[0].replace(/\n/g, '') : '', // 去除换行符

这里很关键,因为直接解析xlsx,处理成的数据带换行符/n,所有刚开始怎么都替换数据不成功,因为数据带/n

  1. 这里的数据就已经替换成功了,这里其实是批量修改数据,因为是根据varName进行匹配的,如果有不匹配也需要导入的需求自己修改一下逻辑就行。

小结

前端实现xlsx的解析并处理成标准table需要的格式


http://www.ppmy.cn/devtools/124046.html

相关文章

【SQL调优指南--附带实例】

以下是50个SQL调优的例子,每个例子都附带了可执行的SQL语句: 删除重复记录: DELETE FROM table_name WHERE id NOT IN (SELECT MIN(id) FROM table_name GROUP BY col1, col2);使用索引来加速查询: ALTER TABLE table_name ADD…

网络资源模板--Android Studio 实现简易计算器App

目录 一、项目演示 二、项目测试环境 三、项目详情 四、完整的项目源码 一、项目演示 网络资源模板--基于Android studio 实现的简易计算器 二、项目测试环境 三、项目详情 动态绑定按钮: 使用循环遍历 buttons 数组,根据动态生成的按钮 ID (btn_0, …

java连接mysql查询数据(基础版,无框架)

依赖引入: <dependency><groupId>mysql</groupId><artifactId>mysql-connector-java

鸿蒙next开启地图服务

一般手机软件有的都会有开启地图功能&#xff0c;这里说一下怎么开启地图服务 1、 首先你需要配置一些东西&#xff0c;在华为的agc平台上&#xff0c;下边链接就是详细的教程 https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/map-config-agc-V5 我说一下你…

ubutun安装ffmpeg

安装依赖 sudo apt-get install yasm sudo apt-get install libsdl1.2-dev sudo apt-get install libsdl2-dev 下载安装 tar -zxvf filename.gz ./configure --enable-shared --prefix/usr/local/ffmpeg make -j4 sudo make install 添加路径 路径/usr/local/ffmpeg…

数据交换的金钟罩:合理利用安全数据交换系统,确保信息安全

政府单位为了保护网络不受外部威胁和内部误操作的影响&#xff0c;通常会进行网络隔离&#xff0c;隔离成内网和外网。安全数据交换系统是专门设计用于在不同的网络环境&#xff08;如内部不同网络&#xff0c;内部网络和外部网络&#xff09;之间安全传输数据的解决方案。 使用…

mac端口被占用解决方法

通常情况下&#xff1a;lsof -i:#{port} 就可以找到对应的进程的pid kill -9 #{pid} 直接终结 kill -15 #{pid} 等待正在进行的任务完成再终结 本次纪要 问题出现&#xff1a; 当我想要使用docker启动mysql的时候报错&#xff1a;Error response from daemon: Ports are not…

Effective C++笔记之二十四:stack overflow

溢出&#xff08;Stack Overflow&#xff09;是指程序运行过程中&#xff0c;栈空间被耗尽&#xff0c;导致无法继续分配栈内存的错误。C程序中&#xff0c;栈用于存储函数调用的局部变量、返回地址、函数参数等。当栈空间耗尽时&#xff0c;会引发栈溢出&#xff0c;通常导致程…