vue使用axios导出后台返回的文件流为excel表格详解

yizhihongxing

下面是详细讲解“vue使用axios导出后台返回的文件流为excel表格”的攻略。

1. 准备工作

首先,我们需要准备一些工作。这些工作包括:

  • 安装vue和axios库
  • 安装js-xlsx库(用于处理excel文件)
  • 后台返回的文件流是excel格式
  • 后台需要返回file流类型,不能直接返回json

2. 导出excel表格

前端代码示例:

<template>
  <div>
    <button @click="exportExcel">导出Excel</button>
  </div>
</template>

<script>
import axios from 'axios'
import XLSX from 'xlsx'

export default {
  name: 'ExportExcel',
  methods: {
    exportExcel() {
      axios({
        url: '/api/exportExcel',
        method: 'GET',
        responseType: 'arraybuffer'  // 接收二进制文件流
      }).then(res => {
        const content = res.data
        const blob = new Blob([content], { type: 'application/octet-stream' })
        const fileName = 'export.xlsx'

        if (typeof window.navigator.msSaveBlob !== 'undefined') {
          window.navigator.msSaveBlob(blob, fileName)
        } else {
          const fileUrl = window.URL.createObjectURL(blob)
          const a = document.createElement('a')
          a.href = fileUrl
          a.target = '_blank'
          a.download = fileName
          document.body.appendChild(a)
          a.click()
          document.body.removeChild(a)
        }
      })
    }
  }
}
</script>

其中,我们通过axios的get方法获取后台返回的文件流(responseType为arraybuffer类型),然后利用Blob来创建一个二进制文件流实例,在通过a标签来进行下载。如果当前用户浏览器支持msSaveBlob,则直接调用window.navigator.msSaveBlob方法。否则,就通过URL.createObjectURL方法创建一个文件地址、设置和删除一个a标签,完成下载。

后台代码示例(node.js):

router.get('/exportExcel', async (ctx) => {
  const data = await UserService.getAllUsers()  // 获取所有用户数据
  const workSheet = XLSX.utils.json_to_sheet(data)  // 将json数据转换为worksheet(excel表格的一张)
  const workBook = XLSX.utils.book_new()  // 新建workbook
  XLSX.utils.book_append_sheet(workBook, workSheet, 'Sheet1')  // 向workbook中添加worksheet
  const file = XLSX.write(workBook, { type: 'buffer' })  // 将workbook写入文件buffer

  ctx.response.type = 'application/octet-stream'  // 设置响应类型为二进制流
  ctx.response.body = file  // 返回二进制文件流
})

在这里,我们使用了node.js的路由,并通过UserService.getAllUsers()获取所有用户数据,然后将JSON数据转换为Excel worksheet,最后使用js-xlsx库的write方法将worksheet写入文件buffer,最终返回给前端的是一个文件流(blob)。

3. 总结

在本文中,我们学习了如何使用Vue和axios来导出后台返回的Excel表格,以及如何在node.js后台中生成Excel表格。同时,我们也学习了如何使用js-xlsx库来处理Excel文件。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:vue使用axios导出后台返回的文件流为excel表格详解 - Python技术站

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

相关文章

  • Vue项目中封装axios的方法

    下面我来详细讲解一下“Vue项目中封装axios的方法”的完整攻略。 为什么要封装axios? 首先,我们需要知道为什么要封装axios。axios是一个非常好用的第三方库,但是在很多情况下,我们需要对axios进行一些封装才能更好地满足我们的需求。主要有以下几点原因: 方便统一处理请求异常、错误提示、请求头等 方便设置全局loading效果 方便在请求前和…

    Vue 2023年5月28日
    00
  • Vue的路由及路由钩子函数的实现

    来给您详细讲解一下 “Vue的路由及路由钩子函数的实现”。 一、Vue的路由机制 Vue.js 是一款轻量级的 JavaScript 框架,为我们提供了一套完整的解决方案。Vue 的路由机制实现了单页应用(SPA)的核心,通过改变 URL 地址实现页面的切换,而不像传统的多页应用刷新整个页面。Vue 的路由是以插件形式进行管理的,它提供了很多的路由接口和钩子…

    Vue 2023年5月27日
    00
  • 如何修改Vue项目运行的IP和端口

    当我们开发 Vue.js 项目时,默认情况下,项目运行在本地的 IP 地址和端口上。但是有些情况下,我们可能需要修改这些默认设置。下面是详细讲解如何修改 Vue.js 项目运行的 IP 和端口的攻略: 1. 修改 package.json 文件中的 scripts 配置 Vue.js 项目的 package.json 文件中有一项 scripts,其中包含了…

    Vue 2023年5月28日
    00
  • vue+elementUI配置表格的列显示与隐藏

    下面是关于“vue+elementUI配置表格的列显示与隐藏”的完整攻略。 步骤一:安装必要的依赖 首先,需要安装element-ui和vue-resize组件依赖,可以使用npm安装,具体命令如下: npm install element-ui vue-resize –save 其中,element-ui用于构建表格组件,vue-resize用于监听窗口…

    Vue 2023年5月28日
    00
  • Vue组件之非单文件组件的使用详解

    下面我将为您详细讲解“Vue组件之非单文件组件的使用详解”的完整攻略。 什么是非单文件组件? 非单文件组件是指将组件的HTML、JS、CSS等代码都写在同一个文件中,并使用Vue.extend()方法将其构造成组件的一种方式。这种方式比较旧,但在一些老的Vue项目中仍有应用。目前Vue的官方文档已经不推荐使用这种方式。 非单文件组件的优缺点 优点 代码简单。…

    Vue 2023年5月28日
    00
  • Vue如何通过浏览器控制台查看全局data值

    要通过浏览器控制台查看Vue全局data值,可以依次执行以下步骤: 步骤一:打开页面并打开控制台 首先,在浏览器中打开Vue页面,然后打开开发者工具(可以通过F12快捷键或右键菜单打开)。 步骤二:选择Vue实例 在控制台中输入以下代码,获取Vue实例: const vm = Vue.instance 步骤三:查看全局data值 有两种方法可以查看全局dat…

    Vue 2023年5月27日
    00
  • 微信jssdk用法汇总

    下面我将详细讲解“微信jssdk用法汇总”的完整攻略。 什么是微信jssdk? 微信JSSDK(JavaScript SDK)是一款基于微信公众号开发的JavaScript插件,为开发者提供了直接在公众号内调用微信原生功能的能力,如获取用户信息、调起微信支付、分享功能、扫码等。使用JSSDK可以让开发者更方便的集成微信的功能,提升网站与微信公众号的交互性。 …

    Vue 2023年5月28日
    00
  • 使用Vue.$set()或者Object.assign()修改对象新增响应式属性的方法

    使用Vue.js时,我们通常会遇到在组件渲染时需要动态新增响应式属性的情况。Vue提供了两种方式使对象属性(非响应式的)能被监听到,即Vue.$set()和Object.assign()。 使用Vue.$set()方法 Vue.$set()方法是Vue.js提供的Vue实例方法,用于响应式地向已有对象添加新的属性,或修改已有属性的值。这个方法的第一个参数是目…

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