别再说前端导出excel麻烦了(xlsx插件用法)

news2024/11/28 16:40:50

如果是为了解决el-teable的固定列导出问题,直接移动至文章末
本文使用的插件按照指令(第一个为一起按照,下面的是独立按照)

npm install --save xlsx file-saver
      或
npm install --save xlsx  
npm install --save file-saver

表格导出为excel文件

需求:导出element ui的表格,或者一些其它组件的表格

进行此操作需要简单了解以下知识(当前是setup语法糖的写法):
以下都是固定写法,不需要记住,知道有这个东西即可

<table id="table"></table>

<script setup>
	import { writeFile, write, read, utils } from "xlsx";
	//注意,当前的xlsx似乎已经变为按需导入内容,并不能直接导入xlsx
	//列如:import xlsx from "xlsx";这种会报错,并且在xlsx源码中(简单查阅,本人菜鸡一个)没有进行export default xlsx
	//因此现在必需采用按需导入的形式
	//xlsx用法
	const exportExcel = () => {
		//这个是最简单的导出方式,都是固定写法,writeFile第二个参数为导出的文件名,正常开发都是以时间戳进行命名
		const wb = utils.table_to_book(document.querySelector("#table"));
		writeFile(wb, "SheetJSVueHTML.xlsx");
	};
</script>

表格导出excel的实现(vue文件代码):


<template>
	<div>
		<el-table :data="list" class="tableList">
			<el-table-column prop="name" label="计划跟进人">
			</el-table-column>
			<el-table-column prop="age" label="年龄"> </el-table-column>
		</el-table>
		<button @click="daocu">导出</button>
	</div>
</template>
<script setup>
	import { writeFile, write, read, utils } from "xlsx";
	let list = [
		{ name: "tjq", age: 18 },
		{ name: "wyz", age: 18 },
	];
	const daocu = () => {
	 const wb = utils.table_to_book(document.querySelector(".list"));
    writeFile(wb, "SheetJSVueHTML.xlsx");
	};
</script>

<style scoped >
	.list {
		width: 200px;
		height: 200px;
	}
</style>

但是这边会遇到一个问题,在固定列导出时(用到element的 fixed="left"属性),会根据当前固定列的个数来重复导出表格数据,这对于我们来说当然是不行的,至于原因吗,自行百度即可(偷偷告诉你,在浏览器开发者模式下找到el-table__fixed-body-wrapper元素,并且删掉或修改内容,就能观察到一点门道了)

固定列导出问题解决方法

解决思路:

<script setup>
	import FileSaver from "file-saver";
	import { writeFile, write, read, utils } from "xlsx";
	const daocu = () => {
	//el-table__fixed这里仅仅是el-table的固定列类名
			let fixflg = document.querySelector(".el-table__fixed"); // 判断要导出的节点中是否有fixed的表格,如果有,转换excel时先将该dom移除,然后append回去,严谨一点的话,应该是document.querySelector(".tableList").querySelector(".el-table__fixed"),确保是在我们导出的表格中出现的固定列
			let wb;
			if (fixflg ) {
				wb = utils.table_to_book(
					document.querySelector(".tableList").removeChild(fixflg )
				);
				document.querySelector(".tableList").appendChild(fixflg );
			} else {
				wb = utils.table_to_book(document.querySelector(".tableList"));
			}
			//文章下列附加wirte方法的属性说明
			let wbout = write(wb, { bookType: "xlsx", bookSST: true, type: "array" });
			try {
			//FileSaver插件,详细的我也没具体看,FileSaver.saveAs我猜测,大概是把blob文件流转为对应类型的文件,并且触发下载功能
				FileSaver.saveAs(
					new Blob([wbout], { type: "application/octet-stream" }),
					"文件命名.xlsx"
				);
			} catch (e) {
				if (typeof console !== "undefined") console.log(e, wbout);
			}
			return wbout;

	};
</script>

write配置项属性
在这里插入图片描述
该图片来源地址

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Thingsboard+ChirpStack+LoRaWAN 网关+LoRa节点】通讯过程

这里写目录标题 4.通讯流程图:5.thingsboard 集成 chirpstack 上下行通讯5.1上行消息:5.2下行信息:5.3 上行数据分析5.4 下行数据分析6.thingsboard中设备管理实现:lora节点、网关、lora server、以及物联网平台四部分的数据通讯 实验结果: 描述:在thingsboard中修改某个…

SpringBoot【基础篇】---- 基础配置

SpringBoot【基础篇】---- 基础配置1. 属性配置2. 配置文件分类3. yaml 文件4. yaml 数据读取1. 读取单一数据2. 读取全部数据3. 读取对象数据yaml 文件中的数据引用1. 属性配置 SpringBoot 通过配置文件 application.properties 就可以修改默认的配置&#xff0c;那咱们就先找…

【K哥爬虫普法】字节前高管,离职后入侵今日头条数据库,是阴谋、还是利诱?

案情介绍 2016年至2017年间&#xff0c;张洪禹、宋某、侯明强作为被告单位上海晟品网络科技有限公司主管人员&#xff0c;在上海市共谋采用技术手段抓取北京字节跳动网络技术有限公司&#xff08;办公地点位于本市海淀区北三环西路43号中航广场&#xff09;服务器中存储的视频数…

23模式--代理模式

本篇主要聊一些23中模型中的代理模式&#xff1a; 看一下百度百科的解释&#xff1a; 代理模式的定义&#xff1a;为其他对象提供一种代理以控制对这个对象的访问。在某些情况下&#xff0c;一个对象不适合或者不能直接引用另一个对象&#xff0c;而代理对象可以在客户端和目…

Python连接MySQL实现增删改查详细教程

文章目录前言一、环境准备二、操作步骤1.安装Python依赖库2.创建测试数据表3. 编写操作数据库核心类4. 测试数据添加5. 测试数据删除6. 测试数据更新7. 测试数据查询三、完整代码总结前言 Python语言经过了很多年的发展&#xff0c;生态非常丰富&#xff0c;热度只增不减&…

微搭问搭001-如何清空表单的数据

韩老师&#xff0c;我点关闭按钮后&#xff0c;弹窗从新打开&#xff0c;里面的数据还在&#xff0c;这个可以从新打开清除不&#xff1f; 点关闭的时候清掉 就是清楚不掉也&#xff1f;咋清掉 清掉表单内容有属性可以做到&#xff1f; $page.widgets.id**.value “” 就可以实…

HCIP-5.4OSPF路由聚合、缺省路由

1、路由聚合 OSPF 是一种链路状态路由协议&#xff0c;因此 OSPF路由器不传输路由&#xff0c;而是传输链路状态信息。因此&#xff0c;OSPF 路由通过汇总 LSA 来控制链路状态信息的传输&#xff0c;从而减小 LSDB 数据库的大小&#xff0c;进而控制路由的汇总。 由于OSPF路由…

Object对象键值的输出循序到底如何排列的?

1.日常摸鱼看八股 今天又是复习八股文的一天&#xff0c;发现还是彻底懂得原理才好和面试官吹牛批呀。 接着来看看我chat大宝贝的回答&#xff1a; 在现代浏览器中&#xff0c;Object 对象的键值输出循序是比较稳定的&#xff0c;通常是按照如下顺序输出&#xff1a; 所有的数…

打怪升级之如何发送HEX进制的数据出去

Hex数据老大难 不少人都困扰于如何将电脑中读取到的string类型的数据变成整形发送出去。一半来说&#xff0c;不论你调用的通信方式是串口的还是网络的&#xff0c;亦或是PCIE的&#xff0c;其在电脑端的实际情况都是以系统API的形式呈现的。而系统API函数提供的接口&#xff…

项目实战典型案例23——-注册上nacos上的部分服务总是出现频繁掉线的情况

注册上nacos上的部分服务总是出现频繁掉线的情况一&#xff1a;背景介绍二&#xff1a;思路&方案解决问题过程涉及到的知识nacos服务注册和服务发现一&#xff1a;背景介绍 spring cloud项目通过nacos作为服务中心和配置中心&#xff0c;出现的问题是其中几个服务总是出现…

【电子通识】案例:从YS-CH341T USB转IIC和UART模块使用学习如何找资料

最近在调一个充电芯片&#xff0c;要用到IIC与充电芯片通信来读取和写入充电芯片寄存器&#xff0c;控制充电芯片的各种参数。从以前老员工那里捡到一个这样的模块&#xff0c;模块背面写了YS-CH341T。看着有IIC通信的样子&#xff0c;所以先在网上找一下资料。首先先在网上找到…

npm安装依赖包:405 Method Not Allowed...

运用npm安装依赖包时报错&#xff0c;错误如下。 解决思路&#xff1a; 关注到错误信息上写明了 Method Not Allowed&#xff0c;其后注明了 GET请求以及一个url&#xff0c;说明极有可能是不允许向这个路由发送GET请求&#xff1b; 在浏览器中尝试打开这个地址&#xff0c;结…

在分析了共50亿美元的加密融资之后,我们发现了这些

对加密市场嗅觉敏锐的玩家来说&#xff0c;市场中项目融资是不得不关注的选项&#xff0c;不少优质项目拿到了巨额融资之后&#xff0c;被大家所关注&#xff0c;在20-21年期间&#xff0c;行业内也出现了不少一级机构&#xff0c;布局早期项目&#xff0c;获取时代红利已经成为…

圆桌(满足客人空座需求,合理安排客人入座圆桌,准备最少的椅子)

CSDN周赛第30期第四题算法解析。 (本文获得CSDN质量评分【91】)【学习的细节是欢悦的历程】Python 官网&#xff1a;https://www.python.org/ Free&#xff1a;大咖免费“圣经”教程《 python 完全自学教程》&#xff0c;不仅仅是基础那么简单…… 地址&#xff1a;https://lq…

什么是业务运营?关键组成部分有哪些?

企业领导者使用收入运营和智能软件等技术来分析买家的不同接触点。这些见解决定了客户互动的成败&#xff0c;从而改善了业务运营&#xff0c;从而带来了成功。 什么是业务运营&#xff1f; 业务运营包括企业为保持盈利而执行的一系列日常任务。虽然这些任务可能因业务类型或行…

主辅助服务市场出清模型研究【旋转备用】(Matlab代码实现)

&#x1f468;‍&#x1f393;个人主页&#xff1a;研学社的博客&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5;&#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密…

【已解决】Python的坑:os.system()运行带有空格的长路径和双引号参数有bug

在Python代码里运行DOS命令&#xff0c;可以使用os库的os.system()函数。其用法很简单&#xff0c;需要注意的是os.system不会返回输出的结果赋予一个变量。今天我发现了一个bug&#xff1a;当DOS命令行带有双引号路径、双引号参数时&#xff0c;os.system()运行的结果总是显示…

带你认识什么是485通信

在现代工业控制系统中&#xff0c;常常需要实现分布式控制&#xff0c;而分布式控制需要实现不同设备之间的通信。其中&#xff0c;485通信协议是一种被广泛使用的通信协议之一。1. 介绍A. 485通信的定义485通信协议是一种串行通信协议&#xff0c;也被称为RS-485。它是由美国电…

300. 最长递增子序列——【Leetcode每日刷题】

300. 最长递增子序列 给你一个整数数组 nums &#xff0c;找到其中最长严格递增子序列的长度。 子序列 是由数组派生而来的序列&#xff0c;删除&#xff08;或不删除&#xff09;数组中的元素而不改变其余元素的顺序。例如&#xff0c;[3,6,2,7] 是数组 [0,3,1,6,2,2,7] 的子…

leetcode 1648. 销售价值减少的颜色球

1648. 销售价值减少的颜色球这道题不知为何总想记录下来&#xff0c;思路很简单&#xff0c;但是实现总是出错&#xff0c;这也许就是要记录的原因。再一个觉得题解写的比较难以理解&#xff0c;所以再细致一些解析。希望可以帮到实在搞不懂的同学 思路: 目的&#xff1a;我们…