后端生成表格地址
后端直接返回一个excel表格地址,前端点击下载即可。但是这种方式,会导致后端的excel越存越多,造成冗余。不过如果是固定模板表格内容不会变得情况下,当然解决方案就是后端写一个定时器,每个一段时间清楚冗余的表格数据。
后端返回一个blod流
后端返回一个blob流文件,这样的话,是一次性的流文件,前端通过new Blod生成一个流对象,然后再通过a链接模拟点击效果,后端导出需要在请求头里设置responseType: blog
// 导出函数
async outExcelData() {
let params = *** //后端所需入参
const res = await export(params); //接口封装函数
const blob = new Blob([res]); // 后端生成返回一个流文件,前端生成流
const a = document.createElement("a"); //创建一个<a></a>标签
const href = window.URL.createObjectURL(blob); // 将流文件生成 href属性
a.href = href //将文件流生成的href传给a.href属性
a.download = "数据xxx.xlsx"; //设置文件名
a.style.display = "none"; // 隐藏起来a标签
document.body.appendChild(a); // 将a标签追加到文档对象中
a.click(); // 模拟点击了a标签,会触发a标签的href的读取,浏览器就会自动下载了
a.remove(); // 点击下载后移除a链接
}
前端处理 通过xlsx插件
这种形式可以通过前端实现导出excel表格,只需要拿到后端返回的数据,然后对数据进行加工即可,但是这种形式不利于数据量较大的表格导出,毕竟调用的还是浏览器的执行能力,具体如何使用,自行百度,方法太多,总有适合你的需求方法。