Vue项目导出Excel(Blob篇)

本文详细介绍了如何在前端使用axios获取后台返回的二进制文档流,并利用Blob对象配合file-saver库实现文件下载,重点讲解了Blob对象的使用和不同MIME类型的对应。

日常工作中,你常用到的下载方式有哪些?

①. 后台返回生成好的文档地址,前端通过 a 链接即可下载;
②. 后台返回二进制文档流,前端解析下载。


接下来,我们就聊聊第二种方式

开始之前,我们先看一下二进制流长什么样子⬇️

图1
你没看错,你不认识,我也不认识,但这完全不影响我们接下来的操作。

我们这里会用到Blob对象,先来简单了解一下Ta

Blob 对象表示一个不可变、原始数据的类文件对象。它的数据可以按文本或二进制的格式进行读取,也可以转换成 ReadableStream 来用于数据操作。

在发起请求时,需指定 responseType
// 以get请求为例
axios.get(url, {  
	params, 
	responseType: "blob" 
})
保存文件的方法
// download.js文件
// 事先安装 file-saver 依赖
let FileSaver = require("file-saver");

export default {
  download: (dataBlob, fileName) => {
    FileSaver.saveAs(dataBlob, fileName);
  }
};
关键的一步来了
import Download from "../assets/javascript/download";
...
let blob = new Blob([res], { // res 即图1后台返回的内容
  type: "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet" // 这里很关键
});
Download.download(
  blob,
  `${this.datasetObj.Title}.${this.downloadType}`
);

大功告成!来预览一下导出的Excel

在这里插入图片描述

这个结果,你总认识了吧!


附:

Blob.type 表明该 Blob 对象所包含数据的 MIME 类型。如果类型未知,则该值为空字符串。

常见MIME类型:

扩展名文档类型MIME 类型
.aacAAC audioaudio/aac
.csvComma-separated values (CSV)text/csv
.docMicrosoft Wordapplication/msword
.docxMicrosoft Word (OpenXML)application/vnd.openxmlformats-officedocument.wordprocessingml.document
.gifGraphics Interchange Format (GIF)image/gif
.jpeg / .jpgJPEG imagesimage/jpeg
.jsonJSON formatapplication/json
.pngPortable Network Graphicsimage/png
.pdfAdobe Portable Document Format (PDF)application/pdf
.xlsMicrosoft Excelapplication/vnd.ms-excel
.xlsxMicrosoft Excel (OpenXML)application/vnd.openxmlformats-officedocument.spreadsheetml.sheet
.zipZIP archiveapplication/application/zip
### 实现 Vue.js导出 Excel 文件 在 Vue.js 项目中实现导出 Excel 功能有两种常见方法:一种是使用 `ExcelJS` 库,另一种则是通过 `Export2Excel` 工具。 #### 使用 ExcelJS 导出 Excel 文件 为了利用 `ExcelJS` 创建并导出 Excel 文档,在组件内需先引入此库: ```javascript import ExcelJS from 'exceljs'; ``` 之后可按照如下方式构建工作簿对象,并向其中添加数据表单以及设置样式等内容[^1]。 ```javascript export default { methods: { exportToExcel() { const workbook = new ExcelJS.Workbook(); let worksheet = workbook.addWorksheet('Sheet Name'); // 添加一些列头 worksheet.columns = [ { header: 'ID', key: 'id', width: 10 }, { header: 'Name', key: 'name', width: 32 } ]; // 插入行数据 worksheet.addRow({ id: 1, name: "John Doe" }); worksheet.addRow({ id: 2, name: "Jane Smith" }); // 将文件保存为 .xlsx 并触发下载 workbook.xlsx.writeBuffer().then((data) => { var blob = new Blob([data], { type: 'application/octet-stream' }); FileSaver.saveAs(blob, 'example.xlsx'); // 需要安装 file-saver 来处理浏览器端的文件保存操作 }) } } } ``` 需要注意的是,上述代码片段中的 `FileSaver` 是用于帮助实现在客户端直接保存二进制流到本地磁盘上的工具包;因此还需要额外安装它来完成整个流程。 #### 利用 Export2Excel 进行简单快速的数据导出 对于只需要基本功能的应用场景来说,采用 `Export2Excel` 可能更加便捷高效。下面给出一段简单的例子说明怎样借助这个插件轻松达成目的[^2]。 首先定义好待导出的数据源结构形式: ```json [ ["姓名", "年龄"], ["张三", 28], ["李四", 24] ] ``` 接着编写相应逻辑调用函数执行实际转换过程: ```javascript // 假设 raw 数据已经准备好 let tHeader = ['姓名', '年龄']; // 表格头部标题数组 let filterVal = ['name', 'age']; // 对应于 JSON 键名列表 this.downloadExl(tHeader,filterVal,raw,'人员信息'); downloadExl(tHeader, filterVal, data, filename){ require.ensure([], () => { const { export_json_to_excel } = require('@/vendor/Export2Excel'); // 引入导出模块 const list = data; const data = this.formatJson(filterVal, list); export_json_to_excel(tHeader, data, filename); // 调用导出接口 }) } formatJson(filterVal, jsonData) { return jsonData.map(v => filterVal.map(j => v[j])) }, ``` 以上两种方案各有优劣之处,可以根据项目的具体需求选择合适的方式来进行开发。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值