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读取本地静态文件json的2种方法以及优缺点

    下面是详细的攻略。 Vue如何读取本地静态文件json 在Vue中,我们可以使用以下两种方法读取本地静态文件json。 方法一:使用Ajax来读取本地静态文件json 第一种方法是使用Ajax进行读取,在Vue中可以通过axios库来实现Ajax请求。将本地静态文件JSON作为静态资源放在static文件夹下: |– src | |– App.vue |…

    Vue 2023年5月28日
    00
  • Vue踩坑之Vue Watch方法不能监听到数组或对象值的改变详解

    让我来详细讲解“Vue踩坑之Vue Watch方法不能监听到数组或对象值的改变详解”的完整攻略。 什么是Vue Watch? 首先,Vue Watch 是 Vue.js 的一个非常重要的API。它用于监听数据的变化,以便在数据变化时更改视图或执行其他操作。可以使用 Watch 来监听单个属性或整个对象。当监听到数据变化时,Watch 会自动触发回调函数。 问…

    Vue 2023年5月29日
    00
  • 分分钟学会vue中vuex的应用(入门教程)

    分分钟学会vue中vuex的应用(入门教程) 简介 Vuex是一个专门为Vue.js设计的状态管理库,它可以简化Vue.js应用程序中状态管理的开发流程,提高应用程序的性能和可维护性。 安装 Vuex可以通过npm进行安装,打开命令行界面并输入以下命令: npm install vuex 配置 在Vue.js应用程序中使用Vuex,需要依次执行以下步骤: 引…

    Vue 2023年5月27日
    00
  • Vue2 的 diff 算法规则原理详解

    Vue2 的 diff 算法规则原理详解 什么是 diff 算法? 在前端框架中,常常需要比较新旧虚拟 DOM 树来确定需要更新的节点,以此进行更新操作。而这个过程就被称之为 diff(差异)算法。 diff 算法通过比较两棵 DOM 树的差异,把更新的内容应用到真实 DOM 上,最终展示出最新的页面。这个过程其实也是整个前端框架的核心思想,而 Vue2 中…

    Vue 2023年5月27日
    00
  • JS 图片压缩原理与实现方法详解

    JS 图片压缩原理与实现方法详解 原理介绍 图片压缩是指在保证图片质量的前提下,通过降低图片的分辨率、压缩比率等方式来减小图片的体积,从而达到优化页面加载速度的目的。在网页中,对于图片的大小不同,会直接影响页面的加载速度,特别是对于移动端的用户体验更加重要。 在实现 JavaScript 图片压缩的时候,常见的有两种方式: HTML5 的 Canvas + …

    Vue 2023年5月28日
    00
  • Vuex拿到state中数据的3种方式与实例剖析

    来详细讲解“Vuex拿到state中数据的3种方式与实例剖析”。 1. 3种获取state数据的方式 Vuex中,我们可以通过以下3种方式来获取state中的数据: 1.1 在组件中通过$store.state.xxx获取 通过在组件中访问$store.state.xxx,可以获取到store中某个模块的state数据,举个例子:如果我们想拿到store中名…

    Vue 2023年5月28日
    00
  • JavaScript+CSS实现的可折叠二级菜单实例

    下面是“JavaScript+CSS实现的可折叠二级菜单实例”的完整攻略。 1. 实现思路 该二级菜单实例的实现思路如下: 初始状态二级菜单处于收缩状态,点击主菜单可以展开或关闭对应的二级菜单。 主菜单和二级菜单分别定义为一组HTML结构,通过CSS样式实现布局和样式。 通过JavaScript事件绑定实现主菜单点击后对应的二级菜单的展开和收缩。 2. HT…

    Vue 2023年5月28日
    00
  • vue踩坑记录之数组定义和赋值问题

    首先,我需要说明一下本文讨论的vue版本是Vue 2。 一、问题描述:在vue中,我们经常要定义和操作数组。但是,在定义和赋值数组时,可能会遇到某些坑点。主要包括以下两点: 1、不能直接使用数组的方式为data中的数组元素赋值。2、在组件内部定义的数组会被所有组件共享。 下面,我们针对这两个坑点进行分别说明。 二、问题解决: 1、不能直接使用数组的方式为da…

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