本文记录一下在Vue中实现导出Excel表格的做法。参考度娘上各篇博客,最后实现功能

Excel表格,我的后端返回的是数据流,然后文件名是放进了content-disposition中,前端进行获取。(前端也可以自己设置文件名)这其中遇到两个问题,第一是文件名获取不到;第二是返回的数据data已经被转成了Blob无法读取错误时后端反馈的信息

不多BB,上代码和解决方法:

第一步发送请求

 Axios.request({
method: 'GET',
url: `${baseUrl}/order/export`, //请求地址
responseType: 'blob', //responseType ->用来设置返回值,默认是'',等同于text,数据格式的转换是浏览器处理的
params: data,
timeout: 20000,
withCredentials: true,
})

第二步当请求发送以后接收后端返回的数据。

      无论是成功时后端返回文档流还是失败返回一个对象,都会因为responseType: 'blob'变成一个Blob对象。当后台解析错误的时候,返回的就是正常的错误对象,包含错误码和错误信息,如果不做处理,那么错误状态和成功状态都是blob类型,无法捕获;

所以需要对返回值做特殊处理,尝试把blob转换为json格式,如果转换成功则说明返回的数据不是文档流,后台出错,反之则文档转换正常:

Axios.request({
            method: 'GET',
            url: `${baseUrl}/order/export`,
            responseType: 'blob',
            params: data,
            timeout: 20000,
            withCredentials: true,
          }).then((res) => {
       //判断后端解析是否成功(成功:数据为文档流继续操作。失败:拿到错误信息,提示用户)
            let data = res.data;
            let fileReader = new FileReader();
            fileReader.onload = function () {
              try {
                let jsonData = JSON.parse(this.result);
                if (jsonData.result === "2") { 
                  // 说明是普通对象数据,且返回错误类型是2,直接将错误信息给用户看
                  // to do something
                  Message.error(jsonData.msg)
                }
              } catch (err) {
                // 解析成对象失败,说明是正常的文件流
                // alert('ok');
              }
            };
            fileReader.readAsText(data);
       
        //成功继续处理后端返回的文档流数据
            const link = document.createElement('a')
            let blob = new Blob([res.data], { type: 'application/vnd.ms-excel' });
            link.style.display = 'none'
            link.href = URL.createObjectURL(blob);
            // link.setAttribute('download', '用户_' + '.xlsx')    前端自己设置下载的文件名称
       //能获取到content-disposition信息,需要后端在后台接口中,在响应头中增加:context.Response.Headers.Add("Access-Control-Expose-Headers", "Content-Disposition"); 前端便能获取到
            var fileName = res.headers['content-disposition'].split(";")[1].split("filename=")[1]; 
            link.download = decodeURI(escape(fileName))
            document.body.appendChild(link)
            link.click()
            document.body.removeChild(link)
            this.loading = !this.loading
          }).catch(error => {
            console.log(15, error)
          })
        }
      }

  在Vue中实现Excel文件导出大体如此,希望可以帮助到你哈。有不正之处,留言指点

参考博客:https://blog.csdn.net/dongguan_123/article/details/100183284

        https://www.cnblogs.com/nanamiao/p/9407576.html

        https://blog.csdn.net/lianwenxiu/article/details/94573394

        https://www.jb51.net/article/156534.htm

Vue中导出Excel表格方法的更多相关文章

  1. 在vue中导出excel表格

    初学者学习vue开发,想把前端项目中导出Excel表格,查了众多帖子,踩了很多坑,拿出来与大家分享一下经验. 安装依赖 //npm npm install file-saver -S npm inst ...

  2. vue中导出Excel表格

    项目中我们可能会碰到导出Excel文件的需求,一般后台管理系统中居多,将table中展示的数据导出保存到本地.当然我们也可以通过一些处理来修改要导出的数据格式,具体需求具体对待. 1.首先我们需要安装 ...

  3. asp.net中导出Excel的方法

    一.asp.net中导出Excel的方法: 本文转载 在asp.net中导出Excel有两种方法,一种是将导出的文件存放在服务器某个文件夹下面,然后将文件地址输出在浏览器上:一种是将文件直接将文件输出 ...

  4. spring mvc项目中导出excel表格简单实现

    查阅了一些资料,才整理出spring mvc 项目导出excel表格的实现,其实很是简单,小计一下,方便以后查阅,也希望帮助有需要的朋友. 1.导入所需要依赖(Jar包).我使用的是maven,所以坐 ...

  5. C#导出Excel表格方法

    using NPOI.SS.UserModel; using NPOI.XSSF.UserModel; using NPOI.SS.Formula.Functions; using System.Re ...

  6. Vue项目中将table组件导出Excel表格以及打印页面内容

    体验更优排版请移步原文:http://blog.kwin.wang/programming/vue-table-export-excel-and-print.html 页面中显示的table表格,经常 ...

  7. php导出excel表格的使用

    网站后台有很多列表数据,常常都会有导出excel表格的需求,和大家分享一个实用的导出excel表格方法: 不多说,上代码: /** * @param array $data 要导出的数据 * @par ...

  8. java 实现用户自由选择字段实现导出EXCEL表格

    package com.thinkgem.jeesite.common.utils.excel; import java.io.File; import java.io.OutputStream; i ...

  9. vue 导出excel表格

    对于涉及到数据比较多的管理后台导出excel 表格这个需求就非常的常见了 所以? vue 怎么到处excel表格的? 有两种办法 1:请求接口后台直接给你的是excel文件,你需要做的就是怎么接收ex ...

随机推荐

  1. Code::Blocks20.03 编译报错

    Code::Blocks最近出了新版20.03,进入官网选择下载了附带MinGW版的安装包后,编译HelloWorld就报错(CB一直以来都有问题,新版还是这样...) 主要有两个问题: ld.exe ...

  2. 物流配送中心管理系统(SSM+MYSQL)

    工程项目视频观看地址:www.toutiao.com/i6804066711… 本文首先对系统所涉及到的基础理论知识进行阐述,并在此基础上进行了系统分析.系统分析是平台开发的一个不可缺少的环节,为了能 ...

  3. python之邮件发送自动化

    # -*- coding:utf-8 -*-#@Time : 2020/3/24 22:55#@Autor: Mr.White#@File : 发送邮件.py 一.导入所需要的类 import smt ...

  4. 【图论算法】LCA最近公共祖先问题

    LCA模板题https://www.luogu.com.cn/problem/P3379题意理解 对于有根树T的两个结点u.v,最近公共祖先LCA(u,v)表示一个结点x,满足x是u.v的祖先且x的深 ...

  5. Docker 镜像制作教程:针对不同语言的精简策略

    本系列文章将分为三个部分: 第一部分着重介绍多阶段构建(multi-stage builds),因为这是镜像精简之路至关重要的一环.在这部分内容中,我会解释静态链接和动态链接的区别,它们对镜像带来的影 ...

  6. 什么是virtual string tree?

    Virtual stringtree(以后简称VST)是一个提供源码的免费的第三方插件,支持DELPHI和C++builder,可在http://www.soft-gems.net/下载到最新的版本. ...

  7. php IE中文乱码

    echo mb_convert_encoding("你是我的朋友", "big5", "GB2312"); 详细出处参考:http://ww ...

  8. 201771010128王玉兰《面向对象程序设计(Java)》第八周学习总结

    第一部分:理论知识部分总结 (1)接口:接口不是类,而是对类胡一组需求描述,由常量肯一组抽象方法组成. a:接口中不包括变量和有具体实现的方法 b:只要类实现了接口,则该类要遵从接口描述的统 一格式进 ...

  9. SpringCloud异常处理统一封装我来做-使用篇

    SpringCloud异常处理统一封装我来做-使用篇 简介 重复功能我来写.在 SpringBoot 项目里都有全局异常处理以及返回包装等,返回前端是带上succ.code.msg.data等字段.单 ...

  10. Gym101630L Laminar Family

    题目链接:https://cn.vjudge.net/problem/Gym-101630L 题目大意: 对于一个集合的集合,若其中任意两个集合 \(A\) 和 \(B\) 都满足下述三个条件之一:\ ...