将列表导出成excel表格图片下载(vue中使用)

Posted sunshineG

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了将列表导出成excel表格图片下载(vue中使用)相关的知识,希望对你有一定的参考价值。

下面方法是前后端配合完成的导出功能,即前端需要调用后端接口。
如果后端返回的是base64格式的url,需要先转成二进制,再用blob处理;如果是文件流或二进制流,直接用blob处理即可。

功能1:将列表导出成excel表格(vue中使用)

实现方法:

  • 1.调后端接口,将列表数据传到后端

  • 2.后端返回一个url地址,是base64格式的

  • 3.封装一个解码方法,将base64格式的url转成二进制

  • 4.创建一个a标签,把url赋给它的href属性,再给它添加下载功能

        //一般项目中会把公共的方法都放在util.js中,这里先放在.vue文件的methods中使用
    		/**
             * @dataurl 后端返回的base64格式的url转成二进制
             */
            dataURLtoBlob(dataurl){
                // 1解码
                var bstr = atob(dataurl),
                // 2 创建长度为n的数组,初始化里面的相都为0,即[0,0,0,...]
                n = bstr.length,
                u8arr = new Uint8Array(n)
                while (n--){
                    urarr[n]=bstr.charCodeAt(n)
                }
                return new Blob([u8arr],{type:\'application/vnd.ms-excel\'})
            }
    
    // 先把数据list传递给后端
            exportDataList(){
                let params = {
                    dataList:this.dataList
                }
                let that = this
                api.exportMethod(params).then(res=>{
                    if(res.code==200){
                        let binaryFile = res.data.data,
                            blob = that.dataURLtoBlob(binaryFile),
                            url = window.URL.createObjectURL(blob),  //返回一个对象URL
                            link = document.createElement(\'link\');
                        link.style.display = \'none\'
                        link.href = url
                        link.setAttibute(\'id\',\'downloadLink\')
                        link.setAttibute(\'download\',\'导出清单.xls\')
                        document.body.appendChild(\'link\')
                        link.click()
                        let objLink = document.getElementById(\'downloadLink\')
                        document.removeChild(objLink)
                        window.URL.revokeObjectURL(url)
                    }
                })
    
            },
      	 
    

    功能2:图片下载(后端返回的是二进制流)

                        let binaryFile = res.data.data,
                            blob = new Blob([binaryFile],type:\'\')
                            url = window.URL.createObjectURL(blob),  //返回一个对象URL
                            link = document.createElement(\'link\');
                        link.style.display = \'none\'
                        link.href = url
                        link.setAttibute(\'id\',\'downloadLink\')
                        link.setAttibute(\'download\',this.downLoadFileName)
                        document.body.appendChild(\'link\')
                        link.click()
                        let objLink = document.getElementById(\'downloadLink\')
                        document.removeChild(objLink)
                        window.URL.revokeObjectURL(url)
    

以上是关于将列表导出成excel表格图片下载(vue中使用)的主要内容,如果未能解决你的问题,请参考以下文章

java中把列表用流生成了Excel表格中的时间显示问题

Vue.js使用Blob的方式实现excel表格的下载(流文件下载)

vue2中导出带有图片的excel表格

Vue2.0---将页面中表格数据导出excel (详细)

vue项目中如何把表格导出excel表格

VUE中使用vue-json-excel超级方便导出excel表格数据