当前位置: 首页 > news >正文

#vue3 实现前端下载excel文件模板功能

一、需求:

前端无需通过后端接口,即可实现模板下载功能。

通过构造一个 JSON 对象,使用前端常用的第三方库 xlsx,可以直接将该 JSON 对象转换成 Excel 文件,让用户下载模板

二、效果:

三、源码如下:

npm install xlsx
<template><div class="download"><el-button type="warning" @click="downloadTemplate">下载模板</el-button></div>
</template><script setup>
import * as XLSX from 'xlsx';const writeFileAsync = (workbook, filename, options) => {return new Promise((resolve, reject) => {try {XLSX.writeFile(workbook, filename, options);resolve();} catch (error) {reject(error);}});
};const downloadTemplate = async () => {// 构造jsonconst json = [{序号: '',名称: '',日期: '',地址: '',年龄: '',类型: '',分数: ''}];// 将json数据转换成excel文件const worksheet = XLSX.utils.json_to_sheet(json);const workbook = XLSX.utils.book_new();XLSX.utils.book_append_sheet(workbook, worksheet, 'Sheet1');try {// 将excel 文件保存为blobconst blob = await writeFileAsync(workbook, '模板.xlsx', { bookType: 'xlsx', mimeType: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' });if (blob instanceof Blob) {// 创建下载链接const url = window.URL.createObjectURL(blob);// 创建隐藏的a标签,设置下载链接并触发点击const a = document.createElement('a');a.href = url;a.download = 'excel.template.xlsx';document.body.appendChild(a);a.click();// 释放对象urlwindow.URL.revokeObjectURL(url);// 等待5秒后关闭模态框setTimeout(() => {document.body.removeChild(a);}, 5000);} else {throw new Error('Invalid Blob');}} catch (error) {//console.error('Error creating object URL:', error);}
};</script><style lang="scss" scoped>
.download{padding: 20px;
}
</style>

相关文章:

  • 智能机器人与旋量代数(9)
  • 优化用户体验测试应用领域:提升产品质量与用户满意度
  • ffmpeg使用及java操作
  • 自然语言处理--双向匹配算法
  • 【GoLang入门教程】Go语言工程结构详述
  • c#中使用UTF-8编码处理多语言文本的有效策略
  • 设计模式二(工厂模式)
  • Relay Arm® 计算库集成
  • AI大模型【基础 01】智能AI开源模型与大模型接口整理(8个开源模型+7个大模型接口)
  • 南京观海微电子---时序分析基本概念(二)——保持时间
  • 2017年认证杯SPSSPRO杯数学建模A题(第二阶段)安全的后视镜全过程文档及程序
  • C#,入门教程(22)——函数的基础知识
  • RPC和HTTP,它们之间到底啥关系
  • VsCode容器开发 - VsCode连接远程服务器上的docker
  • 【江科大】STM32:(超级详细)定时器输出比较
  • CentOS6 编译安装 redis-3.2.3
  • Elasticsearch 参考指南(升级前重新索引)
  • Java方法详解
  • LeetCode29.两数相除 JavaScript
  • VUE es6技巧写法(持续更新中~~~)
  • Vue UI框架库开发介绍
  • yii2权限控制rbac之rule详细讲解
  • 表单中readonly的input等标签,禁止光标进入(focus)的几种方式
  • 干货 | 以太坊Mist负责人教你建立无服务器应用
  • 使用parted解决大于2T的磁盘分区
  • 微服务核心架构梳理
  • 小试R空间处理新库sf
  • 用简单代码看卷积组块发展
  • 智能合约开发环境搭建及Hello World合约
  • 06-01 点餐小程序前台界面搭建
  • ​力扣解法汇总1802. 有界数组中指定下标处的最大值
  • #AngularJS#$sce.trustAsResourceUrl
  • #include
  • #我与Java虚拟机的故事#连载01:人在JVM,身不由己
  • #我与Java虚拟机的故事#连载10: 如何在阿里、腾讯、百度、及字节跳动等公司面试中脱颖而出...
  • $refs 、$nextTic、动态组件、name的使用
  • (03)光刻——半导体电路的绘制
  • (3)(3.5) 遥测无线电区域条例
  • (C#)Windows Shell 外壳编程系列4 - 上下文菜单(iContextMenu)(二)嵌入菜单和执行命令...
  • (C语言)共用体union的用法举例
  • (ISPRS,2023)深度语义-视觉对齐用于zero-shot遥感图像场景分类
  • (Matalb时序预测)WOA-BP鲸鱼算法优化BP神经网络的多维时序回归预测
  • (官网安装) 基于CentOS 7安装MangoDB和MangoDB Shell
  • (南京观海微电子)——I3C协议介绍
  • (心得)获取一个数二进制序列中所有的偶数位和奇数位, 分别输出二进制序列。
  • (一)使用Mybatis实现在student数据库中插入一个学生信息
  • (转)微软牛津计划介绍——屌爆了的自然数据处理解决方案(人脸/语音识别,计算机视觉与语言理解)...
  • (转)一些感悟
  • .a文件和.so文件
  • .babyk勒索病毒解析:恶意更新如何威胁您的数据安全
  • .halo勒索病毒解密方法|勒索病毒解决|勒索病毒恢复|数据库修复
  • .NET 5种线程安全集合
  • .NET CORE Aws S3 使用
  • .NET Core 成都线下面基会拉开序幕
  • .Net下的签名与混淆