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

下面是详细讲解“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之文件加载执行全流程

    当浏览器加载Vue文件时,需要经过文件加载、解释和执行的过程,以下是Vue之文件加载执行全流程的攻略: 文件加载 首先,浏览器会从服务器端请求Vue文件。如果该Vue文件在浏览器缓存中已经存在,则浏览器直接从缓存中读取该文件,否则,浏览器会向服务器端请求该文件。 当Web服务器收到浏览器的Vue文件请求后,会将该文件返回给浏览器。浏览器接收到Vue文件后,会…

    Vue 2023年5月27日
    00
  • 详解Vue的键盘事件

    详解Vue的键盘事件 Vue.js是一个流行的JavaScript框架,它减轻了开发者在构建大型Web应用程序方面的工作负担,并将应用程序的数据和界面分离。Vue.js还提供了一些内置的事件绑定选项,其中包括与键盘事件相关的选项。 键盘事件介绍 键盘事件是用户通过打字机输入字符的过程中触发的事件。Vue.js提供了四种键盘事件: @keydown: even…

    Vue 2023年5月28日
    00
  • Vue.js条件渲染和列表渲染以及Vue中key值的内部原理

    Vue.js是一款前端框架,它提供了条件渲染和列表渲染这两种常用的渲染方式,可以轻松地实现复杂的页面功能。同时,Vue中的key值也非常重要,可以优化页面性能。 一、条件渲染 在Vue中,我们可以使用v-if、v-else-if、v-else指令实现条件渲染。这些指令会根据条件动态地切换显示和隐藏元素。 示例一: <template> <d…

    Vue 2023年5月27日
    00
  • vue中优雅实现数字递增特效的详细过程

    下面我将详细讲解“Vue中优雅实现数字递增特效的详细过程”。 步骤一:安装插件 Vue中实现数字递增特效需要使用一个叫vue-countup-v2的插件,这个插件可以实现数字的缓动、格式化等功能。我们可以通过npm安装这个插件,在命令行中输入以下命令: npm install –save vue-countup-v2 步骤二:注册组件 在我们使用这个插件之…

    Vue 2023年5月28日
    00
  • vue实现横向时间轴组件方式

    下面是关于如何使用Vue实现横向时间轴组件的详细攻略: 1. 确定组件的结构和样式 根据需求确定时间轴的结构和样式,例如需要横向展示一段时间内的事件,每个事件分为左和右两侧,左侧显示具体时间,右侧显示事件内容。横向时间轴通常需要使用CSS flexbox和grid等布局技术来实现。 2. 使用Vue创建组件 可以使用Vue的单文件组件(SFC)或render…

    Vue 2023年5月29日
    00
  • 详解vue.js移动端配置flexible.js及注意事项

    详解vue.js移动端配置flexible.js及注意事项 介绍 随着移动端市场的扩大,越来越多的网站和应用开始关注移动端的适配问题。Vue.js作为一种前端开发的流行框架,也需要考虑移动端适配问题。本文将介绍如何在Vue.js中配置flexible.js实现移动端适配,以及在使用过程中需要注意的细节。 flexible.js介绍 flexible.js是淘…

    Vue 2023年5月28日
    00
  • vant 时间选择器–开始时间和结束时间实例

    vant 时间选择器是一个基于Vue.js的组件库,其中包含了常用的时间选择器组件。下面就详细讲解vant 时间选择器的开始时间和结束时间实例的攻略。 一、引入组件 在使用 vant 时间选择器组件之前,需要先在项目中引入这个组件库。 <!– 引入样式文件 –> <link rel="stylesheet" href…

    Vue 2023年5月29日
    00
  • vue.js数据绑定操作详解

    Vue.js 数据绑定操作详解 Vue.js是一个流行的前端JavaScript框架,它最为突出的特性就是数据绑定。本文介绍Vue.js中的数据绑定操作,包括双向绑定、单向绑定、计算属性、侦听器等内容。同时在本文中,我们将以两条实例说明来进一步解析Vue.js的数据绑定操作。 双向绑定 Vue.js最为著名的特性就是双向绑定。即数据流可以自动的从视图更新到数…

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