当前位置: 首页 > 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>

http://www.lryc.cn/news/285583.html

相关文章:

  • 《WebKit 技术内幕》之五(3): HTML解释器和DOM 模型
  • 136基于matlab的自适应滤波算法的通信系统中微弱信号检测程序
  • 【Linux】权限 !
  • axios原理
  • epoll
  • AEB滤镜再破碎,安全焦虑「解不开」?
  • 深度学习和机器学习中针对非时间序列的回归任务,有哪些改进角度?
  • 无限商机、拓全国、赢未来!2024上海国际轴承展重磅来袭!
  • PPT 编辑模式滚动页面不居中
  • 笨蛋学设计模式结构型模式-享元模式【13】
  • 磁盘的分区与文件系统的认识
  • 韩国访问学者如何申请?
  • MybatisPlus框架入门级理解
  • ELK 分离式日志(1)
  • <蓝桥杯软件赛>零基础备赛20周--第15周--快速幂+素数
  • Opencv小项目——手势数字刷TIKTOK
  • 【优化技术专题】「性能优化系列」针对Java对象压缩及序列化技术的探索之路
  • Spring+SprinMVC+MyBatis配置方式简易模板
  • Windows ssh登录eNSP交换机
  • SwiftUI 纯手工打造 100% 可定制的导航栏
  • npm install 太慢?解决方法
  • DevOps系列文章之 GitLab CI/CD
  • 【CompletableFuture任务编排】游戏服务器线程模型及其线程之间的交互(以排行榜线程和玩家线程的交互为例子)
  • 什么是浏览器指纹?详解浏览器指纹识别技术,教你防止浏览器指纹识别
  • canvas绘制六芒星
  • 全网最详细!!Python 爬虫快速入门
  • gitgud.io+Sapphire注册账号教程
  • 【动态规划】【广度优先搜索】【状态压缩】847 访问所有节点的最短路径
  • python基础小知识:引用和赋值的区别
  • 欧科云链与《警察技术》联合发布技术专题.pdf