vue3表格按需导出excel

这篇博客主要介绍了如何在项目中实现从服务端数据到Excel文件的批量导出,包括数据筛选、排序以及隐藏特定字段。通过引入xlsx库,定义了一个名为`exportExcel`的方法,该方法接收服务端数据、文件名、标题对象和工作表名称作为参数,然后进行数据处理和格式化,最后生成Excel文件。在实际应用中,可以在页面上触发导出操作,调用此方法完成数据导出功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

效果图展示

在这里插入图片描述

不要英文字段 excel内容展示

在这里插入图片描述

隐藏英文字段

在这里插入图片描述

首先安装xlsx依赖

npm install xlsx --save
// "export ‘default’ (imported as ‘XLSX’) was not found in ‘xlsx’
//当出现类似这样的报错,你可以试一下这个
npm install xlsx@0.16.0 --save

项目中引入

import XLSX from "xlsx";

项目中实现

1、在项目util.ts 文件 封装一下方法
import XLSX from "xlsx";
/*
    * @description:
    * @param {Object} json 服务端发过来的数据
    * @param {String} name 导出Excel文件名字
		* @param titleObj 一个存放标题的字段(请根据展示顺序编写写) 格式如下  
			titleObj={
				云飒ID:'ysId',
				中文名称:字段名
			}
    * @param {String} sheetName 导出sheetName名字
*/
export function exportExcel(json: any, name: string, titleObj: any, sheetName: string) {
	// 获取 所需要的中英文字段名
	let filterTitle: any = getObjVal(titleObj, "value"); // 英文字段
	let titleArr: any = getObjVal(titleObj, "key"); // 中文字段

	let data = []; // 最终存放的数据
	let tempData: any[] = []; // 筛选出的乱序数据
	let sortData = [] as any; // 排序后的数据
	// 筛选出符合条件的服务端数据
	for (const key1 in json) {
		if (json.hasOwnProperty(key1)) {
			const element = json[key1];
			let rowArr = [];
			for (const key2 in element) {
				if (element.hasOwnProperty(key2) && filterTitle.includes(key2)) {
					rowArr.push({
						label: key2,
						value: element[key2]
					});
				}
			}
			tempData.push(rowArr);
		}
	}
	// 对符合条件数据 按照titleObj 进行排序
	tempData.map((item: any) => {
		let arr = [] as any;
		filterTitle.map((item1: any) => {
			item.map((item2: any) => {
				if (item1 === item2.label) {
					arr.push(item2.value);
				}
			});
		});
		sortData.push(arr);
	});

	// //  隐藏英文字段 数据组装
	// data = [filterTitle, titleArr, ...sortData];
	// console.log("data", data);
	// const ws = XLSX.utils.aoa_to_sheet(data);
	// const wb = XLSX.utils.book_new();
	// 此处隐藏英文字段表头
	// let wsrows = [{ hidden: true }];
	// ws["!rows"] = wsrows; // ws - worksheet
	// XLSX.utils.book_append_sheet(wb, ws, sheetName);
	/* generate file and send to client */
	// XLSX.writeFile(wb, name + ".xlsx");


	// 不要英文字段
	// 数据组装
	data = [titleArr, ...sortData];
	console.log("data", data);
	const ws = XLSX.utils.aoa_to_sheet(data);
	const wb = XLSX.utils.book_new();
	XLSX.utils.book_append_sheet(wb, ws, sheetName);
	XLSX.writeFile(wb, name + ".xlsx");
}

/*
    * @description: 分别获取对象的键 或 值
    * @param {titleObj}  原始对象
		* @flag 标记  key 取键  value 取值 

*/
export function getObjVal(titleObj: any, flag: string) {
	let arr = [];
	// key 取key值
	if (flag == "key") {
		for (const key in titleObj) {
			if (titleObj.hasOwnProperty(key)) {
				arr.push(key);
			}
		}
		return arr;
	}
	// value 取value 值
	if (flag == "value") {
		for (const key in titleObj) {
			if (titleObj.hasOwnProperty(key)) {
				arr.push(titleObj[key]);
			}
		}
		return arr;
	}
}

3、页面中使用

<div style="margin-top: 18px">
	对已选 {{ tableTotal }} 条数据,进行批量操作:<span style="color: #274bef; cursor: pointer" @click="downloadFile"
		>导出</span
	>
</div>
import { exportExcel } from "@/utils/util";
const downloadFile = () => {
	downloadTable.value.map((item: any) => {
		item.proxyType = filterProxyType(item.proxyType);
		item.userCompanyId = item.userCompanyId ? "组织内成员" : "组织外成员";
		item.enableScale = item.enableScale == -1 ? "停用" : "启用";
	});

	const titleObj = {
		云飒ID: "ysId",
		代理身份: "proxyType",
		成员身份: "userCompanyId",
		工号: "jobNumber",
		所属部门: "departmentName",
		昵称: "nickname",
		真实姓名: "name",
		手机号码: "userPhone",
		账号状态: "enableScale",
		优惠码: "cdk",
		优惠价格: "preferentialPrice"
	};
	exportExcel(downloadTable.value, agentStore()?.agentObj?.name, titleObj, "组织架构内");
};

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值