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中使用JsonView来展示Json树的实例代码

    下面是关于“Vue中使用JsonView来展示Json树的实例代码”完整攻略的详细解释: 什么是JsonView? JsonView(也称为JSON Viewer)是一种用于查看JSON数据的工具,它可以将JSON格式的数据转化为可读性高的树状结构。在Vue中,我们可以借助JsonView插件来展示JSON数据的树状结构,让JSON数据更加易读易操作。 安装…

    Vue 2023年5月28日
    00
  • layui实际项目使用过程中遇到的兼容性问题及解决

    我为您详细分享一下“layui实际项目使用过程中遇到的兼容性问题及解决”的完整攻略。 一、问题背景 Layui是一款轻量级的前端UI框架,可用于快速构建具有良好交互体验的前端页面,功能模块化、易于扩展。然而,在实际项目中,我们在使用Layui时,往往会遇到一些兼容性问题。 二、兼容性问题及解决方法 在实际项目中,Layui兼容性问题大致可分为两类:浏览器兼容…

    Vue 2023年5月28日
    00
  • vue中如何进行异步请求

    当在Vue.js应用程序中进行异步请求时,Vue.js使我们能够使用它在“vue-resource”和“axios”两个包中提供的两种不同方式。这两种方式都可以很容易地在Vue.js中创建和使用XHR请求。现在,我们来看一下如何使用这两种方式进行异步请求。 使用vue-resource进行异步请求 步骤一:安装vue-resource 在Vue.js项目中使…

    Vue 2023年5月29日
    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
  • vue项目前端埋点的实现

    下面是关于“vue项目前端埋点实现”的完整攻略: 什么是前端埋点? 前端埋点是指在页面中添加一些跟踪代码,记录用户行为、操作等数据,并将这些数据发送到后台进行统计分析的过程。前端埋点可以用来了解用户的兴趣、行为习惯等,方便网站开发者及时发现问题,为优化网站提供数据支持。 前端埋点的实现方式 前端埋点的实现方式通常有两种,一种是通过在路由钩子函数中进行埋点,另…

    Vue 2023年5月29日
    00
  • 微信小程序自定义toast组件的方法详解【含动画】

    我来为你详细讲解“微信小程序自定义toast组件的方法详解【含动画】”的攻略。 什么是Toast组件 Toast组件是一种提示框,通常用于向用户展示一些简短的信息或提示。在微信小程序中,Toast组件比较常见,通过它可以向用户提示请求数据的进度,或者一些操作的结果信息。 开始制作自定义Toast组件 1. 创建承载Toast的组件 在 WeUI 中,Toas…

    Vue 2023年5月27日
    00
  • 详解vue 组件的实现原理

    详解Vue组件的实现原理 Vue是一个流行的前端框架,它采用组件化开发方式来实现可复用的UI部件。理解Vue组件实现原理对于深入理解Vue有着非常重要的作用。 Vue组件定义 在Vue中,一个组件是一个具有预定义选项的Vue实例。我们可以使用Vue.component方法来创建一个组件。 Vue.component(‘my-component’, { // …

    Vue 2023年5月28日
    00
  • vue项目前端知识点整理【收藏】

    “vue项目前端知识点整理【收藏】”是一份前端知识点的整理,方便初学者或者需要查漏补缺的开发者来学习和参考。该文档主要涵盖了vue开发中常见的知识点和技能,包括vue基础语法、vue组件及其通信、vue路由、vue状态管理、vue服务端渲染等。 下面,我将对其中几个重要的知识点进行详细讲解: Vue组件及其通信 Vue组件是Vue工程中的基本单元,我们可以通…

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