一般项目上表格导出都是传ID到后端,然后返回一个网络链接,接口返回后再通过a链接实现自动下载。但是如果数据量不大,而且数据已经在前端获取到的时候是可以通过前端直接生成excel文件的。
需求如下:
多选后点击批量导出按钮进行导出
解决思路:
点击导出后获取到当前的表格数组,在页面上渲染出table节点,同时设置display:none
document.getElementById("table").outerHTML + "</body></html>";
// 创建一个Blob对象,第一个参数是文件的数据,第二个参数是文件类型属性对象
const blob = new Blob([html], { type: "application/vnd.ms-excel" });
然后渲染出a链接的href属性为 URL.createObjectURL(blob),触发a链接的点击事件即可实现导出。
注意事项: 创建table节点时,可以先设置节点文本模板,再通过 节点.innerHTML=文本模板 多次导出需要先判断后移除之前的table节点和a链接 需要对表格枚举类数据进行判断时需要应该进行深拷贝,不然会影响到原本的数据 对应a链接的属性参考
a.setAttribute("download", "导出表");
a.setAttribute("target", "_blank");
项目上遇到的,仅提供思路参考 如果对表格样式有更深度的定制需要引入其他包进行处理,或者后端处理。