vue导出excel表格-后端返回blob流文件,前端导出
导出xls 前端处理
·
最近项目遇到了导出,记录一下。
我们项目导出有俩种一种后端返回流前端处理,还有就是后端直接处理完成给一个接口(后端处理比较好一点不会造成后端xls越来越多)
流文件导出需要注意
需要加responseType: 'blob',否则文件会损坏
excel流文件一定要在请求的时候加上响应类型字段,也就是:responseType: 'blob'或者,responseType: 'arraybuffer' ,否则下载出来的excel文件就会损坏,就会打不开。损坏文件如下图所示:
怎么加responseType: 'blob' 或者 responseType: 'arraybuffer'
我们项目有封装的API前缀所以这么加。 没有封装的话就是在axios发请求时候添加 大概是这样的
前端处理文件名字接收等等
必须要声明流文件且得到的结果用流文件转一下,这样的话,就不会出现excel文件损坏、或者乱码的情况。
// 导出按钮的回调函数中
async ExcelData() {
// 准备参数
let params = xxx
const res = await this.$api.export(params);
const blob = new Blob([res]); // 把得到的结果用流对象转一下
var downloadElement = document.createElement("a"); //创建一个<a></a>标签
downloadElement.href = URL.createObjectURL(blob); // 将流文件写入a标签的href属性值
downloadElement.download = "文件名.xlsx"; //设置文件名
downloadElement.style.display = "none"; // 藏起来a标签
downloadElement.body.appendChild(a); // 将a标签追加到文档对象中
downloadElement.click(); // 模拟点击了a标签,会触发a标签的href的读取,浏览器就会自动下载了
downloadElement.remove(); // 一次性的,用完就删除a标签
},
更多推荐
已为社区贡献1条内容
所有评论(0)