前端实现导入Excel进行数据展示、导出

ops/2024/10/19 5:27:06/

需求

一个 excel 文档 需要对文档里面的数据进行筛选拆分重组 由于数据量巨大 后端又抽不出来手  于是使用纯前端解决方案

解决思路

前端导入excel 

excel 的数据解析为 json 格式 

对数据进行相应操作后

重新导出为新 excel

虽笨但有效

第一步 导入excel

该方案需引入以下第三方库

xlsx.core.min.js

原生写法

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title><style></style>
</head><body><span>excel导入:</span><input type="file" onchange="importf(this)" /><p id="excelContent"></p>
</body><script src="./js/jQuery3.7.1min.js"></script>
<script src="https://cdn.bootcss.com/xlsx/0.11.5/xlsx.core.min.js"></script>
<script src="./js/dist_jquery.table2excel.min.js"></script>
<script>// 导入let data = null // 总数据var wb;//读取var rABS = false;//开始导入function importf(obj) {if (!obj.files) {return;}var f = obj.files[0];var reader = new FileReader();reader.onload = function (e) {var data = e.target.result;if (rABS) {wb = XLSX.read(btoa(fixdata(data)), {//手动转化type: 'base64'});} else {wb = XLSX.read(data, {type: 'binary'});}/*** wb.SheetNames[0]是获取Sheets中第一个Sheet的名字* wb.Sheets[Sheet名]获取第一个Sheet的数据*/var excelJson = XLSX.utils.sheet_to_json(wb.Sheets[wb.SheetNames[0]]);console.log(excelJson);document.getElementById("excelContent").innerHTML = JSON.stringify(excelJson);};if (rABS) {reader.readAsArrayBuffer(f);} else {reader.readAsBinaryString(f);}}//文件流转BinaryStringfunction fixdata(data) {var o = "",l = 0,w = 10240;for (; l < data.byteLength / w; ++l) o += String.fromCharCode.apply(null, new Uint8Array(data.slice(l * w, l * w +w)));o += String.fromCharCode.apply(null, new Uint8Array(data.slice(l * w)));return o;}</script></html>

Vue写法

须在代码中稍作修改

<input type="file" @change="importf" />data() {wb: null,rABS: false,
}methods:{// 导入excelimportf(event) {const file = event.target.files[0];const reader = new FileReader();reader.onload = (e) => {const data = e.target.result;if (this.rABS) {this.wb = XLSX.read(btoa(fixdata(data)), {type: 'base64'});} else {this.wb = XLSX.read(data, {type: 'binary'});}const excelJson = XLSX.utils.sheet_to_json(this.wb.Sheets[this.wb.SheetNames[0]]);this.getTableData(excelJson)};if (this.rABS) {reader.readAsArrayBuffer(file);} else {reader.readAsBinaryString(file);}},//文件流转BinaryStringfixdata(data) {let o = "",l = 0,w = 10240;for (; l < data.byteLength / w; ++l) o += String.fromCharCode.apply(null, new Uint8Array(data.slice(l * w, l * w + w)));o += String.fromCharCode.apply(null, new Uint8Array(data.slice(l * w)));return o;}
}

实现结果

第二步 修改导入进去的excel数据

显而易见 以原生写法为例  变量 excelJson 即为excel中导入出的数据

这里把数据赋值给了excelJson 变量

在此 可以对 excelJson 中的数据进行修改

!!

需要注意的是  如果仅仅是把 excel 中的数据导入到页面中进行展示

那看到这里就结束了   但如果需要导出  且是纯前端实现导出  看第三步

第三步 导出

前端实现表格导出  可以参考我以前的文章

前端JS导出Excel表格 可筛选列 table2excel_js-table2excel-CSDN博客

如果完全看完以上文章 我想你会明白要怎么做了

首先 excel 导入进来的数据处理后 需要渲染为 table 原生表格 形式  然后按照以上文章中的table2excel 该第三方库进行导出

非常easy 

导出需要依赖 jquery  建议 vue 项目为后端导出 或寻找适合vue的table第三方库进行导出

原生项目的话 引入 jquery 库后  点击导出时 可以生成一个隐藏的 table dom 进行渲染  导出后对该 dom 进行删除 即可实现无感导出


http://www.ppmy.cn/ops/24390.html

相关文章

Docker(Docker的安装和介绍,常用命令,镜像制作,服务编排,docker私服)

目录 一、简介 1. docker简介 1 什么是docker 2 容器和虚拟机对比 2. 安装docker 1 docker相关概念 2 安装docker 1 安装docker 2 设置注册中心(仓库) 3. 小结 二、常用命令【重点】 1. 服务管理 2. 镜像管理 1 语法说明 2 使用练习 3. 容器管理 1 容器介绍 2…

c++判断一个数是否是2或3的n次方

判断一个数是否是2的n次方&#xff1a; bool fun(int n){return n>0&&(n&(-n))n; } 判断一个数是否是3的n次方&#xff1a; //方法1 如果这个数能被3整除&#xff0c;且最后是1&#xff0c;则一定是3的n次方 bool fun(int n){while(n&&n%30){n/3;}re…

5G工业数采网关的功能有哪些?-天拓四方

随着5G技术的不断发展&#xff0c;其在工业领域的应用日益广泛。5G工业数采网关作为连接工业设备与网络的重要枢纽&#xff0c;具备多种功能&#xff0c;为工业自动化、智能制造和智慧工厂提供了强大的支持。本文将详细解析5G工业数采网关的功能&#xff0c;并探讨其在工业领域…

UNIXRTC

这段代码是将写入的数据显示在OLED屏幕上&#xff0c;并进行读取。起初上电的时候可以发现W&#xff1a;后面为空&#xff0c;R:为0000 0000这是因为还没开始写入。按下按键后发现变换的数据是1235 5679&#xff0c;与我们写入的1234 5678不同&#xff0c;这是因为写入之前执行…

django序列化

path(get2/, views.HelloApiView().get), path(get2/, views.HelloApiView.as_view()) models class Student(models.Model):name models.CharField(max_length100,verbose_name姓名)age models.IntegerField(verbose_name年龄)sex models.BooleanField(default1,verbose_n…

【Jenkins】持续集成与交付 (九):Maven安装和配置、以及构建项目

🟣【Jenkins】持续集成与交付 (九):Maven安装和配置、以及构建项目 一、Maven简介二、持续集成环境安装Maven2.1 Maven软件包上传2.2 配置环境变量2.3 Jenkins配置关联JDK和Maven2.4 添加Jenkins全局变量2.5 修改Maven的settings.xml2.6 全局工具配置--设置自己的setting.…

Rtthread scons STM32外设 Kconfig文件配置

GPIO配置 config BSP_USING_GPIObool "Enable GPIO"select RT_USING_PINdefault y#UART配置 menuconfig BSP_USING_UARTbool "Enable UART"default yselect RT_USING_SERIALif BSP_USING_UARTconfig BSP_USING_UART1bool "Enable UART1"default…

2分钟自己写小游戏:使用js和css编写石头剪刀布小游戏、扫雷小游戏、五子棋小游戏。新手老手毕业论文都能用。

系列文章目录 【复制就能用1】2分钟玩转轮播图,unslider的详细用法 【复制就能用2】css实现转动的大风车&#xff0c;效果很不错。 【复制就能用3】2分钟自己写小游戏&#xff1a;剪刀石头布小游戏、扫雷游戏、五子棋小游戏 【复制就能用4】2024最新智慧医疗智慧医院大数据…