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

24 篇文章 0 订阅
23 篇文章 0 订阅

如果是为了解决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配置项属性
在这里插入图片描述
该图片来源地址

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
以下是介绍两个常用的前端插件来实现HTML表格Excel导出的方法: 1. TableExport.js插件 TableExport.js是一个轻量级的jQuery插件,可以将HTML表格导出Excel、CSV、TXT和PDF格式。使用该插件需要引入jQuery库和TableExport.js文件。 ```html <!-- 引入jQuery库 --> <script src="https://cdn.bootcss.com/jquery/3.4.1/jquery.min.js"></script> <!-- 引入TableExport.js文件 --> <script src="https://cdn.bootcss.com/TableExport/5.2.0/js/tableexport.min.js"></script> ``` 然后在需要导出的表格上添加`data-tableexport`属性,并设置导出格式和文件名: ```html <table id="myTable"> <thead> <tr> <th>Name</th> <th>Age</th> <th>Gender</th> </tr> </thead> <tbody> <tr> <td>John</td> <td>25</td> <td>Male</td> </tr> <tr> <td>Jane</td> <td>30</td> <td>Female</td> </tr> </tbody> </table> <button onclick="exportTable()">Export Table</button> <script> function exportTable() { $('#myTable').tableExport({ type: 'xlsx', // 导出Excel格式 fileName: 'myTable', // 导出文件名 }); } </script> ``` 2. SheetJS.js插件 SheetJS.js是一个纯JavaScript库,可以将HTML表格导出Excel、CSV和JSON格式。使用该插件需要引入SheetJS.js文件。 ```html <!-- 引入SheetJS.js文件 --> <script src="https://cdn.bootcss.com/xlsx/0.16.8/xlsx.full.min.js"></script> ``` 然后在需要导出的表格上添加`id`属性: ```html <table id="myTable"> <thead> <tr> <th>Name</th> <th>Age</th> <th>Gender</th> </tr> </thead> <tbody> <tr> <td>John</td> <td>25</td> <td>Male</td> </tr> <tr> <td>Jane</td> <td>30</td> <td>Female</td> </tr> </tbody> </table> <button onclick="exportTable()">Export Table</button> <script> function exportTable() { /* 获取表格数据 */ var wb = XLSX.utils.table_to_book(document.getElementById('myTable'), {sheet:"Sheet1"}); /* 导出Excel文件 */ XLSX.writeFile(wb, 'myTable.xlsx'); } </script> ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值