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

当需要在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项目中,我们可以通过创建不同的环境变量文件来配置不同环境中的参数。比如我们可以通过创建.env.development、.env.production、.env.test等文件分别配置开发环境、生产环境和测试环境的参数。其中以VUE_APP_前缀的变量可以在项目中通过process.env对象…

    Vue 2023年5月28日
    00
  • Vue起步(无cli)的啊教程详解

    Vue起步(无cli)的啊教程详解 简介 在本教程中,我们将介绍如何使用Vue.js创建基本项目,而无需使用Vue CLI(命令行界面)。我们将通过以下步骤完成: 在HTML页面中添加Vue.js作为script标记 创建Vue实例,其中包含我们要渲染的数据 添加Vue指令和绑定元素 创建和使用Vue组件 步骤 添加Vue.js到HTML页面 首先,在HTM…

    Vue 2023年5月28日
    00
  • 解决iView中时间控件选择的时间总是少一天的问题

    这里提供一种解决iView中时间控件选择的时间总是少一天的问题的方法。 问题现象 在使用iView的DatePicker组件(包括RangePicker)时,选择某个日期后,获取到的日期总是比实际选择的日期少一天。 解决方案 这个问题的原因是iView组件在计算日期时,没有考虑到时区的影响。具体来说,是由于iView通过Date对象的getFullYear、…

    Vue 2023年5月29日
    00
  • vue实现图片拖拽功能

    在这里我将详细讲解使用Vue.js实现图片拖拽功能的攻略。这里我们将使用 Vue Droppable 这个开源插件来实现。 步骤一:安装 Vue Droppable Vue Droppable 是一个 Vue.js 插件,它旨在提供一个易于使用的 API 来实现拖放(Drag & Drop)功能。如果你已经在 Vue 应用中使用 npm 包管理器,则…

    Vue 2023年5月29日
    00
  • vue请求数据的三种方式

    下面就开始讲解“vue请求数据的三种方式”攻略: 前言 在前后端分离的架构中,前端的数据一般是通过ajax等方式去获取后端服务的数据。而在Vue框架中,请求数据的方式有三种:$ajax、axios、vue-resource。 1.使用$ajax请求数据 // 引入jquery.js <script src="http://ajax.googl…

    Vue 2023年5月28日
    00
  • Vue源码解析之数据响应系统的使用

    Vue源码解析之数据响应系统的使用 在Vue源码解析中,数据响应系统是一个非常重要的内容。数据响应系统可以监听数据变化,当数据变化时,自动更新页面的内容,这也是Vue能够实现数据驱动视图的能力。在Vue中,数据响应系统的实现采用的是Proxy和defineProperty这两个对象。 使用Proxy实现响应式数据 简介 在Vue中,数据响应系统的实现采用的是…

    Vue 2023年5月27日
    00
  • vue3使用Vite打包组件库从0搭建过程详解

    题目中提到的“vue3使用Vite打包组件库从0搭建过程详解”,我理解为一个具有如下要素的教程: 介绍Vue 3框架,Vite打包工具和组件库概念 梳理实现组件库所需的步骤和工具 详细描述如何利用Vite打包工具和Vue 3框架开发组件库 通过示例演示组件库开发流程和效果 以下是具体的完成步骤: 1. 什么是Vue 3框架,Vite打包工具和组件库概念 在开…

    Vue 2023年5月28日
    00
  • 解析Vue.use()是干什么的

    Vue.use()是Vue提供的一个插件安装方法,它的作用是用来注册全局Vue.js插件。我们可以使用该方法将自己编写的插件安装到Vue中,以便在全局中使用。 下面是Vue.use()的语法: Vue.use(plugin) 其中,plugin为一个对象或函数,它必须包含一个install方法,install方法在插件安装时会被调用。此外,它还可以包含其他的…

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