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

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日

相关文章

  • 详解mpvue中小程序自定义导航组件开发指南

    “详解mpvue中小程序自定义导航组件开发指南”的完整攻略包括以下几个步骤: 1. 创建自定义组件 创建自定义导航组件的方法与创建普通自定义组件类似。在components目录下新建 cus-nav 文件夹,并在该文件夹下创建 cus-nav.vue 文件。 <template> <view> <view class=&quot…

    Vue 2023年5月27日
    00
  • Vue手把手教你撸一个 beforeEnter 钩子函数

    首先我们来介绍一下Vue的导航守卫和beforeEnter钩子函数。 Vue是一个具有完善导航功能的框架,而在Vue路由中,我们可以定义许多导航守卫,包括beforeEach、beforeResolve、afterEach等等。每个导航守卫都有自己的用途,beforeEach在跳转路由之前进行拦截,beforeResolve在路由解析时进行拦截,而after…

    Vue 2023年5月28日
    00
  • 详解Webstorm 新建.vue文件支持高亮vue语法和es6语法

    下面是详解Webstorm 新建.vue文件支持高亮vue语法和es6语法的完整攻略: 问题描述 在使用Webstorm开发Vue项目的过程中,新建.vue文件后发现并没有默认支持高亮vue语法和es6语法,这给我们带来了不小的困扰,那么应该如何解决呢? 解决方案 安装Vue插件 为了支持高亮Vue语法和ES6语法,我们首先需要安装Vue插件,可以打开Web…

    Vue 2023年5月28日
    00
  • vue如何基于el-table实现多页多选及翻页回显过程

    实现多页多选及翻页回显的关键在于要在不同页之间共享数据。Vue.js提供了一些辅助方法来进行数据处理和页面渲染。我们可以使用Vue.js的计算属性和方法来实现该功能。 步骤一:设置选中项和分页 首先,我们需要在Vue实例中通过数据来记录选中的项和当前页数,具体代码如下: <template> <el-table :data="ta…

    Vue 2023年5月27日
    00
  • JavaScript实现生成动态表格和动态效果的方法详解

    针对“JavaScript实现生成动态表格和动态效果的方法详解”这个话题,我将从如下几个方面进行详细讲解: 动态生成表格的基本方法 动态添加行和列的方法 动态调整表格样式的方法 动态效果的实现方法 下面依次详细讲解。 1. 动态生成表格的基本方法 要动态生成表格,可以通过javascript中的document.createElement()方法来创建一个表…

    Vue 2023年5月28日
    00
  • Vue响应式原理模拟实现原理探究

    Vue响应式原理模拟实现原理探究 什么是 Vue 响应式原理? Vue.js 是一个基于数据驱动的前端框架,主要利用观察者模式实现了 MVVM 模式。在 Vue 中,我们可以通过操作数据来动态改变视图,并且数据和视图是“响应式”的,即数据变化后,对应的视图也会发生变化。 Vue 响应式原理模拟实现 响应式对象 在 Vue 中,可以将一个对象设置为“响应式”的…

    Vue 2023年5月28日
    00
  • vue自定义表单生成器form-create使用详解

    Vue自定义表单生成器form-create使用详解 1. 什么是form-create? form-create是一个基于Vue.js的自定义表单生成器。它可以根据预设的模板或者自定义的UI组件来动态生成表单,方便开发者快速构建各种表单,能够提高开发效率。 2. 如何使用form-create? 2.1 安装 首先,我们需要安装form-create,可以…

    Vue 2023年5月28日
    00
  • vue实现前端列表多条件筛选

    下面是“vue实现前端列表多条件筛选”的完整攻略: 准备工作 首先需要引入Vue.js和element-ui组件库。除此之外,还需要一个数据列表和一个查询条件对象。 实现步骤 1. 查询条件的展示 使用element-ui组件库提供的Form组件渲染查询表单。每个查询条件使用FormItem包装,FormItem的label属性即为查询条件的名称,Prop属…

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