koa2+vue3通过exceljs实现数据导出excel文档

  1. 服务端安装exceljs依赖
npm i exceljs
  1. 服务端实现代码
    1. 实现导出excel文件工具方法
const ExcelJS = require('exceljs');
/*** @description: 导出excel文件* @param {*} fileHeader  导出的表头* @param {*} data 导出的数据* @param {*} ctx 上下文对象* @return {*}*/
async function exportExcel(fileHeader, data, ctx){const workbook = new ExcelJS.Workbook();const sheet = workbook.addWorksheet();sheet.columns = fileHeader.map((item,index)=>{return {header: item.header,key: item.key,width: item.width||25,}})data.forEach((item,index)=>{sheet.addRow(item);})// 生成Excel文件const buffer = await workbook.xlsx.writeBuffer();ctx.status = 200;ctx.set('Content-Type', 'application/vnd.openxmlformats');ctx.attachment('example.xlsx');ctx.body = buffer;}module.exports = exportExcel;
b. 使用案例
await exportExcel([{ header: "Name", key: "name", width: 20 },{ header: "Age", key: "age", width: 10 },{ header: "Email", key: "email" },],[{ name: "测试数据1", age: 320, email: "alice@example.com" },{ name: "测试数据2", age: 330, email: "alice@example.com" },{ name: "测试数据3", age: 340, email: "alice@example.com" },],ctx);
  1. 客户端代码实现
    1. 创建下载excel工具方法
/*** @description: 下载excel方法* @param {String} filename* @param {Blob} blob*/
async function exportExcel(filename = "导出文件", blob: Blob) {const url = window.URL.createObjectURL(blob);const link = document.createElement("a");link.href = url;link.download = filename; // 设置下载的文件名document.body.appendChild(link); // 需要添加到DOM中才能生效link.click();document.body.removeChild(link);window.URL.revokeObjectURL(url); // 释放内存
}export default exportExcel;
b. 接口请求方法封装
export const exportTableApi = (url: string, params: any = {}) => {return http.get<any>(url + "/export-to-excel", params, {headers: {Accept:"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",},**responseType: "blob",**});
};
c. 使用案例
/*** @description 导出表格数据* @return void* */const exportData = async (apiUrl, params) => {const data = await exportTableApi(apiUrl, params);const blob = new Blob([data as any], {type: "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",});exportExcel(tableName, blob);};

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/750791.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

计算机三级网络技术综合题第三题、第四题详细解析

第三大题 DHCP报文分析&#xff08;10分&#xff09; 一、DHCP工作流程&#xff08;一般情况下&#xff09; 报文摘要 对应上面报文1—4 报文1、3DHCP&#xff1a;Request&#xff1b; 报文2、4DHCP&#xff1a;Reply。 例题&#xff08;第三套&#xff09;&#xff1a;在一…

Flutter 当涉及Listview的复杂滑动布局良好布局方式

目录 引 代码以及概叙 详细解释 SingleChildScrollView shrinkWrap 属性 NeverScrollableScrollPhysics 引 当我们构建界面&#xff0c;很多时候都会需要显示一个能滑动的流布局&#xff0c;同时这个布局还要有些其他的界面元素&#xff0c;同时在flutter中&#xff0c;滑…

大型项目中的敏捷开发实践:原则、方法与工具的应用经验分享

引言 在软件开发领域&#xff0c;大型项目往往伴随着高风险和复杂性&#xff0c;传统的瀑布模型往往难以应对快速变化的需求和不确定的环境。而敏捷开发方法以其灵活、快速响应变化的特点&#xff0c;逐渐成为大型项目管理的有力武器。本文旨在分享我在大型项目中应用敏捷开发…

程序员入行忠告!

点击下方“JavaEdge”&#xff0c;选择“设为星标” 第一时间关注技术干货&#xff01; 关注我&#xff0c;紧跟本系列专栏文章&#xff0c;咱们下篇再续&#xff01; 作者简介&#xff1a;魔都技术专家兼架构&#xff0c;多家大厂后端一线研发经验&#xff0c;各大技术社区头部…

十大经典排序之归并排序

文章目录 概要整体架构流程代码实现小结 概要 归并排序&#xff08;Merge sort&#xff09;是建立在归并操作上的一种有效的排序算法。该算法是采用分治法&#xff08;Divide and Conquer&#xff09;的一个非常典型的应用。 作为一种典型的分而治之思想的算法应用&#xff0…

十五、自回归(AutoRegressive)和自编码(AutoEncoding)语言模型

参考自回归语言模型&#xff08;AR&#xff09;和自编码语言模型&#xff08;AE&#xff09; 1 自回归语言模型&#xff08; AR&#xff09; 自回归语言模型&#xff08;AR&#xff09;就是根据上文内容&#xff08;或下文内容&#xff09;预测下一个&#xff08;或前一个&…

安装OpenEBS,镜像总是报错ImagePullBackOff或者ErrImagePull的解决方法

按照 KubeSphere 官方文档安装 OpenEBS&#xff0c;镜像总是报错ImagePullBackOff或者ErrImagePull的解决方法 helm 有很多更换 源 的文章&#xff0c;有一些是写更换阿里云的源&#xff0c;但是阿里云的源根本没更新OpenEBS的镜像。 在网上找到1个可用的源&#xff1a; 可用的…

VSCODE的常用插件

1、中文设置 &#xff08;1&#xff09;搜索 chinese Chinese (Simplified) Language Pack for Visual Studio Code C/C Extension Pack &#xff08;2&#xff09;配置 通过使用“Configure Display Language”命令显式设置 VS Code 显示语言&#xff0c;可以替代默认 UI…

计算最长的字符串长度

本题要求实现一个函数&#xff0c;用于计算有n个元素的指针数组s中最长的字符串的长度。 函数接口定义&#xff1a; int max_len( char *s[], int n ); 其中n个字符串存储在s[]中&#xff0c;函数max_len应返回其中最长字符串的长度。 裁判测试程序样例&#xff1a; #inclu…

Django性能优化

1.服务器CPU太高的优化 1>在Django项目中使用line_profiler进行性能剖析&#xff0c;您需要遵循以下步骤来设置并使用它&#xff1a; 注&#xff1a;此种方式似乎中间件无法启动&#xff01;&#xff01;&#xff01; 要使用Django与line_profiler进行特定视图的性能测试…

探讨TCP的可靠性以及三次握手的奥秘

&#x1f31f; 欢迎来到 我的博客&#xff01; &#x1f308; &#x1f4a1; 探索未知, 分享知识 !&#x1f4ab; 本文目录 1. TCP的可靠性机制1.2可靠性的基础上,尽可能得提高效率 2. TCP三次握手过程3. 为何不是四次握手&#xff1f; 在互联网的复杂世界中&#xff0c;TCP&am…

基于springboot的高校教师教研信息填报系统

文章目录 项目介绍主要功能截图&#xff1a;部分代码展示设计总结项目获取方式 &#x1f345; 作者主页&#xff1a;超级无敌暴龙战士塔塔开 &#x1f345; 简介&#xff1a;Java领域优质创作者&#x1f3c6;、 简历模板、学习资料、面试题库【关注我&#xff0c;都给你】 &…

SpringBoot3整合Redis基础操作

SpringBoot3整合Redis&基础应用 配套视频&#xff1a;SpringBoot3整合Redis&基础操作视频 1. 概述 SpringBoot是一种用于构建Java应用程序的开发框架&#xff0c;Redis是一个高性能的键值存储数据库&#xff0c;常用于缓存、会话管理、消息队列等应用场景&#xff0…

亚马逊云科技Glue

Glue 最重要的部分&#xff0c; ETL&#xff1a;用于从 A 点&#xff08;我们的源数据&#xff09;提取、转换和加载数据到 B 点&#xff08;目标文件或数据存储库&#xff09;。 AWS Glue 会为您执行大量此类工作。 转换通常是更繁重的工作&#xff0c;需要从各种来源进行组合…

【嵌入式DIY实例】-自动割草机器

自动割草机器 文章目录 自动割草机器1、割草机器介绍2、硬件准备3、功能设计4、硬件接线5、代码实现本文将介绍如何使用 Arduino 构建一个简易自动割草机机器人或割草机机器人。该机器人可以自动剪掉花园里多余的草。如果花园里有障碍物,它会自动改变方向。帮助以减少人力。 警…

【Elasticsearch】windows安装elasticsearch教程及遇到的坑

一、安装参考 1、安装参考&#xff1a;ES的安装使用(windows版) elasticsearch的下载地址&#xff1a;https://www.elastic.co/cn/downloads/elasticsearch ik分词器的下载地址&#xff1a;https://github.com/medcl/elasticsearch-analysis-ik/releases kibana可视化工具下载…

半小时搭建keycloak环境,构建强大的用户中心

第一步: 安装JDK 第二步: 安装Docker 第三步: 部署 keycloak 写一个dockerfile # docker file FROM quay.io/keycloak/keycloak:19.0.3 as builder# Enable health and metrics support ENV KC_HEALTH_ENABLED=true # 设置健康检查启用标志为true ENV KC_METRICS_EN…

Docker 解析:使用 Dockerfile 自动构建镜像

简介 Docker 容器是使用 基础 镜像创建的。一个镜像可以是基本的&#xff0c;只包含操作系统的基本要素&#xff0c;也可以包含一个准备好启动的复杂的预构建应用程序堆栈。 在使用 Docker 构建镜像时&#xff0c;每个操作&#xff08;例如执行的命令&#xff0c;比如 apt-get…

网络编程套接字——实现简单的UDP网络程序

目录 1、预备知识 1.1、认识端口号 1.2、端口号 vs 进程pid 1.3、认识TCP协议 1.4、认识UDP协议 1.5、网络字节序 2、socket编程接口 2.1、socket常见API 2.2、sockaddr结构 3、实现一个简易的UDP服务器和客户端通信 log.hpp UdpServer.hpp UdpClient.cc Main.cc…

upload-labs通关方式

pass-1 通过弹窗可推断此关卡的语言大概率为js&#xff0c;因此得出两种解决办法 方法一 浏览器禁用js 关闭后就逃出了js的验证就可以正常php文件 上传成功后打开图片链接根据你写的一句话木马执行它&#xff0c;我这里采用phpinfo&#xff08;&#xff09; 方法二 在控制台…