vue 文件导出(下载)

博客介绍前端实现Excel文件导出功能的方法。后台返回数据格式有两种,对应不同导出方法。一是返回url或文件名,前端拼接路径赋值给window.location.href下载;二是返回流文件,需特定处理。同时提醒设置导出接口响应类型为blob,new Blob时type字段要与后台沟通。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

文件的导出格式为excel

简单的总结一下,前段做导出功能的话都是根据后台接口返回的数据再去做相应的处理,

简单来讲,后台返回的数据格式有两种,他们分别对应不同的导出方法,如下:

第一种

后台会直接返回一个 url 或者 文件名称字符串,

前端根据约定,对后台返回的字符串进行拼接处理,从而获取到一个完整的路径url,

将这个路径赋值给 window.location.href 属性,实现下载功能

如下,后端返回的是文件名称字符串

export function download(fileName) {
  window.location.href =
    baseURL +
    "/common/download?fileName=" +
    encodeURI(fileName) +
    "&delete=" +
    true;
}

第二种

后端直接返回了流文件,就是在开发中工具 network 中类似乱码的格式,

需要如下的处理方式 

// data为服务端返回的流数据
const exportParams = (data) => {
   const blob = new Blob([data], { type: 'application/vnd.ms-excel' });
   const fileName = '客户余额表.xlsx';
   const link = document.createElement('a');
   if (
     !!window.ActiveXObject ||
     'ActiveXObject' in window ||
      navigator.userAgent.indexOf('Edge') > -1
   ) {
      navigator.msSaveBlob(blob, fileName);
   } else {
      link.style.display = 'none';
      link.href = URL.createObjectURL(blob);
      link.download = fileName;
      document.body.appendChild(link);
      link.click();
      URL.revokeObjectURL(link.href); // 释放URL 对象
      document.body.removeChild(link);
   }
};

上面方法中用到了Blob,想了解的话可以点这里

需要注意的地方

1,导出接口的响应类型应设置为 blob,否则对于流文件可能无法从接口获取正确的流数据

在 vue 中设置 axios 请求参数:

responseType: 'blob'      重点关注

如果未设置responseType,可能会导致下载的文件打不开

2,new Blob 时,第二个参数可能需要与后台的响应类型一致,即 type 字段,这个需要同后台沟通

参考:

vue 文件导出(下载)时打不开、空白或者乱码的情况 - 知乎

vue前端接收excel文件流并下载_想要吐泡泡的鱼的博客-CSDN博客_前端接收excel

### Vue 文件导出方法及实现 #### 使用 `exceljs` 库进行 Excel 导出 为了在 Vue 项目中实现出色的文件导出功能,可以借助于 `exceljs` 这一强大的第三方库[^1]。此库提供了丰富的 API 来创建、修改以及保存 Excel 文档。 安装 `exceljs` 可通过 npm 或 yarn 完成: ```bash npm install exceljs --save ``` 或者 ```bash yarn add exceljs ``` 下面是一个简单的例子来展示如何利用 `exceljs` 创建导出一个 Excel 文件: ```javascript import { saveAs } from 'file-saver'; import * as ExcelJS from 'exceljs'; export function exportToExcel(data) { const workbook = new ExcelJS.Workbook(); const worksheet = workbook.addWorksheet('Sheet Name'); // 添加表头 worksheet.addRow(['ID', 'Name', 'Age']); // 填充数据 data.forEach(item => { worksheet.addRow([item.id, item.name, item.age]); }); // 将工作簿转换为二进制流 workbook.xlsx.writeBuffer().then(buffer => { const blob = new Blob([buffer], { type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' }); saveAs(blob, 'data.xlsx'); }); } ``` 这段代码首先定义了一个函数 `exportToExcel` 接受一组数据作为参数,在其中构建一个新的 Excel 工作薄,向其添加一行或多行记录。最后调用了 `writeBuffer()` 方法将整个文档序列化为缓冲区对象以便进一步处理或直接下载到客户端机器上。 #### 纯前端实现 CSV 文件导出 除了依赖外部库外,还可以采用纯 JavaScript 的方式快速生成简易版的数据表格——CSV 文件。这种方式不需要额外引入任何库,适合轻量级应用场景。 以下是基于 JSON 数据集生成 CSV 字符串通过浏览器内置接口触发下载过程的一个实例: ```javascript function downloadCsv(filename, rows) { const processRow = (row) => row.join(','); const csvArray = [ Object.keys(rows[0]), // 表头 ...rows.map((row) => Object.values(row).map(String), // 转换数值型字段为字符串形式 ), ]; const csvString = csvArray.map(processRow).join('\n'); const link = document.createElement("a"); const blob = new Blob([csvString], {type: "text/csv;charset=utf-8;"}); const url = URL.createObjectURL(blob); link.setAttribute("href", url); link.setAttribute("download", filename); link.click(); } // 示例用法 const sampleData = [{id: 1,name:"张三",age:25},{id:2,name:"李四",age:30}]; downloadCsv('sample.csv', sampleData); ``` 上述脚本实现了从给定的对象数组构造出逗号分隔值(Comma-Separated Values),即标准格式化的 CSV 文件内容,自动触发表单提交行为完成实际文件传输操作[^2]。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值