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);
   });
 }
相关文章
|
3月前
|
移动开发 JavaScript
(H5查看CAD)网页CAD提取图纸表格到excel
本文介绍如何通过自定义MxCAD插件,在Web端智能识别CAD图纸中的表格,实现自动合并与高效导出至Excel,提升数据提取效率与准确性。内容涵盖区域选择、图形识别、表格结构重建、单元格合并及内容导出等关键技术,适用于工程图纸数据自动化处理场景。
|
4月前
|
Python
Excel中如何批量重命名工作表与将每个工作表导出到单独Excel文件
本文介绍了如何在Excel中使用VBA批量重命名工作表、根据单元格内容修改颜色,以及将工作表导出为独立文件的方法。同时提供了Python实现导出工作表的代码示例,适用于自动化处理Excel文档。
|
5月前
|
Java 测试技术 数据库
spring号码归属地批量查询,批量查询号码归属地,在线工具,可按省份城市运营商号段分类分开分别导出excel表格
简介:文章探讨Spring Boot项目启动优化策略,通过自定义监听器、异步初始化及分库分表加载优化等手段,将项目启动时间从280秒缩短至159秒,提升约50%,显著提高开发效率。
|
7月前
|
存储 JavaScript 前端开发
基于 ant-design-vue 和 Vue 3 封装的功能强大的表格组件
VTable 是一个基于 ant-design-vue 和 Vue 3 的多功能表格组件,支持列自定义、排序、本地化存储、行选择等功能。它继承了 Ant-Design-Vue Table 的所有特性并加以扩展,提供开箱即用的高性能体验。示例包括基础表格、可选择表格和自定义列渲染等。
586 6
|
8月前
|
JavaScript 前端开发 数据可视化
20.6K star!Excel级交互体验!这款开源Web表格神器绝了!
Handsontable 是一款功能强大的 JavaScript 数据表格组件,提供类 Excel 的交互体验。支持实时协作、数据绑定、公式计算等企业级功能,可轻松集成到 React/Vue/Angular 等主流框架。
1524 11
|
8月前
|
人工智能 数据可视化 前端开发
Probly:开源 AI Excel表格工具,交互式生成数据分析结果与可视化图表
Probly 是一款结合电子表格功能与 Python 数据分析能力的 AI 工具,支持在浏览器中运行 Python 代码,提供交互式电子表格、数据可视化和智能分析建议,适合需要强大数据分析功能又希望操作简便的用户。
1095 2
|
数据格式 UED
记录一次NPOI库导出Excel遇到的小问题解决方案
【11月更文挑战第16天】本文记录了使用 NPOI 库导出 Excel 过程中遇到的三个主要问题及其解决方案:单元格数据格式错误、日期格式不正确以及合并单元格边框缺失。通过自定义单元格样式、设置数据格式和手动添加边框,有效解决了这些问题,提升了导出文件的质量和用户体验。
935 3
|
12月前
|
前端开发
实现Excel文件和其他文件导出为压缩包,并导入
实现Excel文件和其他文件导出为压缩包,并导入
242 1
|
2月前
|
JavaScript
Vue中如何实现兄弟组件之间的通信
在Vue中,兄弟组件可通过父组件中转、事件总线、Vuex/Pinia或provide/inject实现通信。小型项目推荐父组件中转或事件总线,大型项目建议使用Pinia等状态管理工具,确保数据流清晰可控,避免内存泄漏。
300 2
|
1月前
|
缓存 JavaScript
vue中的keep-alive问题(2)
vue中的keep-alive问题(2)
279 137
下一篇
oss云网关配置