vue 导出excel

// 此处为代码主要功能,如想知道 download 这三个传参的具体类型,可直接看下一个代码块
export function download(url, data, fileName) {
  return new Promise((resolve, reject) => {
    // 先来一段经典的element加载界面
    const loading = Loading.service({
      text: '正在下载数据...',
      background: 'rgba(0, 0, 0, 0.7)'
    });

    instance.request({
      url: url,
      method: 'post',
      data: data,
      timeout: 1200000,
      responseType: 'blob'
    }).then(res => {
      // 此处res的类型后端返回的是一个对象,由于我们下方代码只会用到res.data属性,我在这贴一下data的数据方便理解
      console.log(res); // res.data -> Blob {size: 5017, type: 'application/octet-stream'}
      loading.close();

      // 文件下载 上方展示了res.data的数据格式,此时创建一个Blob对象,将res.data的值传入,同时给定type类型
      // 此处略微说一下blob对象
      // 第一个参数: 为一个数据序列,可以是任意格式的值,例如,任意数量的字符串,Blobs 以及 ArrayBuffers
      // 第二个参数: 用于指定将要放入Blob中的数据的类型(MIME)(后端可以通过枚举MimeType.获取对应类型
      // Blob对象的基本属性
	  // size: Blob对象包含的字节数。(只读)
      // type: Blob对象包含的数据类型MIME,如果类型未知则返回空字符串。
      const blob = new Blob([res.data], {
        type: 'application/vnd.ms-excel'  // 此时设置的为导出excel,如果改成'application/vnd.ms-word',则为导出word
      });
      // 此处展示创建完成后blob的数据格式,方便理解
	  console.log(blob)  // Blob {size: 5017, type: 'application/vnd.ms-excel'}
	  
      // 创建一个a标签
      let link = document.createElement('a');
      // URL.createObjectURL() 方法会根据传入的参数创建一个指向该参数对象URL。
      // 此处传入了一个参数 blob,得到一个地址,将地址赋值给link.href,也就是a标签的href
      link.href = URL.createObjectURL(blob);
      link.setAttribute('download', fileName);
      // 此时这个link,也就是说这个a标签是这样的 <a href="blob:http://localhost:9527/e24444444-3c69-4444-4444-3463885f7754" download="班级管理详情统计数据.xlsx"></a>
      console.log(link)
      // 让这个a标签出发点击事件,即可完成导出功能
      link.click();
      link = null;
      Message.success('导出成功!');
    }).catch(err => {
      loading.close();
      reject(err);
    });
  });
}

// 此处return 的 download 有三个传参,分别对应上面代码的三个参数,如过想知道data的数据类型,看下一代码块
export function exportAllClassDetail(data) {
  return download('/api/excel/export/findAllClassesByConditions', data, '班级管理详情统计数据.xlsx');
}
// 此处为data数据类型
exportAllClassDetail({
  deptCode: this.listQuery.params.deptCode,
  className: this.className,
  classType: this.listQuery.params.classType,
  startTime: this.listQuery.params.startTime,
  majorName: this.majorName,
  major: this.listQuery.params.major,
  courseType: 1
})

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值