Excel导出功能

1. 前端处理导出数据

1.安装xlsx:npm install xlsx file-saver -S
2.在使用的页面导入:import XLSX from "xlsx"
3.导出事件

exportEvent(){
	let arrayData = []; //声明一个空数组来装数据导出的数据
	this.tableData.map((item) => {//遍历this.tableData从中拿需要的数据
		arrayData.push([ //往空数组中追加
		  item.id,
		  item.title,
   		  item.type,
		  item.status,
		])
	});
	var data = [["标题",null,null],["优惠券ID", "名称","类型", "状态"], ...arrayData]; //Excel表头和以下数据,此处需为二维数组
	var xlsx_name = "Sheet1"; //设置Excel第一个sheet的名称
		 var wb = XLSX.utils.book_new();
		 var ws = XLSX.utils.aoa_to_sheet(data);  //数据转换
		ws['!merges'] = [
			// 设置单元格合并,r表示行,c表示列,这里为第一行中的1-4单元格合并
			{s: {r: 0, c: 0}, e: {r: 0, c: 4}},
		];
			// 设置第二行宽度
		 ws["!cols"]=[null, {wpx:130}]
		 XLSX.utils.book_append_sheet(wb, ws, xlsx_name); //将数据添加到工作薄
		 XLSX.writeFile(wb, "统计信息.xlsx"); //导出Excel  第二个参数为文件名称
}

2.前端处理后台返回的Excel导出数据流封装

请求后台,需要设置responseType类型为"blob",获取到返回来的数据流:
在这里插入图片描述
axios请求,需要设置请求头为responseType:'blob',后台返回文件流后再调用此方法

/*
 * 导出文件
 * @data 后台返回的数据流
 * @fileName 导出的文件名
*/
export function exportFile(data, fileName) {
  // 将后台回传过来的文件流,通过将其转成blob对象 type为设置文件类型,
    let blob = new Blob([data], {type: 'application/vnd.ms-excel'})
	if ('download' in document.createElement('a')) { // 非IE下载
		  const link = document.createElement('a')
		  link.style.display = 'none'
		  //  创建一个临时url指向blob对象,给a标签的href属性
		  link.href = URL.createObjectURL(blob) //获取当前文件blob的一个内存URL
		  link.download = fileName // 设置下载文件名称
		  document.body.appendChild(link)
		  link.click()
		  URL.revokeObjectURL(dlink.href) // 释放URL 对象
		  document.body.removeChild(link) //释放临时对象
	}else{ // IE10+下载
		  navigator.msSaveBlob(blob, fileName)
	}

}

待续。。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值