vue中使用js-xlsx导出excel的实现方法

yizhihongxing

当需要在Vue中生成Excel文件时,可以使用js-xlsx库来实现。下面是具体步骤:

步骤一:安装依赖

在终端中输入以下命令安装js-xlsx依赖:

npm install xlsx

步骤二:导入依赖

在需要使用js-xlsx的组件上方,引入js-xlsx:

import xlsx from 'xlsx'

步骤三:生成excel数据

在需要生成excel的方法内,将数据填充至一个二维数组内,例如:

let data = [
  ["姓名", "年龄", "性别"],
  ["小明", 18, "男"],
  ["小红", 17, "女"],
  ["小李", 20, "男"]
];

步骤四:生成Workbook对象

使用js-xlsx的utils.book_new()方法生成Workbook对象:

let workbook = xlsx.utils.book_new();

步骤五:生成Worksheet对象

使用js-xlsx的utils.json_to_sheet()方法将数据转为Worksheet对象:

let worksheet = xlsx.utils.json_to_sheet(data);

步骤六:将Worksheet对象添加至Workbook对象内

使用js-xlsx的utils.book_append_sheet()方法将Worksheet对象添加至Workbook对象内:

xlsx.utils.book_append_sheet(workbook, worksheet, "Sheet1");

步骤七:使用writeFile方法将文件保存到本地

使用xlsx.writeFile()方法将数据保存到本地文件:

xlsx.writeFile(workbook, "student.xlsx");

至此,完成了使用js-xlsx在Vue中导出Excel的过程。

示例一

下面是一个简单的示例,将表格的数据导出为浏览器端的Excel:

<template>
  <div>
    <table>
      <thead>
        <tr>
          <th>姓名</th>
          <th>年龄</th>
          <th>性别</th>
        </tr>
      </thead>
      <tbody>
        <tr v-for="(item, index) in list" :key="index">
          <td>{{item.name}}</td>
          <td>{{item.age}}</td>
          <td>{{item.sex}}</td>
        </tr>
      </tbody>
    </table>
    <button @click="exportExcel">导出Excel</button>
  </div>
</template>

<script>
import xlsx from 'xlsx'

export default {
  name: 'ExportExcel',
  data () {
    return {
      list: [
        {name: '小明', age: 18, sex: '男'},
        {name: '小红', age: 17, sex: '女'},
        {name: '小李', age: 20, sex: '男'}
      ]
    }
  },
  methods: {
    exportExcel () {
      let data = [['姓名', '年龄', '性别']]
      for (let i = 0; i < this.list.length; i++) {
        let item = this.list[i]
        let arr = [item.name, item.age, item.sex]
        data.push(arr)
      }
      let workbook = xlsx.utils.book_new()
      let worksheet = xlsx.utils.aoa_to_sheet(data)
      xlsx.utils.book_append_sheet(workbook, worksheet, 'Sheet1')
      xlsx.writeFile(workbook, 'student.xlsx')
    }
  }
}
</script>

示例二

下面是另一个示例,将表格的数据导出为本地文件:

<template>
  <div>
    <table>
      <thead>
        <tr>
          <th>姓名</th>
          <th>年龄</th>
          <th>性别</th>
        </tr>
      </thead>
      <tbody>
        <tr v-for="(item, index) in list" :key="index">
          <td>{{item.name}}</td>
          <td>{{item.age}}</td>
          <td>{{item.sex}}</td>
        </tr>
      </tbody>
    </table>
    <button @click="exportExcel">导出Excel</button>
  </div>
</template>

<script>
import xlsx from 'xlsx'

export default {
  name: 'ExportExcel',
  data () {
    return {
      list: [
        {name: '小明', age: 18, sex: '男'},
        {name: '小红', age: 17, sex: '女'},
        {name: '小李', age: 20, sex: '男'}
      ]
    }
  },
  methods: {
    exportExcel () {
      let data = [['姓名', '年龄', '性别']]
      for (let i = 0; i < this.list.length; i++) {
        let item = this.list[i]
        let arr = [item.name, item.age, item.sex]
        data.push(arr)
      }
      let workbook = xlsx.utils.book_new()
      let worksheet = xlsx.utils.aoa_to_sheet(data)
      xlsx.utils.book_append_sheet(workbook, worksheet, 'Sheet1')
      let wbout = xlsx.write(workbook, {bookType: 'xlsx', type: 'binary'})
      function s2ab (s) { // 将字符串转为ArrayBuffer
        let buf = new ArrayBuffer(s.length)
        let view = new Uint8Array(buf)
        for (let i = 0; i < s.length; i++) {
          view[i] = s.charCodeAt(i) & 0xFF
        }
        return buf
      }
      let blob = new Blob([s2ab(wbout)], {type: 'application/octet-stream'})
      let filename = 'student.xlsx'
      if (navigator.msSaveBlob) {
        navigator.msSaveBlob(blob, filename)
      } else {
        let link = document.createElement('a')
        if (link.download !== undefined) {
          let url = URL.createObjectURL(blob)
          link.setAttribute('href', url)
          link.setAttribute('download', filename)
          link.style.visibility = 'hidden'
          document.body.appendChild(link)
          link.click()
          document.body.removeChild(link)
        }
      }
    }
  }
}
</script>

这个示例中,在文件下载部分,使用了Blob和URL.createObjectURL()来下载文件。对于不支持createObjectURL()的浏览器,使用了navigator.msSaveBlob()方法来实现文件下载。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:vue中使用js-xlsx导出excel的实现方法 - Python技术站

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

相关文章

  • Vue加载组件、动态加载组件的几种方式

    当使用Vue框架进行开发时,可能会遇到需要动态加载组件的情况。Vue框架提供了一些方式来满足这种需求。 加载组件的几种方式 1. 直接注册组件 Vue框架提供了全局注册和局部注册两种方式。 1.1 全局注册方式 在全局注册中,通过 Vue.component() 方法注册组件。这种方式适用于组件会在项目的不同位置多次使用。 // 定义组件: todo-lis…

    Vue 2023年5月29日
    00
  • Vue2.0父子组件传递函数的教程详解

    Vue2.0 父子组件传递函数的教程详解 在Vue2.0中,通过props和$emit等特性,进行组件之间数据的传递和事件的通信变得非常方便。如何在Vue2.0中实现父子组件传递函数呢?本文将详细介绍该过程。 基本思路 父子组件传递函数的基本思路,是将一个函数作为props传递给子组件,在子组件中调用该函数,从而实现子组件的一些交互行为能够改变父组件中的状态…

    Vue 2023年5月28日
    00
  • 一步步详细讲解vue3配置ESLint

    下面是一步步详细讲解vue3配置ESLint的完整攻略: 步骤一:安装ESLint 首先,我们需要在项目中安装ESLint。可以使用下面的命令来进行安装: npm install eslint –save-dev 步骤二:安装Vue3的ESLint插件 接下来,我们需要安装Vue3的ESLint插件。可以使用下面的命令进行安装: npm install e…

    Vue 2023年5月28日
    00
  • vue中的proxyTable反向代理(亲测有用)

    下面我将为你详细讲解“vue中的proxyTable反向代理(亲测有用)”的攻略。 什么是proxyTable? proxyTable是vue-cli中用于开发环境的devServer选项的一个配置,可以进行反向代理,实现跨域请求的功能。它可以将本地请求转发到后端API接口进行处理,避免跨域问题和处理复杂的跨域请求头。 proxyTable的配置方式 在vu…

    Vue 2023年5月27日
    00
  • 详解如何在vue项目中使用lodop打印插件

    下面是详解如何在vue项目中使用lodop打印插件的完整攻略: 步骤一:下载并安装Lodop插件 下载Lodop打印插件的安装包 安装Lodop打印插件,安装完成后,可以在浏览器的扩展中看到Lodop打印插件 步骤二:在vue项目中使用Lodop插件 使用npm安装lodop-printer npm install –save lodop-printer …

    Vue 2023年5月27日
    00
  • vue中对时间戳的处理方式

    在Vue中,我们通常使用Date对象来处理时间和日期。而时间戳就是自1970年1月1日起的毫秒数值,是Date对象的一种表达方式。在Vue中,我们可以用过滤器、方法或计算属性的方式来处理时间戳。 使用过滤器来处理时间戳 我们可以通过定义一个过滤器,将时间戳转换成我们所需要的日期格式。 <p>{{ timestamp | formatDate }}…

    Vue 2023年5月28日
    00
  • 使用Vue开发一个实时性时间转换指令

    下面是使用Vue开发一个实时性时间转换指令的完整攻略: 1. 确定需求和功能 我们的目标是开发一个指令,可以将输入的时间字符串或时间戳转换为实时性时间。具体实现功能如下: 支持将ISO 8601格式的时间字符串(如”2022-02-01T13:01:23Z”)或时间戳(如1643737283)转换为实时性时间; 实时性时间的格式为”X分钟前”、”X小时前”或…

    Vue 2023年5月28日
    00
  • laravel + vue实现的数据统计绘图(今天、7天、30天数据)

    下面是讲解“laravel+vue实现的数据统计绘图”的攻略: 1. 确定需求和框架选择 首先,我们需要确定本次需求是实现某个网站的数据统计功能,需要使用何种框架实现。本次攻略选择了Laravel作为后端框架,并结合Vue来完成前端部分。 2. 数据获取和处理 接下来,我们需要考虑如何获取并处理需要的数据。在Laravel中,可以使用官方的ORM(Eloqu…

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