vue中axios将table表格数据导出至excel表格

本文详细阐述了如何在Vue应用中使用axios将表格数据转换为Excel文件流,并利用Blob对象进行下载。步骤包括设置接口请求的responseType为'blob',创建Blob对象处理服务器返回的数据,以及分别针对IE和Chrome/Firefox编写下载文件的方法。
摘要由CSDN通过智能技术生成

vue中axios将table表格数据导出至excel表格

实现下载excel表格功能(下载后端返回的文件流)

(导出按钮点击事件:将table表格数据导出至excel表格)

<el-button type="primary" @click="exportToExcel">
导出数据</el-button>

第一步:先写接口函数,并返回接口数据

responseType 表示服务器响应的数据类型,可以是 ‘arraybuffer’, ‘blob’, ‘document’, ‘json’, ‘text’, ‘stream’,默认是‘json’

ArrayBuffer(又称类型化数组)

ArrayBuffer对象用来表示通用的、固定长度的原始二进制数据缓冲区。ArrayBuffer 不能直接操作,而是要通过类型数组对象或 DataView 对象来操作,它们会将缓冲区中的数据表示为特定的格式,并通过这些格式来读写缓冲区的内容。

Blob(Binary Large Object): 二进制大数据对象

Blob 对象表示一个不可变、原始数据的类文件对象。Blob 表示的不一定是JavaScript原生格式的数据。File 接口基于Blob,继承了 blob 的功能并将其扩展使其支持用户系统上的文件。

methods:{
    exportToExcel(){
        var that=this;
        var params={
            apoiId:this.apoiId//传参以id为例
        };
        axios({
        url: '',//引号里面写接口地址
        method: 'post',
        params: data,
        responseType: 'blob',
    }).then((res)=>{
        console.log(res)
    })
    }
}

第二步:写下载文件的函数方法

data(){
return{
    fileName:'数据.xls'
}
}
// 下载文件
downloadFile(res) {
    if (!res) {
        return;
    }
    const blob = new Blob([res.data]); //构造一个Blob来处理数据
    //res为从后台返回的数据
    if (window.navigator.msSaveOrOpenBlob) {
        //IE(这两个方法是IE的方法,只有IE可以调用chrome和Firefox不        可以,所以chrome和Firefox进入else)
        window.navigator.msSaveBlob(blob, this.fileName);
    } else {
        //chrome和Firefox
        const elink = document.createElement('a');//创建a标签
        //通过a标签打开新页面下载文件
        
        //a标签里有download属性可以自定义文件名。
        //dowload属性指定文件名
        elink.download = this.fileName;
        //display = 'none'隐藏元素,这里隐藏<a>标签
        elink.style.display = 'none';
        //创建新的URL表示指定的File对象或者Blob对象
        const objUrl=window.URL.createObjectURL(blob);
        //href属性指定下载链接
        elink.href = objUrl;
        //将上面创建的a元素加入到body的尾部
        document.body.appendChild(elink);
        //click()事件触发下载
        elink.click();
        URL.revokeObjectURL(elink.href);//释放URL
        document.body.removeChild(elink);//释放标签
    }
}

①使用 Blob构造函数可以直接在客户端上创建和操作 Blob(通常等效于一个文件)。Internet Explorer 10 的 msSaveBlob和msSaveOrOpenBlob方法允许用户在客户端上保存文件,方法如同从 Internet 下载文件,这是此类文件保存到“下载”文件夹的原因。

请注意,msSaveBlobmsSaveOrOpenBlob 之间的区别就在于前者提供“保存”按钮,而后者不但提供“保存”按钮,还提供“打开”按钮。

②为什么IE和chrome、Firefox分开写?

对于<a>标签,只有 Firefox 和 Chrome(内核) 支持 download 属性

IE10以上支持blob但是依然不支持download

③在每次调用createObjectURL方法时,都会创建一个新的 URL 对象,即使你已经用相同的对象作为参数创建过。当不再需要这些 URL 对象时,每个对象必须通过调用 URL.revokeObjectURL方法来释放。浏览器会在文档退出的时候自动释放它们,但是为了获得最佳性能和内存使用状况,你应该在安全的时机主动释放掉它们。

④download 属性规定被下载的超链接目标。在<a>标签中必须设置 href 属性。该属性也可以设置一个值来规定下载文件的名称。所允许的值没有限制,浏览器将自动检测正确的文件扩展名并添加到文件 (.img, .pdf, .txt, .html, 等等)。

⑤Blob问题2:需要导出excel、csv、word、zip压缩文件之类的,在导出excel和word中需要知道对应的content-type属性,关于blob格式如下:

后缀MIME Type
.docapplication/msword
.docxapplication/vnd.openxmlformats-officedocument.wordprocessingml.document
.xlsapplication/vnd.ms-excel
.xlsxapplication/vnd.openxmlformats-officedocument.spreadsheetml.sheet
.pptapplication/vnd.ms-powerpoint
.pptxapplication/vnd.openxmlformats-officedocument.presentationml.presentation
  • 具体代码如下:

  const blob = new Blob([res],{type: 'application/vnd.openxmlformats-           officedocument.spreadsheetml.sheet'});

第三步:调用下载文件方法实现下载

 methods:{
    exportToExcel(){
        var that=this;
        var params={
            apoiId:this.apoiId//传参以id为例
        };
        axios({
        url: '',//引号里面写接口地址
        method: 'post',
        params: data,
        responseType: 'blob',
    }).then((res)=>{
        console.log(res)
        //下载文件方法
        that.downloadFile(res);
    })
    }
}

参考链接:

https://www.jianshu.com/p/8d8ea4cbb938vue中axios实现下载excel表格功能(下载后端返回的文件流)_前端探险家的博客-CSDN博客_vue使用axios下载excel

通过axios请求excel表格可以使用以下步骤: 1. 首先,你需要在前端代码引入axios库,并确保已经正确安装和配置。 2. 接下来,你需要调用axios的get方法来发送GET请求,获取后端返回的excel文件的二进制数据。 3. 在请求,你需要设置responseType为'blob',以便接收二进制数据。 4. 一旦获取到了响应,你可以通过使用FileSaver.js库将二进制数据保存为excel文件。你可以通过以下方式使用FileSaver.js: - 首先,确保已经在前端代码引入FileSaver.js库。 - 然后,使用FileSaver.saveAs方法,将blob对象和文件名作为参数进行保存。 下面是一个示例代码,展示了如何使用axios请求excel表格: ```javascript // 引入axios和FileSaver.js import axios from 'axios'; import FileSaver from 'file-saver'; // 发送GET请求获取excel表格 axios.get('your_api_url', { responseType: 'blob' // 设置响应类型为二进制数据 }) .then(response => { const fileName = 'example.xlsx'; // 文件名 const blob = new Blob([response.data], { type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' }); // 创建blob对象 FileSaver.saveAs(blob, fileName); // 保存文件 }) .catch(error => { console.log(error); }); ``` 请将代码的'your_api_url'替换为你后端提供的接口地址,'example.xlsx'替换为你想要保存的文件名。同时,确保已经正确安装和配置了axios和FileSaver.js库。 希望这个答案能够帮到你!<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [vueaxiostable表格数据导出excel表格](https://blog.csdn.net/wulikunbing/article/details/125872407)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *3* [前端axios下载excel文件(二进制)的处理方法](https://download.csdn.net/download/weixin_38614812/13626129)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值