首页 > 其他分享 >在Vue3中实现前端导出Excel功能

在Vue3中实现前端导出Excel功能

时间:2023-12-30 16:01:28浏览次数:27  
标签:XLSX const 文件 Excel 导出 xlsx Vue3

在Vue3中,可以使用第三方库如xlsx来导出Excel文件。


以下是一个基本示例:


一、Vue3 常规写法

安装xlsx库

首先,你需要安装xlsx库。使用以下命令进行安装:


npm install xlsx

导入函数

在Vue组件中,导入所需的函数:


import { writeFile } from 'xlsx';

创建模拟数据

创建一个函数来生成Excel文件的数据。这个函数应该返回一个二维数组,其中每一个嵌套的数组代表Excel文件中的一行数据。


function generateExcelData() {

 const data = [

   ['Name', 'Age', 'Email'],

   ['John Doe', 30, '[email protected]'],

   ['Jane Smith', 25, '[email protected]']

 ];


 return data;

}

创建点击事件

创建一个点击事件处理函数,用于触发导出Excel的操作。在这个函数中,你需要先调用generateExcelData函数获取数据,然后使用writeFile函数将数据导出为Excel文件。


export default {

 methods: {

   exportToExcel() {

     const data = generateExcelData();

     const workbook = {

       Sheets: {

         data: {

           ...data

         }

       },

       SheetNames: ['data']

     };

     const excelBuffer = writeFile(workbook, { bookType: 'xlsx', type: 'array' });

     const blob = new Blob([excelBuffer], { type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' });


     const downloadLink = document.createElement('a');

     downloadLink.href = window.URL.createObjectURL(blob);

     downloadLink.download = 'data.xlsx';

     downloadLink.click();

   }

 }

}


在这个示例中,我们首先创建一个workbook对象,它包含一个Sheets属性和一个SheetNames属性。Sheets属性中的data属性表示Excel文件中的一个工作表,它的值就是我们从generateExcelData函数中获取的数据。


然后,我们使用writeFile函数将workbook导出为Excel文件的二进制数据。接下来,我们创建一个Blob对象并使用它创建一个下载链接。最后,通过使用click方法模拟点击下载链接,即可触发Excel文件的下载。


添加按钮

在模板中添加一个按钮,用于触发导出Excel的事件:


<template>

 <div>

   <button @click="exportToExcel">Export to Excel</button>

 </div>

</template>


现在,当用户点击"Export to Excel"按钮时,会触发exportToExcel方法,从而导出Excel文件。


二、Vue3 setup写法

在Vue 3中,可以通过在<script setup lang="ts">标签中使用xlsx库来实现导出Excel文件。


下面是一个详细的介绍:


安装

首先,确保已安装xlsx库。可以使用npm或yarn命令进行安装:


npm install xlsx

编写导出方法

在Vue组件中,创建一个导出Excel的方法。在<script setup lang="ts">标签中添加以下内容:


<script setup lang="ts">

import * as XLSX from 'xlsx';


const exportToExcel = () => {

 // 创建一个工作簿

 const workbook = XLSX.utils.book_new();


 // 创建一个工作表

 const worksheet = XLSX.utils.aoa_to_sheet([

   ['姓名', '年龄', '性别'],

   ['张三', '20', '男'],

   ['李四', '25', '女'],

   ['王五', '30', '男'],

 ]);


 // 将工作表添加到工作簿

 XLSX.utils.book_append_sheet(workbook, worksheet, 'Sheet1');


 // 生成Excel文件

 XLSX.writeFile(workbook, 'data.xlsx');

};

</script>


这段代码定义了一个名为exportToExcel的方法,用于导出Excel文件。在这个方法中:


首先,创建一个新的工作簿和工作表。

然后,使用XLSX.utils.aoa_to_sheet()方法将数据数组转换为工作表。

使用XLSX.utils.book_append_sheet()方法将工作表添加到工作簿。

最后,使用XLSX.writeFile()方法将工作簿保存为Excel文件。

添加导出按钮

在Vue模板中添加一个按钮或其他元素,用于触发导出Excel的方法:


<template>

 <button @click="exportToExcel">导出Excel</button>

</template>


这样,当用户点击按钮时,exportToExcel方法将被调用,导出Excel文件。


上述代码是基于TypeScript语言的,如果您使用的是普通JavaScript,只需删除lang="ts"属性,并相应地更改脚本代码即可。


三、注意事项

在Vue 3中使用xlsx库导出Excel时,有一些需要注意的地方:


安装xlsx库:在使用xlsx库之前,需要确保已经安装了该库。可以使用npm或yarn命令进行安装:


npm install xlsx

引入xlsx库:在Vue组件中的<script setup>标签中,使用import * as XLSX from 'xlsx'引入xlsx库。


数据格式:xlsx库要求将数据转换为适当的格式才能导出为Excel文件。最常用的格式是二维数组,其中每个子数组代表一行数据。确保准备好的数据结构与xlsx库的要求相匹配。


工作簿和工作表:使用xlsx库时,需要创建工作簿和工作表来组织数据。可以使用XLSX.utils.book_new()创建一个新的工作簿,并使用XLSX.utils.aoa_to_sheet()将数据转换为工作表。


导出Excel文件:使用XLSX.writeFile()方法将工作簿保存为Excel文件。可以为Excel文件指定名称,并将其保存到指定位置。


在使用xlsx库导出Excel文件时,请确保数据格式正确,并将工作簿和工作表正确地添加到工作簿中。最后,使用XLSX.writeFile()方法保存工作簿为Excel文件。


标签:XLSX,const,文件,Excel,导出,xlsx,Vue3
From: https://blog.51cto.com/u_15495755/9040960

相关文章

  • 导入模板制作 esaypoi 多sheet页导出
    应用场景平日项目里,常常会遇到关于导入导出的功能,同时导入功能一般要制作一个Excel模板,用来提供给用户进行导入。模板里有些字段是只能填入字典值,所以要提供一个字典值的展示来规范用户的填入的信息。本篇内容就是制作一个多sheet页的Excel导入模板(一个用来给导入,一个用来规范填入......
  • MISBoot全新版本发布预告:Element Vue3版即将上线,敬请期待!
    旧岁将辞新岁临,时光匆匆又一年。2024新年马上来临,我们怀揣着满满的热忱,即将为您带来MISBoot低代码开发平台全新版本,这次全新版本将引领未来趋势,将Vue3与ElementPlus完美融合,为您提供更强大、更灵活且更高效的开发体验。在快速变化的技术世界中,低代码开发已成为企业信息化的必然选......
  • vue3 如何判断组件中的 slot 是否有填充?
    两种方法:1、通过this.$slots.name<divclass="btn-icon"v-if="$slots.icon"><slotname="icon"></slot></div>2、通过 useSlots判断<template><div><slot/><slot......
  • # vue3 组件之间传值
    vue3组件之间传值非常好,为啥突然开这样一篇博文,首先是因为vue3是未来发展的趋势。其次,vue官方已经确认,将于2023年最后一天停止对vue2项目的维护,这个是官方发出的通知,并且呢,尤雨溪团队也已经将vue3作为了vue的默认版本了,同时呢,无论是elementUI和ant-d组件库团队,也......
  • Openpyxl操作Excel
    Openpyxl操作Excel1.锁定列'''锁定列的整体逻辑: 1.首先对整张表进行锁定并设置密码 2.对指定的不需要锁定的列,每一个单元格进行解锁'''#模块导入importopenpyxlfromopenpyxl.stylesimportProtectionexcel_path=r"C:\1.xlsx"#1.打开表,读取Sheetwb=openpyxl.......
  • 导出mysql表结构设计文档word
    github上有个很好用的工具:https://github.com/msuno/export-database-structure我使用的数据库MySQL8.0.20一、下载后修改1.pom中的oracle下载失败,解决办法:注释即可,无影响<!--<dependency>--><!--<groupId>com.oracle</groupId>--><!--<artifactId>o......
  • vue3引入使用svg图标
    vue3使用svg图标安装//通过命令安装2个插件npmivite-plugin-svg-icons-Dnpmifast-glob-D在vue.config.js中配置//vue.config.jsimport{fileURLToPath,URL}from'node:url'import{defineConfig}from'vite'importvuefrom'@vitejs/plugin-v......
  • 摸鱼摸出来的vue3+element-plus毒蘑菇后台管理:新标签页的实现。
    在浏览器中,点击标签页右边的加号可以新加一个标签页,所以,在毒蘑菇后台管理(简称毒蘑菇儿)中也可以这样操作。点击标签页右边的+按钮就可以打开一个新标签页了,可以打开多个,互不冲突,在新标签页中可以搜索你想要打开的页面,点击后会将该标签页替换成你点击后的页面(跟浏览器操作一致)。点......
  • vue3+ts打开echarts的正确方式
    实例项目使用vite5+vue3+ts,项目地址vite-vue3-charts,预览地址https://weizwz.com/vite-vue3-charts准备工作1.注册为百度地图开发者官网地址,然后在应用管理->我的应用里,创建应用,创建好后复制AK2.在根目录的index.html里引入百度地图<head><metacharse......
  • 表单导出excel 的解决方案
    场景:当只有底图和数据的的时候,底图是一个背景图,次背景图上会有空白的区域,留下来的空白区域是用来展示回显的数据的,一下情形需要导出excel文档纯前端方案一:1.先用一个数组将此底图上的数据收集起来,组成一个数组,同时设置key和value ,当然key就是收集来的数据,value就是......