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);
   });
 }
相关文章
|
2月前
|
前端开发
实现Excel文件和其他文件导出为压缩包,并导入
实现Excel文件和其他文件导出为压缩包,并导入
37 1
|
2月前
|
数据格式 UED
记录一次NPOI库导出Excel遇到的小问题解决方案
【11月更文挑战第16天】本文记录了使用 NPOI 库导出 Excel 过程中遇到的三个主要问题及其解决方案:单元格数据格式错误、日期格式不正确以及合并单元格边框缺失。通过自定义单元格样式、设置数据格式和手动添加边框,有效解决了这些问题,提升了导出文件的质量和用户体验。
226 3
|
2月前
|
Java API Apache
|
2月前
|
存储 Java API
Java实现导出多个excel表打包到zip文件中,供客户端另存为窗口下载
Java实现导出多个excel表打包到zip文件中,供客户端另存为窗口下载
98 4
|
8天前
|
JavaScript
vue使用iconfont图标
vue使用iconfont图标
57 1
|
19天前
|
JavaScript 关系型数据库 MySQL
基于VUE的校园二手交易平台系统设计与实现毕业设计论文模板
基于Vue的校园二手交易平台是一款专为校园用户设计的在线交易系统,提供简洁高效、安全可靠的二手商品买卖环境。平台利用Vue框架的响应式数据绑定和组件化特性,实现用户友好的界面,方便商品浏览、发布与管理。该系统采用Node.js、MySQL及B/S架构,确保稳定性和多功能模块设计,涵盖管理员和用户功能模块,促进物品循环使用,降低开销,提升环保意识,助力绿色校园文化建设。
|
2月前
|
JavaScript 前端开发 开发者
vue学习第一章
欢迎来到我的博客!我是瑞雨溪,一名热爱前端的大一学生,专注于JavaScript与Vue,正向全栈进发。博客分享Vue学习心得、命令式与声明式编程对比、列表展示及计数器案例等。关注我,持续更新中!🎉🎉🎉
50 1
vue学习第一章
|
2月前
|
JavaScript 前端开发 索引
vue学习第三章
欢迎来到瑞雨溪的博客,一名热爱JavaScript与Vue的大一学生。本文介绍了Vue中的v-bind指令,包括基本使用、动态绑定class及style等,希望能为你的前端学习之路提供帮助。持续关注,更多精彩内容即将呈现!🎉🎉🎉
34 1
|
2月前
|
缓存 JavaScript 前端开发
vue学习第四章
欢迎来到我的博客!我是瑞雨溪,一名热爱JavaScript与Vue的大一学生。本文介绍了Vue中计算属性的基本与复杂使用、setter/getter、与methods的对比及与侦听器的总结。如果你觉得有用,请关注我,将持续更新更多优质内容!🎉🎉🎉
41 1
vue学习第四章
|
2月前
|
JavaScript 前端开发 算法
vue学习第7章(循环)
欢迎来到瑞雨溪的博客,一名热爱JavaScript和Vue的大一学生。本文介绍了Vue中的v-for指令,包括遍历数组和对象、使用key以及数组的响应式方法等内容,并附有综合练习实例。关注我,将持续更新更多优质文章!🎉🎉🎉
32 1
vue学习第7章(循环)

热门文章

最新文章