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

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项目中使用eslint+prettier规范与检查代码的方法

    使用 Eslint 和 Prettier 来规范和检查 Vue 项目的代码是很有必要的,可以提高代码质量和可维护性,这里提供一个完整的攻略。 安装 Eslint 和 Prettier 首先,需要在项目中安装 Eslint 和 Prettier。可以使用 npm 或者 yarn 来安装。 npm install eslint prettier eslint-p…

    Vue 2023年5月27日
    00
  • vue.js在标签属性中插入变量参数的方法

    在Vue.js中,我们可以使用{{ }}来插入数据,这个特性被称为数据绑定。但在某些情况下,我们想要在标签属性中插入变量,该怎么做呢?下面是详细攻略和示例说明。 使用v-bind指令 在 Vue.js 中,我们可以使用指令 v-bind 来动态地绑定一个或多个属性,这也是在标签属性中插入变量的一种方式。 示例1:动态绑定class属性 <templat…

    Vue 2023年5月27日
    00
  • vue demi支持sfc方式的vue2vue3通用库开发详解

    下面是关于“vue demi支持sfc方式的vue2vue3通用库开发详解”的完整攻略: 什么是vue demi Vue demi 是一个开源库,它可以让你使用 Vue.js 同时支持 Vue.js 2.x 和 Vue.js 3.x。Vue demi 内部通过条件编译定义了两份代码,以便在不同版本的 Vue.js 之间切换。当构建库时,可以使用 Vue de…

    Vue 2023年5月28日
    00
  • 使用vue编写h5公众号跳转小程序的实现代码

    要使用Vue编写H5公众号跳转小程序的实现代码,需要遵循以下步骤: 1. 获取小程序的AppID 获取小程序的AppID,这个AppID将在后面的代码中使用到。可以在小程序的开发设置中找到。 2. 使用微信JS-SDK 在H5公众号页面中引入微信JS-SDK,使用微信JS-SDK提供的API跳转小程序。需要在微信开放平台申请JS-SDK权限并获取AppID和…

    Vue 2023年5月27日
    00
  • vue中的生命周期及钩子函数

    Vue 是一款流行的前端框架,它的设计理念是数据驱动视图。在 Vue 中,每个组件都有一组生命周期钩子函数。钩子函数是指在组件的某个时刻会被调用的函数。Vue 的生命周期分为四个阶段:创建、挂载、更新和销毁阶段。 创建阶段的生命周期钩子函数 在创建阶段,Vue 将会创建组件的实例,并先后调用以下生命周期钩子函数: beforeCreate 在实例被创建之前,…

    Vue 2023年5月27日
    00
  • 关于vue组件的更新机制 resize() callResize()

    Vue.js组件更新机制是主要的知识点之一,正确理解组件的更新机制,有助于我们更好地组织和管理Vue组件,提高Vue.js开发的效率。其中,resize()和callResize()是Vue.js组件更新机制的两个关键点,它们具体所代表的含义和作用在下面进行详细解释。 Vue组件的更新机制概述 Vue.js采用了渐进式的开发方式,组件是Vue.js中最基本的…

    Vue 2023年5月27日
    00
  • vue router返回到指定的路由的场景分析

    下面是关于“Vue Router返回到指定的路由的场景分析”的完整攻略。 1. 场景描述 在使用Vue Router构建单页应用程序时,我们可能会遇到需要在路由之间来回切换的情况。有时,我们需要从一个页面返回到上一级页面,而又不想回到整个路由的初始状态,而是要返回到之前指定的某个路由,这时就需要用到Vue Router返回到指定路由的功能了。 2. 方案分析…

    Vue 2023年5月28日
    00
  • Vue基础知识快速入门教程

    Vue基础知识快速入门教程 Vue.js是一种轻量级的JavaScript框架,用于构建Web应用程序。它是一种前端框架,可以轻松地创建单页应用程序和动态Web应用程序。在这个快速入门教程中,我们将涵盖一些Vue.js的基础知识,以及如何使用Vue.js构建一个简单的Web应用程序。 安装Vue.js 要开始使用Vue.js,我们首先需要安装它。我们可以通过…

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