vue3实现el-table导出为excel表格(亲测可用)

✅ 作者 : 布克吉(微信公众号同名)

🍎简介 : 专注于前端开发,微信小程序,后台管理(Vue+React)

               本博客主要用于分享前端技术知识,更多内容请看下方👇

✨人生态度 :☀️Eventually everything will be fine!☀️

如图实现以下功能:

目录

1.需要用到两个插件:file-saver和xlsx

2.页面中导入

3.使用的表格数据

4.关键代码

完整代码


1.需要用到两个插件:file-saverxlsx

npm install file-saver xlsx --save

2.页面中导入

import * as XLSX from 'xlsx';

import FileSaver from 'file-saver';

3.使用的表格数据

const columnData = ref([{
			prop: 'name',
			label: '姓名'
		},
		{
			prop: 'date',
			label: '日期'
		},
		{
			prop: 'address',
			label: '地址'
		}
	])
	const tableData = ref([{
			date: '2016-05-03',
			name: 'Tom',
			address: 'No. 189, Grove St, Los Angeles',
		},
		{
			date: '2016-05-02',
			name: 'Tom',
			address: 'No. 189, Grove St, Los Angeles',
		},
		{
			date: '2016-05-04',
			name: 'Tom',
			address: 'No. 189, Grove St, Los Angeles',
		},
		{
			date: '2016-05-01',
			name: 'Tom',
			address: 'No. 189, Grove St, Los Angeles',
		},
	])

4.关键代码

const exportToExcel = () => {
		console.log(resetTableData());
		let newTableData = resetTableData()
		// 假设 this.tableData 是你的表格数据,每一项是一个对象,对应表格的一行
		//处理表格数据得到数据
		const worksheet = XLSX.utils.json_to_sheet(newTableData);
		const workbook = XLSX.utils.book_new()
		XLSX.utils.book_append_sheet(workbook, worksheet, 'Sheet1')
		
		const excelBuffer = XLSX.write(workbook, {
			bookType: 'xlsx',
			type: 'array'
		});
		// 将缓冲区转换为 Blob 并保存为文件
		const data = new Blob([excelBuffer], {
			type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=utf-8'
		});
		FileSaver.saveAs(data, 'tableData.xlsx');
	}

	const resetTableData = () => {
		const propToLabelMap = new Map(columnData.value.map(item => [item.prop, item.label]));
		const restructuredTableData = []
		tableData.value.map(row => {
			// 使用映射表创建新对象,其中键为label值,值为原对象的相应prop值
			const newRow = {};
			for (const prop in row) {
				if (row.hasOwnProperty(prop) && propToLabelMap.has(prop)) {
					newRow[propToLabelMap.get(prop)] = row[prop];
				}
			}
			restructuredTableData.push(newRow)
		})
		return restructuredTableData
	}

上面两个函数:exportToExcelresetTableData

exportToExcel用于将表格数据转为Blob形式,生成表格并下载到本地

resetTableData作用在于使用数据字典重构数据格式,否则生成的表格,表头会有问题

表头会显示为columnData的prop值,而不是label值。

最后,

完整代码

<template>
	<div class="" style="width: 800px;margin:0 auto">
		<el-button @click="login">跳转</el-button>
		<model-visible :rowData="rowData1" @setTableVisible="setTableVisible"></model-visible>

		<el-table :data="tableData">
			<el-table-column v-for="(item,index) in columnData" align="center" :key="item.prop" :prop="item.prop"
				:label="item.label">
			</el-table-column>
		</el-table>

	</div>

	
	<el-button @click="exportToExcel" style="margin:50px 500px ;">导出</el-button>
</template>

<script setup>
	import {
		ref,
		reactive,
		
	} from 'vue'
	
	import * as XLSX from 'xlsx';

	import FileSaver from 'file-saver';


const columnData = ref([{
			prop: 'name',
			label: '姓名'
		},
		{
			prop: 'date',
			label: '日期'
		},
		{
			prop: 'address',
			label: '地址'
		}
	])
	const tableData = ref([{
			date: '2016-05-03',
			name: 'Tom',
			address: 'No. 189, Grove St, Los Angeles',
		},
		{
			date: '2016-05-02',
			name: 'Tom',
			address: 'No. 189, Grove St, Los Angeles',
		},
		{
			date: '2016-05-04',
			name: 'Tom',
			address: 'No. 189, Grove St, Los Angeles',
		},
		{
			date: '2016-05-01',
			name: 'Tom',
			address: 'No. 189, Grove St, Los Angeles',
		},
	])
	

	const exportToExcel = () => {
		console.log(resetTableData());
		let newTableData = resetTableData()
		// 假设 this.tableData 是你的表格数据,每一项是一个对象,对应表格的一行
		//处理表格数据得到数据
		const worksheet = XLSX.utils.json_to_sheet(newTableData);
		const workbook = XLSX.utils.book_new()
		XLSX.utils.book_append_sheet(workbook, worksheet, 'Sheet1')
		
		const excelBuffer = XLSX.write(workbook, {
			bookType: 'xlsx',
			type: 'array'
		});
		// 将缓冲区转换为 Blob 并保存为文件
		const data = new Blob([excelBuffer], {
			type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=utf-8'
		});
		FileSaver.saveAs(data, 'tableData.xlsx');
	}

	const resetTableData = () => {
		const propToLabelMap = new Map(columnData.value.map(item => [item.prop, item.label]));
		const restructuredTableData = []
		tableData.value.map(row => {
			// 使用映射表创建新对象,其中键为label值,值为原对象的相应prop值
			const newRow = {};
			for (const prop in row) {
				if (row.hasOwnProperty(prop) && propToLabelMap.has(prop)) {
					newRow[propToLabelMap.get(prop)] = row[prop];
				}
			}
			restructuredTableData.push(newRow)
		})
		return restructuredTableData
	}

</script>

觉得有用可以点赞收藏+关注!
 

  • 5
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要将Vue 3中的el-table导出Excel,你可以使用以下步骤: 1. 首先,你需要安装`xlsx`和`file-saver`包。在终端中运行以下命令: ``` npm install xlsx file-saver ``` 2. 在你的Vue组件中,导入所需的库: ```javascript import XLSX from 'xlsx'; import { saveAs } from 'file-saver'; ``` 3. 创建一个方法来导出表格数据为Excel文件: ```javascript exportData() { // 获取表格数据 const tableData = this.$refs.table.data; // 创建一个工作簿 const workbook = XLSX.utils.book_new(); // 创建一个工作表 const worksheet = XLSX.utils.json_to_sheet(tableData); // 将工作表添加到工作簿中 XLSX.utils.book_append_sheet(workbook, worksheet, 'Sheet1'); // 将工作簿转换为Excel文件的二进制数据 const excelData = XLSX.write(workbook, { bookType: 'xlsx', type: 'array' }); // 创建一个Blob对象,并保存为Excel文件 const blob = new Blob([excelData], { type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' }); saveAs(blob, 'table_data.xlsx'); } ``` 4. 在el-table组件上添加一个导出按钮,并调用`exportData`方法: ```html <el-table ref="table"> <!-- 表格内容 --> </el-table> <el-button @click="exportData">导出Excel</el-button> ``` 以上代码将会将el-table中的数据导出为名为`table_data.xlsx`的Excel文件。请确保在`<el-table>`标签上设置了ref属性,以便在`exportData`方法中引用表格数据。 这是使用Vue 3和Element Plus的示例,如果你在项目中使用了其他UI库或版本,请相应地调整代码。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值