Vue通过Blob对象实现导出Excel功能示例代码

yizhihongxing

Vue通过Blob对象实现导出Excel功能示例代码

在前端开发中常常需要将数据导出为Excel表格,那么在Vue中如何通过Blob对象实现导出Excel功能呢?本文将提供一份完整的攻略供大家参考。

步骤一:安装依赖

我们需要安装两个依赖,分别是xlsxfile-saver,前者用于生成Excel文件,后者用于保存Excel文件。我们可以使用npm来进行安装:

npm install xlsx file-saver --save

步骤二:引入依赖并导出Excel

我们需要在组件中引入这两个依赖:

import XLSX from 'xlsx'
import FileSaver from 'file-saver'

接着,我们可以定义一个方法来导出Excel文件,示例代码如下:

exportExcel() {
  // 首先,我们需要准备我们的数据
  const data = [
    [1, 'John Doe', 'john@example.com'],
    [2, 'Jane Doe', 'jane@example.com']
  ]

  // 创建一个Workbook对象
  const workbook = XLSX.utils.book_new()

  // 添加一个Worksheet
  const worksheet = XLSX.utils.aoa_to_sheet(data)
  XLSX.utils.book_append_sheet(workbook, worksheet, 'Sheet1')

  // 生成Excel文件
  const wbout = XLSX.write(workbook, { type: 'array', bookType: 'xlsx' })
  const blob = new Blob([wbout], { type: 'application/octet-stream' })

  // 保存文件
  FileSaver.saveAs(blob, 'example.xlsx')
}

上述代码中,我们首先准备了我们的数据,再创建一个Workbook对象,之后添加一个Worksheet,把数据写入Worksheet中,最后生成Excel文件并保存。在保存文件时,我们使用了Blob对象,将生成的Excel数据转换成二进制流,并指定了文件的Content-Typeapplication/octet-stream,以便浏览器将其当作文件下载。最后,我们使用FileSaver库中的saveAs方法将Blob对象保存为一个文件,其中第一个参数为Blob对象,第二个参数为要保存的文件名。

示例一:导出表格数据

这是一个让用户自行输入数据并导出的示例:

<template>
  <div>
    <table>
      <thead>
        <tr>
          <th>编号</th>
          <th>姓名</th>
          <th>邮箱</th>
        </tr>
      </thead>
      <tbody>
        <tr v-for="(item, index) in dataList" :key="index">
          <td>{{ item.id }}</td>
          <td>{{ item.name }}</td>
          <td>{{ item.email }}</td>
        </tr>
      </tbody>
    </table>

    <div>
      <label>ID:</label>
      <input v-model="id" type="text"><br>
      <label>姓名:</label>
      <input v-model="name" type="text"><br>
      <label>邮箱:</label>
      <input v-model="email" type="text"><br>
      <button @click="addData">添加数据</button>
      <button @click="exportExcel">导出Excel</button>
    </div>
  </div>
</template>

<script>
import XLSX from 'xlsx'
import FileSaver from 'file-saver'

export default {
  data() {
    return {
      dataList: [],
      id: '',
      name: '',
      email: ''
    }
  },

  methods: {
    addData() {
      const data = {
        id: this.id,
        name: this.name,
        email: this.email
      }
      this.dataList.push(data)
      this.clearForm()
    },

    clearForm() {
      this.id = ''
      this.name = ''
      this.email = ''
    },

    exportExcel() {
      const data = [['编号', '姓名', '邮箱']]
      this.dataList.forEach(item => data.push([item.id, item.name, item.email]))

      const workbook = XLSX.utils.book_new()
      const worksheet = XLSX.utils.aoa_to_sheet(data)
      XLSX.utils.book_append_sheet(workbook, worksheet, 'Sheet1')

      const wbout = XLSX.write(workbook, { type: 'array', bookType: 'xlsx' })
      const blob = new Blob([wbout], { type: 'application/octet-stream' })

      FileSaver.saveAs(blob, 'example.xlsx')
    }
  }
}
</script>

该示例中,我们首先定义了一个表格,用于展示数据。在下方,我们通过文本框和按钮,允许用户自行输入数据。其中的addData方法用于添加数据,clearForm方法用于清空表单。最后,我们定义了一个导出Excel的方法,与前面介绍的方法类似,不同之处在于这里我们需要动态生成数据。

示例二:从后端获取数据并导出

在实际开发中,我们常常需要从后端获取数据并将其导出为Excel文件。这里提供一个从后端获取数据并导出的示例:

<template>
  <div>
    <table>
      <thead>
        <tr>
          <th>编号</th>
          <th>姓名</th>
          <th>邮箱</th>
        </tr>
      </thead>
      <tbody>
        <tr v-for="(item, index) in dataList" :key="index">
          <td>{{ item.id }}</td>
          <td>{{ item.name }}</td>
          <td>{{ item.email }}</td>
        </tr>
      </tbody>
    </table>

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

<script>
import XLSX from 'xlsx'
import FileSaver from 'file-saver'

export default {
  data() {
    return { dataList: [] }
  },

  created() {
    // 获取数据
    this.getData()
  },

  methods: {
    getData() {
      axios.get('/api/data').then(res => {
        this.dataList = res.data
      }).catch(err => {
        console.error(err)
      })
    },

    exportExcel() {
      axios.get('/api/excel', { responseType: 'arraybuffer' }).then(res => {
        const data = new Uint8Array(res.data)
        const workbook = XLSX.read(data, { type: 'array' })
        const worksheet = workbook.Sheets[workbook.SheetNames[0]]
        const json = XLSX.utils.sheet_to_json(worksheet, { header: 1 })
        const headers = json[0]
        const rows = []
        json.slice(1).forEach(row => {
          const rowData = []
          headers.forEach(header => rowData.push(row[header]))
          rows.push(rowData)
        })

        const worksheet2 = XLSX.utils.aoa_to_sheet([headers, ...rows])
        const workbook2 = XLSX.utils.book_new()
        XLSX.utils.book_append_sheet(workbook2, worksheet2, 'Sheet1')

        const wbout = XLSX.write(workbook2, { type: 'array', bookType: 'xlsx' })
        const blob = new Blob([wbout], { type: 'application/octet-stream' })

        FileSaver.saveAs(blob, 'example.xlsx')
      }).catch(err => {
        console.error(err)
      })
    }
  }
}
</script>

该示例中,我们首先在组件的created生命周期钩子中调用getData方法,从后端获取数据并展示到表格中。在点击导出按钮时,我们通过axios库向后端发送请求来获取Excel文件的数据。因为后端返回的是二进制流,所以我们需要将responseType设置为arraybuffer,接着,我们将得到的二进制数据转换为Uint8Array类型,并传递给XLSX.read方法来解析Excel文件。解析完成后,我们将数据转换为二维数组,并将其写入到一个新的Workbook对象中,最后生成Excel文件并保存。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Vue通过Blob对象实现导出Excel功能示例代码 - Python技术站

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

相关文章

  • 何时/使用 Vue3 render 函数的教程详解

    关于“何时/使用 Vue3 render 函数的教程详解”的完整攻略,我会分为以下几个方面进行讲解: render函数是什么以及何时使用render函数 render函数的参数和返回值 如何编写render函数以及实例演示 vue3 render函数在自定义组件中的应用实例演示 下面我会详细阐述每个方面的内容。 1. render函数是什么以及何时使用ren…

    Vue 2023年5月29日
    00
  • vue 实现模糊检索并根据其他字符的首字母顺序排列

    实现模糊检索并根据其他字符的首字母顺序排列是前端开发中比较常见的需求之一,在 Vue 中也有很好的实现方式。 1.实现模糊检索功能 实现模糊检索的核心点是在数据源上进行筛选。假设我们有一个表格数据源: [ { name: ‘张三’, age: 21 }, { name: ‘李四’, age: 22 }, { name: ‘王五’, age: 23 }, { …

    Vue 2023年5月27日
    00
  • vue+video.js实现视频播放列表

    下面是关于“vue+video.js实现视频播放列表”的完整攻略。 1. 准备工作 安装 video.js 首先,我们需要安装 video.js。可以使用 npm 命令进行安装: npm install video.js –save 引入 video.js 在 Vue 项目的入口文件(比如 main.js)中,需要引入 video.js 和 video-j…

    Vue 2023年5月28日
    00
  • vue3 中的toRef函数和toRefs函数的基本使用

    那我来详细讲解一下“Vue3中的toRef函数和toRefs函数的基本使用”的完整攻略。 什么是toRef函数和toRefs函数 在Vue3中,我们可以使用toRef函数和toRefs函数来创建响应式数据。它们的作用是: toRef: 将一个普通的数据变成一个响应式的引用,当该数据更新时,组件也会相应地重新渲染。 toRefs: 将一个响应式对象中的所有属性…

    Vue 2023年5月28日
    00
  • Vue表单输入绑定的示例代码

    Vue表单输入绑定是Vue.js框架中的一个非常常用的功能,它可以让你通过双向数据绑定的方式更加轻松地处理表单输入和提交。 下面,我将为你展示Vue表单输入绑定的完整攻略,包括示例代码和说明。 示例代码 首先,我们来看一个简单的示例代码,该代码展示了如何使用v-model指令将表单输入与Vue实例中的数据进行绑定: <div id="app&…

    Vue 2023年5月27日
    00
  • vue使用vue-video-player插件播放视频的步骤讲解

    好的!下面我将为你详细讲解如何使用vue-video-player插件在Vue项目中播放视频的步骤。 1. 安装vue-video-player插件 在终端输入以下命令安装vue-video-player插件: npm install vue-video-player –save 2. 引入vue-video-player组件 在Vue项目的main.js…

    Vue 2023年5月28日
    00
  • vue实现桌面向网页拖动文件的示例代码(可显示图片/音频/视频)

    十分感谢您的提问。下面是我对”vue实现桌面向网页拖动文件的示例代码(可显示图片/音频/视频)”的解答。 首先,我们需要了解一下Drag and Drop API的基本用法。该API是在HTML5中引入的,并允许用户将元素拖放到指定的目标位置上。接下来,我们将根据这一概念给出完整的攻略。 1. 实现基本的拖放功能 下面是一个基本的HTML结构,它包含了两个d…

    Vue 2023年5月28日
    00
  • Vue.js展示AJAX数据简单示例讲解

    下面我将为你讲解如何在Vue.js中展示AJAX数据的完整攻略。 1. 起步 首先,我们需要安装npm包管理器,并使用它来安装Vue.js: npm install vue 安装完成后,在HTML文件中引入Vue.js: <script src="https://cdn.jsdelivr.net/npm/vue"></s…

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