vue + element 表格数据导出为excel表格

由于业务内容的需要,我们有时候需要将表格中的数据做导出,生成一个excel表格,以下操作主要实现将element中的table数据生成一个excel表格并做下载操作。

效果图如下:

 点击图中导出按钮时,将表格中的数据导出为一个excel文件并下载。

如下

 

 操作步骤如下:

1.下载相应的依赖 (命令如下)

npm install --save xlsx file-saver

2.下载完成后引入相应的插件

        1.import FileSaver from "file-saver";

        2.import * as XLSX from "xlsx";

3.在相关页面引入代码后定义方法

exportExcel() {
    //转换成excel时,使用原始的格式
    var xlsxParam = { raw: true };
    let fix = document.querySelector(".el-table__fixed");
    let wb;
    //判断有无fixed定位,如果有的话去掉,后面再加上,不然数据会重复
	if (fix) {
		wb = XLSX.utils.table_to_book(
		document.querySelector("#tableId").removeChild(fix),xlsxParam);
		document.querySelector("#tableId").appendChild(fix);
	} else {
		wb = XLSX.utils.table_to_book(document.querySelector("#tableId"),xlsxParam);
	}
	var wbout = XLSX.write(wb, {
		bookType: "xlsx",
		bookSST: true,
		type: "array",
	});
	try {
		FileSaver.saveAs(new Blob([wbout], { type: "application/octet-stream" }),"导出详情单.xlsx"); 
	} catch (e) {
		if (typeof console !== "undefined") console.log(e, wbout);
		}
	return wbout;
},

4.给el-table中定义一个id

<el-table
	:data="tableData"
	id="tableId"
	style="width: 100%">
</el-table>

步骤基本完成,运行项目后点击导出按钮便可实现表格数据下载导出为excel表。

完整代码如下

<template>
	<div class="administrativeCase-container">
		<div class="content-box">
			<div class="box-btn">
				<div class="btn">
					<div>
						<el-button type="primary">导入</el-button>
						<el-button @click="exportExcel()">导出</el-button>
					</div>
				</div>
			</div>
			<div class="box-content">
				<el-table
				      :data="tableData"
					  id="tableId"
				      style="width: 100%">
				      <el-table-column
				        prop="date"
				        label="日期"
						fixed
				        width="180">
				      </el-table-column>
				      <el-table-column
				        prop="name"
				        label="姓名"
						fixed
				        width="180">
				      </el-table-column>
				      <el-table-column
				        prop="address"
				        label="地址">
				      </el-table-column>
					  <el-table-column
					    prop="date"
					    label="日期"
					  						
					    width="180">
					  </el-table-column>
					  <el-table-column
					    prop="name"
					    label="姓名"
					    width="180">
					  </el-table-column>
					  <el-table-column
					    prop="address"
					    label="地址">
					  </el-table-column>
					  <el-table-column
					    prop="date"
					    label="日期"
					  						
					    width="180">
					  </el-table-column>
					  <el-table-column
					    prop="name"
					    label="姓名"
					    width="180">
					  </el-table-column>
					  <el-table-column
					    prop="address"
					    label="地址">
					  </el-table-column>
				 </el-table>
			</div>
		</div>
	</div>
</template>

<script>
	import FileSaver from "file-saver";
	import * as XLSX from "xlsx";
	export default {
		data () {
			return {
				tableData: [{
					date: '2016-05-02',
					name: '王小虎',
					address: '上海市普陀区金沙江路 1518 弄'
				}, {
					date: '2016-05-04',
					name: '王小虎',
					address: '上海市普陀区金沙江路 1517 弄'
				}, {
					date: '2016-05-01',
					name: '王小虎',
					address: '上海市普陀区金沙江路 1519 弄'
				}, {
					date: '2016-05-03',
					name: '王小虎',
					address: '上海市普陀区金沙江路 1516 弄'
				}],
			}
		},
		methods:{
			// 导出
			exportExcel() {
                //转换成excel时,使用原始的格式
				var xlsxParam = { raw: true };
				let fix = document.querySelector(".el-table__fixed");
				let wb;
                //判断有无fixed定位,如果有的话去掉,后面再加上,不然数据会重复
				if (fix) {
				  wb = XLSX.utils.table_to_book(
				  document.querySelector("#tableId").removeChild(fix),xlsxParam
				  );
				  document.querySelector("#tableId").appendChild(fix);
				} else {
				  wb = XLSX.utils.table_to_book(document.querySelector("#tableId"),xlsxParam);
				}
				var wbout = XLSX.write(wb, {
				bookType: "xlsx",
				bookSST: true,
				type: "array",
				});
				try {
				FileSaver.saveAs(
					new Blob([wbout], { type: "application/octet-stream" }),
					"导出详情单.xlsx"
				); //文件名
				} catch (e) {
				if (typeof console !== "undefined") console.log(e, wbout);
				}
				return wbout;
			},
		}
	}
</script>

<style>

</style>

  • 9
    点赞
  • 46
    收藏
    觉得还不错? 一键收藏
  • 11
    评论
要在Vue 2.x中使用Element UI来导入和导出Excel,你需要安装element-ui和file-saver插件。 首先,在Vue项目中使用npm或yarn安装Element UI和file-saver插件: ``` npm install element-ui file-saver --save ``` 然后,在Vue组件中引入所需的文件: ```javascript import { Button, Table } from 'element-ui' import XLSX from 'xlsx' import FileSaver from 'file-saver' ``` 在组件中,你需要定义导入和导出Excel的方法。下面是一个简单的示例: ```javascript methods: { // 导入Excel handleImportExcel(file) { const reader = new FileReader() reader.onload = (e) => { const data = new Uint8Array(e.target.result) const workbook = XLSX.read(data, { type: 'array' }) const worksheet = workbook.Sheets[workbook.SheetNames[0]] const jsonData = XLSX.utils.sheet_to_json(worksheet, { header: 1 }) // 处理导入的Excel数据 console.log(jsonData) } reader.readAsArrayBuffer(file.raw) }, // 导出Excel handleExportExcel() { const jsonData = [ ['姓名', '年龄', '性别'], ['张三', 18, '男'], ['李四', 20, '女'] ] const worksheet = XLSX.utils.aoa_to_sheet(jsonData) const workbook = XLSX.utils.book_new() XLSX.utils.book_append_sheet(workbook, worksheet, 'Sheet1') const excelBuffer = XLSX.write(workbook, { bookType: 'xlsx', type: 'array' }) const excelData = new Blob([excelBuffer], { type: 'application/octet-stream' }) FileSaver.saveAs(excelData, 'example.xlsx') } } ``` 最后,在模板中使用Element UI的Button和Table组件,分别绑定导入和导出Excel的方法: ```html <template> <div> <el-button type="primary" @change="handleImportExcel">导入Excel</el-button> <el-table :data="tableData"> <!-- 表格内容 --> </el-table> <el-button type="success" @click="handleExportExcel">导出Excel</el-button> </div> </template> ``` 这样,你就可以在Vue项目中使用Element UI来导入和导出Excel了。当用户选择一个Excel文件时,`handleImportExcel`方法将会被触发,并将Excel数据转换为JSON数据进行处理。而`handleExportExcel`方法则会将JSON数据转换为Excel文件并进行下载。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值