exceljs库实现excel表样式定制化

概览

xlsx 是前端最热门的 Excel 导出方案,又叫做 SheetJs,默认不支持修改 Excel 的样式。而exceljs库就可以做到自定义excel表样式,下面来介绍一下其使用方法

一. 完整示例

代码示例

const exportTemplate2 = () => {  // 创建工作簿  const workbook = new ExcelJS.Workbook();  const worksheet = workbook.addWorksheet('sheet1');  // 定义列  worksheet.columns = [  { header: 'Id11111111111111111111', key: 'id', width: 20 },  { header: 'Name233', key: 'name', width: 20 },  { header: 'D.O.B999', key: 'dob', width: 20 }  ];  // 添加二级表头  worksheet.addRow(['二级表头A', '二级表头B', '二级表头C']);  // 填充数据  const columnData = [  { id: 15, name: 99, dob: '2024-04-16' },  { id: 50, name: 101, dob: '2024-04-17' }  ];  columnData.forEach(item => {  worksheet.addRow(item);  });  // 设置第一行表头背景色和字体颜色  worksheet.getRow(1).eachCell({ includeEmpty: true }, (cell, colNumber) => {  cell.fill = {  type: 'pattern',  pattern: 'solid',  fgColor: { argb: (colNumber === 1 || colNumber === 2) ? 'FF79bbff' : 'FF95d475' }  };  cell.font = {  size: 14,  color: { argb: 'FFFFFFFF' } // 白色  };  });  // 设置第二行表头字体颜色  worksheet.getRow(2).eachCell({ includeEmpty: true }, (cell) => {  cell.font = {  size: 14,  color: { argb: 'FFF89898' } // 浅红色  };  });  // 应用自动筛选  worksheet.autoFilter = 'A1:C2'; // 筛选整个表头区域  // 合并单元格  worksheet.mergeCells("A1:C1"); // 合并整个第一行  // 添加条件格式  worksheet.addConditionalFormatting({  ref: "B3:B4",  rules: [  {  type: 'cellIs',  operator: 'lessThan',  priority: 1,  formulae: ['100'],  style: {  fill: {  type: 'pattern',  pattern: 'solid',  fgColor: { argb: 'FF95d475' },  },  },  },  ],  });  // 添加求和公式到A5单元格  worksheet.getCell('A5').value = {  formula: 'SUM(A3:A4)',  result: null // ExcelJS会自动计算结果,无需显式设置result为null  };  // 计算工作表  console.log(worksheet,'worksheet')// 写入Excel文件  workbook.xlsx.writeBuffer().then((buffer) => {  const blob = new Blob([buffer], { type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' });  saveAs(blob, 'ExcelJS.xlsx');  }).catch((error) => {  console.error('Error exporting Excel file:', error);  });  
};  

二. 设置表头和填充数据

 // 定义列  worksheet.columns = [  { header: 'Id11111111111111111111', key: 'id', width: 20 },  { header: 'Name233', key: 'name', width: 20 },  { header: 'D.O.B999', key: 'dob', width: 20 }  ];  // 添加二级表头  worksheet.addRow(['二级表头A', '二级表头B', '二级表头C']);  // 填充数据  const columnData = [  { id: 15, name: 99, dob: '2024-04-16' },  { id: 50, name: 101, dob: '2024-04-17' }  ];  columnData.forEach(item => {  worksheet.addRow(item);  });  

worksheet.columns中

header: 表头显示的内容;
key: 表格内容对应的属性key,和赋值的columnData中的属性名关联起来;
width:设置单元格的宽度。

三. 设置表头样式

// 设置第一行表头背景色和字体颜色  worksheet.getRow(1).eachCell({ includeEmpty: true }, (cell, colNumber) => {  cell.fill = {  type: 'pattern',  pattern: 'solid',  fgColor: { argb: (colNumber === 1 || colNumber === 2) ? 'FF79bbff' : 'FF95d475' }  };  cell.font = {  size: 14,  color: { argb: 'FFFFFFFF' } // 白色  };  });  // 设置第二行表头字体颜色  worksheet.getRow(2).eachCell({ includeEmpty: true }, (cell) => {  cell.font = {  size: 14,  color: { argb: 'FFF89898' } // 浅红色  };  });  

argb: 前面两位为透明度设置,通常设置成FF就行,代表不透明,比如黑色十六进制为#000000,转换成argb格式转成FF000000即可。

四. 总结

抛砖引玉,以上示例是我们日常工作较常见的场景,更多功能大家可以继续探索。

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

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

相关文章

Electron桌面应用开发:从入门到发布全流程解析

Electron是一个开源的桌面应用程序开发框架,它允许开发者使用Web技术(HTML、CSS和JavaScript)来创建跨平台的桌面应用程序。在本文中,我们将深入探讨Electron桌面应用程序开发的全流程,从入门到发布。 安装和配置Elec…

iOS ------ Block的总结

前面看了Block的基本知识,和一些源码。但对于block怎么用的还不了解,代码中出现block会看不懂,现在来具体看一下Block的用法并做个总结。 1.Block是什么 block对象是一个C语言结构体,可以并入C和OC的代码中,Block本质…

探索以太坊世界:使用Geth打造你的私人网络

文章目录 概要名词解释Geth(Go Ethereum)区块链网络种类 具体流程下载geth客户端配置私链新建创世区块启动私链 连接MetaMask钱包小结 概要 在区块链领域,以太坊私链的搭建是学习和开发智能合约的重要一步。私链允许开发者在独立的环境中进行…

地图图源#ESRI ArcGIS XYZ Tiles系列(TMS)

目录 1、前言 2、地图图源网址 2.1、Satellite 卫星图源 2.2、Terrain 地形图源 2.3、Street 路网/标注图源 2.4、Specifity 特色设计图源 3、专业推荐”穿搭“ 4、图源配置下载及使用 图源名称图层类别特别注意谷歌 Google①地形 ②影像 ③矢量及标注 ④特色图源国内大…

python3如何提取汉字

采用正则表达式的方法对字符串进行处理。 str1 "{我%$是,《速$.度\发》中 /国、人"(1)提取汉字 汉字的范围为”\u4e00-\u9fa5“,这个是用Unicode表示的。 import re res1 .join(re.findall([\u4e00-\u9fa…

sso-oauth2单点登录功能笔记

场景:最近公司2个系统需要做单点登录,A系统作为服务器,认证方式是sso-oauth2方式,B系统作为客户端,token方式是ta-token,先来张sso-oauth2认证方式的图 前置准备工作 第一步:要确认谁是服务提…

kubernetes的网络通信实现原理

网络原理 Kubernetes网络原理详解:一、Kubernetes 网络实现1.容器到容器(同一Pod内)通信流程:2. pod之间的通信(以Calico为例): 二、CNI 网络模型三、网络策略四、开源的容器网络方案五、 常见网…

oracle控制文件的管理

1 说明 Oracle数据库中的控制文件是数据库管理中的重要组成部分,是一个二进制小文件,在 mount 阶段被读取。它包含了数据库的元数据信息和文件位置等重要数据,记录数据库当前物理状态,维护数据库的一致性,记录 RMAN 备…

2024年腾讯云免费服务器最新申请入口链接

腾讯云免费服务器申请入口 txybk.com/go/free 免费服务器可选轻量应用服务器和云服务器CVM,轻量配置可选2核2G3M、2核8G7M和4核8G12M,CVM云服务器可选2核2G3M和2核4G3M配置,腾讯云百科txybk.com分享2024年最新腾讯云免费服务器申请入口、限制…

【JavaEE初阶】网络原理|认识协议|协议分层|TCP/IP模型|封装和分用

一、认识协议 1.概念 简单来说:就是一种通信双方,对于通信规则的约定(标准),一定是通信双方都认可的 但是这个协议不一定是认可面非常广的,即使是两个人之间的也可叫做协议 就好⽐⻅⽹友,彼此…

力扣740删除并获得整数和力扣1173第N个泰波那契数

力扣740删除并获得整数 给你一个整数数组 nums ,你可以对它进行一些操作。 每次操作中,选择任意一个 nums[i] ,删除它并获得 nums[i] 的点数。之后,你必须删除 所有 等于 nums[i] - 1 和 nums[i] 1 的元素。 开始你拥有 0 个点…

systemverilog功能覆盖率

1 iff 如过满足条件则采样,iff可以理解为if covergroup iff_cov;coverpoint tr.data iff(!vif.reset) ; //复位时不采样 endgroup2 coverpoint和bin covergroup name_bin ;coverpoint tr.kind {bins zero {0}; //1个bin 代表kind 0bins low {[1:3]…

(十三)C++自制植物大战僵尸游戏多用户存档实现(二)

植物大战僵尸游戏开发教程专栏地址http://t.csdnimg.cn/8UFMs UserData.h 在头文件中定义了枚举类型openUserDataReturnType,用于表示打开用户数据文件的返回状态。FileExistError表示文件存在但是打开错误,FileExistCorrect表示文件在且正确&#xff0…

如何进行景气分析

景气分析是一种短期经济分析方法。主要分析短时间内(一般指一年内, 或几个月内)经济运行的态势,包括当前的状态和未来的趋势。景气分析可以为宏观经济政策提供重要的决策与参考信息,例如根据经济运行的方向、强弱可建议…

概念理解: DDR的寻址容量设计

主要内容:DDR寻址容量设计的概念理解示例。 DDR的数据存储在不同的bank上,你知道具体是如何通过数据总线和地址总线的配合,拿到所需的数据吗?通过下面这样一个简单的问题,我们来逐渐了解这个过程的实现。 DDR…

C++11 玩家不得不学的语法集 [持续更新-建议收藏]

文章目录 1.std::function 开启函数式编程之路2.std::bind 灵活处理函数调用和传参3. std::ref 传递引用的必要包装4.std::thread 标准库的多线程5.std::packaged_task 封装函数为可异步调用的对象[待续。。。] 1.std::function 开启函数式编程之路 std::function 是 C 标准库…

LeetCode 热题 100 题解:普通数组部分

文章目录 题目一:最大子数组和(No. 53)题解 题目二:合并区间(No. 56)题解 题目三:轮转数组(No. 189)题解 题目四:除自身以外数组的乘积(No. 238&a…

MySql运维篇

目录 一.日志 1.1日志分类 1.2Error Log 1.3BinaryLog 1.4SlowQuery Log 二.备份 2.1备份原因 2.2备份目标 2.3备份技术 2.3.1物理备份 2.3.2逻辑备份 2.4备份方式 2.4.1完全备份 2.4.2增量备份 2.4.3差异备份 2.5备份环境准备 2.6完全备份实验 2.6.1完全备…

Android 一键唤醒应用

Android 一键唤醒应用 最近收到客户需求,需要设备实现一键唤醒应用功能,本次以录音机为例,一键唤醒应用功能具体修改参照如下: /frameworks/base/services/core/java/com/android/server/policy/PhoneWindowManager.java public…

12.Ribbon饥饿加载

Ribbon默认是懒加载的,第一次使用Ribbon访问的时候才会去实例化对象,所以第一次访问比较耗时。 ribbon:eager-load:enabled: true # 开启饥饿加载clients: user-service #对user-service这个服务饥饿加载 多个微服务的写法: ribbon:eager-loa…