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.js中created方法作用

    Vue.js 中的 created() 方法是 Vue 实例生命周期钩子函数之一,用于在 Vue 实例创建并构建完毕后被触发执行。接下来,我将详细介绍 created() 方法的作用和用法。 created() 方法的作用 在 Vue.js 应用中使用 created() 方法通常有以下一些作用: 初始化一些数据,包括组件中的变量,是最常用的 created…

    Vue 2023年5月27日
    00
  • vue elementUI 表单校验功能之数组多层嵌套

    我将为您提供关于“vue elementUI 表单校验功能之数组多层嵌套”的完整攻略。 1. 前置知识 在学习“vue elementUI 表单校验功能之数组多层嵌套”前,需要掌握以下知识点: Vue.js基础使用方法 Vue组件和Props使用方法 ElementUI表单组件使用方法 2. 数组多层嵌套表单校验方法 默认情况下,ElementUI只针对表单…

    Vue 2023年5月29日
    00
  • 分析ES5和ES6的apply区别

    关于分析ES5和ES6的apply区别,我们从以下几个方面来讲解。 ES5 apply 在 ES5 中,apply 是函数的一个方法,它是为了使函数支持传递数组作为参数而存在的,它的语法如下: func.apply(thisArg, [argsArray]) 其中,thisArg 指定了函数被执行时所绑定的 this 对象,argsArray 则是一个数组,…

    Vue 2023年5月28日
    00
  • vue 如何实现表单校验

    下面是 “Vue 如何实现表单校验” 的完整攻略。 使用 Vue.js 实现表单校验 Vue.js 做为一款流行的前端框架,提供了很好的表单校验的支持。Vue.js 2.x 版本提供了 “v-model” 指令和 “validate” 方法,可以让我们快速方便地实现表单校验。 下面将介绍两个示例,来详细讲解 Vue.js 如何实现表单校验。 示例一:基础校验…

    Vue 2023年5月27日
    00
  • Vue首屏加载过慢出现白屏的6种优化方案汇总

    当使用Vue.js开发网站时,如果页面首屏加载过慢,会出现白屏现象,这不仅对用户体验不友好,还会影响搜索引擎收录等问题。为了解决这个问题,我们可以尝试以下6种优化方案。 1. 使用首屏骨架屏 在页面白屏的情况下,优化方案之一是使用首屏骨架屏。骨架屏是一种占位符,能够显示页面主要内容的布局和结构,让用户能够感知到页面加载的进度,提高用户体验。我们可以使用Vue…

    Vue 2023年5月28日
    00
  • 让你30分钟快速掌握vue3教程

    下面是详细讲解“让你30分钟快速掌握Vue3教程”的完整攻略: 1. 前置知识 在学习Vue3之前,最好了解以下知识: 基本的HTML、CSS和JavaScript知识。 Vue.js的基本概念和语法。如果你不了解Vue.js,请先学习Vue.js的教程。 2. 安装以及项目搭建 首先要安装Vue.js 3。可以使用以下命令安装: npm install -…

    Vue 2023年5月27日
    00
  • vue 实现列表跳转至详情且能添加至购物车功能

    下面是“vue 实现列表跳转至详情且能添加至购物车功能”的攻略。该攻略的主要步骤如下: 构建商品列表页 构建商品详情页 实现跳转及传参功能 实现购物车功能 下面将详细介绍这些步骤。 构建商品列表页 首先需要构建一个商品列表页面,用于展示商品列表及其相关信息。可以使用v-for指令循环遍历商品数组,并通过router-link标签实现跳转到商品详情页。示例代码…

    Vue 2023年5月27日
    00
  • Vue中map()的用法案例

    下面是关于“Vue中map()的用法案例”的完整攻略。 什么是map()函数 map()函数是JavaScript中的一个方法,它可以在一个数组上调用,返回一个新的数组。这个方法作用于数组的每一项来创建一个新的值。Vue中的map()函数也和JavaScript中的map()函数相似,但是它适用于Vue组件中的一个对象数组。 Vue中map()函数的用法 在…

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