vue中实现文件下载,导出Excel表格

简介: vue中实现文件下载,导出Excel表格

引言


最近项目遇到一个需求,每次都需要根据检索条件将后端请求到的数据在前端进行表格的动态生成展示,并能够点击按钮,实现文件的下载功能,导出为Excel表格。效果如下:


1. 表格数据展示


表格展示主要利用element-ui中的table表格,把返回的数据处理成el-table需要的格式即可。

<el-table
  :data="returnData"
  border
  tooltip-effect="dark"
  style="width: 100%;"
  :span-method="objectSpanMethod"
  :height="tableHeight"
  :row-style="{ height: '0px' }"
  :cell-style="{ padding: '1px' }"
  :header-row-style="{ height: '0px' }"
  :header-cell-style="{ padding: '1px' }"
>
  <el-table-column
    prop="name"
    label="要素"
    width="120px"
    fixed
  ></el-table-column>
  <el-table-column prop="level" label="高度" width="60px">
  </el-table-column>
  <el-table-column
    v-for="col in timeList"
    :show-overflow-tooltip="true"
    :prop="col"
    :label="col"
    :key="col"
    width="70px"
  >
  </el-table-column>
</el-table>


2. 文件下载功能


文件下载功能通过向后端发送特定的请求参数来获取相应文件,使用ResponseType Blob来实现文件下载。


2.1 获取Blob对象


为了下载Excel文件,需要先获取到对应的Blob对象。使用axios向服务器发送POST请求,并获取返回的Blob对象。Blob 对象表示一个不可变、原始数据的类文件对象。它的数据可以按文本或二进制的格式进行读取。

downloadFile(data) {
   axios({
     method: "post",
     url: `http://${globeInterfaceIp}/api02/getExcel`,
     data: data,//将数据发送给后端,后端根据数据返回相应文件
     headers: {
       "Content-Type": "application/json", //客户端告诉服务器请求体数据的格式是JSON
     },
     responseType: "blob", //服务器响应的数据类型为blob
   })
   .then((res) => {
     const blob = res.data; //获取返回的Blob对象
     console.log(blob);
   })
   .catch((error) => {
     console.log(error);
   });
 }

这里的type: 'application/vnd.ms-excel’代表Blob 对象所包含数据的类型为excel文件。


后端代码

主要就是生成相应Excel文件,并设置输出文件类型为excel文件。


2.2 实现Excel文件下载


在获取到Blob对象之后,就可以实现文件的下载。具体来说,就是创建一个a标签,并设置其href属性为一个包含Blob对象的URL,然后模拟用户点击该链接的行为,就可以触发文件下载功能了。

downloadFile(data) {
   axios({
     method: "post",
     url: `http://${globeInterfaceIp}/api02/getExcel`,
     data: data,//将数据发送给后端,后端根据数据返回相应文件
     headers: {
       "Content-Type": "application/json", //客户端告诉服务器请求体数据的格式是JSON
     },
     responseType: "blob", //服务器响应的数据类型为blob
   })
   .then((res) => {
     const blob = res.data; //获取Blob对象
     const elink = document.createElement("a");// 创建一个超链接对象实例
     const fileName = this.store.getters.getDate + this.store.getters.getHour + ".xls";//Excel文件名
     elink.download = fileName;// 设置要下载的文件的名称
     elink.href = URL.createObjectURL(blob);//设置a标签的href属性为一个包含Blob对象的URL
     document.body.appendChild(elink);
     elink.click();// 触发超链接的点击事件
     URL.revokeObjectURL(elink.href); // 释放URL 对象
     document.body.removeChild(elink);// 移除超链接对象实例
   })
   .catch((error) => {
     console.log(error);
   });
 }
相关文章
|
28天前
|
关系型数据库 MySQL Shell
不通过navicat工具怎么把查询数据导出到excel表中
不通过navicat工具怎么把查询数据导出到excel表中
28 0
|
2天前
|
存储 Java
java的Excel导出,数组与业务字典匹配并去掉最后一个逗号
java的Excel导出,数组与业务字典匹配并去掉最后一个逗号
18 2
|
1月前
|
SQL 分布式计算 DataWorks
DataWorks产品使用合集之如何直接导出excel文件
DataWorks作为一站式的数据开发与治理平台,提供了从数据采集、清洗、开发、调度、服务化、质量监控到安全管理的全套解决方案,帮助企业构建高效、规范、安全的大数据处理体系。以下是对DataWorks产品使用合集的概述,涵盖数据处理的各个环节。
|
1月前
|
数据管理 数据处理 数据库
分享一个导出数据到 Excel 的解决方案
分享一个导出数据到 Excel 的解决方案
|
3月前
|
数据安全/隐私保护
杨老师课堂之Excel VBA 程序开发第七讲表格数据高亮显示
杨老师课堂之Excel VBA 程序开发第七讲表格数据高亮显示
35 1
|
11天前
|
数据采集 存储 数据挖掘
使用Python读取Excel数据
本文介绍了如何使用Python的`pandas`库读取和操作Excel文件。首先,需要安装`pandas`和`openpyxl`库。接着,通过`read_excel`函数读取Excel数据,并展示了读取特定工作表、查看数据以及计算平均值等操作。此外,还介绍了选择特定列、筛选数据和数据清洗等常用操作。`pandas`是一个强大且易用的工具,适用于日常数据处理工作。
|
24天前
|
SQL JSON 关系型数据库
n种方式教你用python读写excel等数据文件
n种方式教你用python读写excel等数据文件
|
28天前
|
存储 Java Apache
|
1月前
|
数据可视化 Python
我是如何把python获取到的数据写入Excel的?
我是如何把python获取到的数据写入Excel的?
36 2
|
1月前
|
索引 Python
Python基于Excel多列长度不定的数据怎么绘制折线图?
本文档详述了如何运用Python从CSV格式的Excel文件中读取特定范围的数据,并基于这些数据绘制多条折线图。文件的第一列代表循环增长的时间序列,后续各列包含不同属性的数据。通过指定起始与结束行数,可选取一个完整的时间循环周期内的数据进行绘图。每列数据以不同颜色和线型表示,并且图片长度会根据时间序列的长度动态调整,确保图表清晰易读。最终生成的图表将保存至指定文件夹。