vue 前后端下载
1.使用场景:前后端分离,后端生成execl六文件,前端直接调用接口下载excel
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | /src/api/usr export function exportExcel(path, params ) { return request({ url: path, method: 'get' , params : params , responseType: 'arraybuffer' }) } //使用的地方 async handleDown () { this .downLoading = true try { const res = await exportExcel( '/service/reconciliation/downloadList' , this .listQuery) const blob = new Blob([res],{ type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=utf-8' }) let downloadElement = document.createElement( 'a' ) let href = window.URL.createObjectURL(blob) downloadElement.href = href downloadElement.download = '账单明细.xlsx' document.body.appendChild(downloadElement) downloadElement.click() document.body.removeChild(downloadElement) window.URL.revokeObjectURL(href) setTimeout(() => { this .downLoading = false }, 500) } catch (err){ this .downLoading = false } }, |
2.execl直接在前端生成,样式可以根据实际内容调整,本质是一个html,转换成execl
优点:样式可以随意切换,在前端直接生成减少网络传输压力
缺点:用word打开的时候会有一个提示,文档格式不匹配,但不影响正常的打开
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 | exportxsl() { var datanum = this .exceldata.length - 1; // var startTime = this.timestampToTime(this.exceldata[0].createTime); // var endTime = this.timestampToTime(this.exceldata[datanum].createTime); var str = "<tr style='font-size:15px'><td colspan='6' style='font-size:14px;background-color:#ddd;padding-top:10px;padding-bottom:10px;height:100px'> <strong>提示:</strong> 总数:" + this .exceldata.length + "条</td></tr>" + '<tr>' + '<td style="border: 0.5pt solid #000;background-color:#ddd;font-size:20px">账号</td>' + '<td style="border: 0.5pt solid #000;background-color:#ddd;font-size:20px">产品</td>' + '<td style="border: 0.5pt solid #000;background-color:#ddd;font-size:20px">单价</td>' + '<td style="border: 0.5pt solid #000;background-color:#ddd;font-size:20px">实际费用</td>' + '<td style="border: 0.5pt solid #000;background-color:#ddd;font-size:20px">类型</td>' + '<td style="border: 0.5pt solid #000;background-color:#ddd;font-size:20px">订购时间</td>' + ' </tr>' ; var data = this .exceldata; //从接口中获取的数据 for ( let i = 0; i < data.length; i++) { let account = data[i].account ? data[i].account: "--" str += "<tr>" ; str += '<td style="border: 0.5pt solid #000;">' + account + "</td>" ; str += '<td style="border: 0.5pt solid #000;">' + data[i].productName + "</td>" ; str += '<td style="border: 0.5pt solid #000;">' + data[i].receivable + "</td>" ; str += '<td style="border: 0.5pt solid #000;">' + data[i].receipt + "</td>" ; str += '<td style="border: 0.5pt solid #000;">' + this .typeToChange(data[i].type) + "</td>" ; str += '<td style="border: 0.5pt solid #000;">' + this .timestampToTime(data[i].createTime) + "</td>" ; str += "</tr>" ; } function base64(template) { return window.btoa(unescape(encodeURIComponent(template))); } var filename = "个人账单信息" ; //Worksheet名 var worksheet = "个人帐单信息" ; // let uri = 'data:text/csv;charset=utf-8,\ufeff' + encodeURIComponent(str); var uri = "data:application/vnd.ms-excel;base64," ; //下载的表格模板数据 var template = `<html xmlns:o= "urn:schemas-microsoft-com:office:office" xmlns:x= "urn:schemas-microsoft-com:office:excel" xmlns= "http://www.w3.org/TR/REC-html40" > <head><!--[ if gte mso 9]><xml><x:ExcelWorkbook><x:ExcelWorksheets><x:ExcelWorksheet> <x:Name>${worksheet}</x:Name> <x:WorksheetOptions><x:DisplayGridlines/></x:WorksheetOptions></x:ExcelWorksheet> </x:ExcelWorksheets></x:ExcelWorkbook></xml><![endif]--><style type= "text/css" >table{border: 0.5pt solid #000;background-cpor:#dddborder-collapse: collapse;}table td{border-top:0pt;font-size:16px } </style> <meta http-equiv= "Content-Type" content= "text/html; charset=UTF-8" ></head><body><table>${str}</table></body></html>`; var a = document.createElement( "a" ); a.download = filename; a.href = uri + base64(template); a.click(); // // 下载模板 // window.location.href = uri + base64(template) } |
3.还有一种使用官方的插件的execl 在前端生成,vue-element-admin 上有 我就不再重复叙述了。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)