Vue 前端导出后端返回的excel文件方式

yizhihongxing

Vue 前端导出后端返回的 Excel 文件是一个常见的需求,以下是一种完整的实现攻略。

确认后端返回的 Excel 文件格式

在实现 Vue 前端导出后端返回的 Excel 文件之前,我们需要先确认后端返回 Excel 文件的格式。通常情况下,我们可以使用两种方式来返回 Excel 文件:

1. 直接返回二进制流

后端直接将 Excel 文件的二进制流作为响应的 body 返回给前端,前端使用 Blob 对象接受响应并进行下载。对于这种方式,前端代码如下:

// 定义下载 Excel 文件的方法
function downloadExcel () {
    axios({
        method: 'get',
        url: '/api/excel',
        responseType: 'blob'
    }).then((response) => {
        const blob = new Blob([response.data])
        const fileName = 'excel.xlsx'
        if (window.navigator.msSaveOrOpenBlob) { // IE
            navigator.msSaveBlob(blob, fileName)
        } else {
           const link = document.createElement('a')
           link.href = window.URL.createObjectURL(blob)
           link.download = fileName
           link.click()
           window.URL.revokeObjectURL(link.href)
        }
      })
}

后端代码如下:

# 引入相关的库和模块
import openpyxl
from flask import make_response

# 定义获取 Excel 文件数据的方法
def get_excel_data():
    wb = openpyxl.Workbook()
    ws = wb.active
    ws['A1'] = 'Hello, World!'
    response = make_response(wb.save(filename='excel.xlsx'))
    response.headers['Content-Type'] = 'application/octet-stream'
    response.headers["Content-Disposition"] = "attachment; filename=excel.xlsx"
    return response

# 定义获取 Excel 文件的接口
@app.route('/api/excel')
def download_excel():
    return get_excel_data()

2. 返回 base64 格式的 Excel 文件

后端将 Excel 文件转换成 base64 格式的字符串,作为响应的 body 返回给前端,前端使用 a 标签下载。对于这种方式,前端代码如下:

// 定义下载 Excel 文件的方法
function downloadExcel () {
    axios.get('/api/excel', {
        responseType: 'blob'
    }).then(response => {
        const blob = new Blob([response.data])
        const fileName = 'excel.xlsx'
        const URL = window.URL.createObjectURL(blob)
        const aLink = document.createElement('a')
        aLink.href = URL
        aLink.setAttribute('download', fileName)
        document.body.appendChild(aLink)
        aLink.click()
        document.body.removeChild(aLink)
    })
}

后端代码如下:

# 引入相关的库和模块
import base64
import openpyxl
from flask import jsonify

# 定义获取 Excel 文件数据的方法
def get_excel_data():
    wb = openpyxl.Workbook()
    ws = wb.active
    ws['A1'] = 'Hello, World!'
    file_content = base64.b64encode(wb.save(filename='in_memory_workbook.xlsx')).decode('utf-8')
    return jsonify({'file_content': file_content})

# 定义获取 Excel 文件的接口
@app.route('/api/excel')
def download_excel():
    return get_excel_data()

注意事项

  • 前端使用 Blob 对象无法在 IE 浏览器中下载 Excel 文件,需要使用 msSaveBlob 方法进行处理。
  • 后端生成 Excel 文件的方法可以使用 openpyxl 等第三方库和模块。
  • 后端返回 Excel 文件需要设置正确的 Content-Type 和 Content-Disposition。
  • 前端从后端获取 Excel 文件数据时需要设置 responseType 为 blob。
  • 在使用 base64 格式返回 Excel 文件时,需要将返回的数据类型设置为 json。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Vue 前端导出后端返回的excel文件方式 - Python技术站

(0)
上一篇 2023年5月27日
下一篇 2023年5月27日

相关文章

  • vue 使用localstorage实现面包屑的操作

    下面就来详细讲解一下“vue 使用localstorage实现面包屑的操作”的完整攻略。 介绍 面包屑(Breadcrumbs)是一种导航方式,逐级显示访问页面的位置,提升用户体验。在实际开发项目中,经常需要使用面包屑来展示当前所在页面的路径信息。而使用 localStorage 方式记录面包屑信息,则可以让用户在刷新页面或从其他页面跳转回来时仍然可以保留之…

    Vue 2023年5月28日
    00
  • 微前端框架qiankun源码剖析之上篇

    微前端框架qiankun源码剖析之上篇 介绍 本篇文章将深入剖析微前端框架qiankun的源码,并且讨论它的工作原理和实现细节。qiankun是一个优秀的微前端解决方案,它可以帮助我们将多个独立的单页应用程序整合到一个整体中,从而实现一个统一的用户体验。在这篇文章中,我们将介绍qiankun的两大核心模块,分别是“qiankun”和“single-spa”,…

    Vue 2023年5月28日
    00
  • vue改变循环遍历后的数据实例

    要改变vue中循环遍历后的数据实例,一般会采用以下两种方式: 1.直接修改数组 vue中使用v-for进行循环遍历时,实际上是遍历数组来生成页面内容。因此,我们可以直接对绑定的数据数组进行修改,来达到改变循环遍历后的数据实例的目的。下面是一个示例: <template> <div> <p v-for="(item, i…

    Vue 2023年5月27日
    00
  • SpringBoot+Vue.js实现前后端分离的文件上传功能

    以下是”SpringBoot+Vue.js实现前后端分离的文件上传功能”的完整攻略: 1. 前置条件 已安装好Java开发环境和Maven构建工具 已创建好一个基于SpringBoot的Web项目 已安装好Vue.js前端框架 2. 实现后端文件上传功能 2.1. 添加Multipart依赖 在项目的pom.xml文件中添加Multipart依赖: <…

    Vue 2023年5月28日
    00
  • vue.js中$set与数组更新方法

    当使用 Vue.js 进行开发的时候,因其响应式的数据绑定特性,我们通常使用数组来绑定和更新数据。但是由于 JavaScript 的限制,Vue.js 并不能检测数组的变化,比如直接改变数组的某个元素,或者修改数组的长度,这样就会导致视图不会更新而产生问题。因此,我们需要使用一些特殊的方法来更改数组并确保视图更新,Vue.js 提供了两种方法: 直接利用 V…

    Vue 2023年5月28日
    00
  • vue3 element的Form表单用法实例

    我来为你详细讲解“Vue3 Element的Form表单用法实例”的完整攻略: 1. 背景介绍 首先我们来了解一下Vue3 Element,它是一个基于Vue.js框架开发的UI组件库,包含一系列常用的UI组件,非常易于使用和定制。 其中最常用的组件之一就是Form表单,它为我们提供了各种输入控件和验证方法,可以非常方便地构建表单界面,下面就和大家分享一下F…

    Vue 2023年5月28日
    00
  • 详解微信小程序框架wepy踩坑记录(与vue对比)

    接下来我将详细讲解一下“详解微信小程序框架wepy踩坑记录(与vue对比)”这篇文章的完整攻略。 标题 首先,文章的标题应该清晰、明确、准确地概括文章的主题内容,能够体现文章的重点和亮点。 引言 在引言中,应该简要介绍wepy框架和vue框架,并指出其优缺点。 体 在主要内容的部分,应该详细讲解wepy框架的使用、踩坑记录和与vue框架的对比。需要突出wep…

    Vue 2023年5月27日
    00
  • python3实现将json对象存入Redis以及数据的导入导出

    下面是详细的攻略。 1. 安装redis-py 首先需要安装redis-py库,可以通过pip直接安装: pip install redis 2. 创建redis连接对象 接下来需要创建一个redis连接对象,连接Redis服务器。可以通过如下代码创建: import redis redis_host = ‘localhost’ redis_port = 6…

    Vue 2023年5月28日
    00
合作推广
合作推广
分享本页
返回顶部