exceljs库实现excel表样式定制化

devtools/2024/9/24 21:18:14/

概览

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

一. 完整示例

代码示例

javascript">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);  });  
};  

二. 设置表头和填充数据

javascript"> // 定义列  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:设置单元格的宽度。

三. 设置表头样式

javascript">// 设置第一行表头背景色和字体颜色  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.ppmy.cn/devtools/7277.html

相关文章

本地启用并操作Redis

本篇文章将向各位讲解redis的基础用法,废话不多说我们直接开始吧! 首先需要下载redis到你本地,我这儿是下载到以下文件夹中: 双击redis-server.exe文件运行redis: 然后我们另外启用一个命令窗口(需要进入你…

Spark---核心概念(Spark,RDD,Spark的核心构成组件)详解

一、什么是Spark Spark就是一个集成离线计算,实时计算,SQL查询,机器学习,图计算为一体的通用的计算框架。 二、Spark特点 1、速度快 相比较于MR,官方说,基于内存计算spark要快mr100倍,基于磁…

腾讯云免费ssl证书申请与宝塔手动部署

1.在我的证书 - SSL 证书 - 控制台 (tencent.com)页面点击“申请免费证书” 2.在申请页面填写域名、邮箱,对于其中“验证方式”,如果服务器是部署在腾讯云的话,可以选“自动DNS” 3.等待审核通过之后,在我的证书 - SSL 证书 - 控…

使用Python实现自动化网页答题功能-模拟考试篇

介绍 在驾驶员考试网站上进行模拟考试python自动答题 自动化原理 该脚本使用了自动化模块 DrissionPage 中的 ChromiumPage 类来实现网页的自动化操作。通过定位网页元素和模拟点击操作,完成了选择答案和提交答卷的过程。 用途与注意事项 用途:该脚本…

K8s: 关于Kubernetes中的Pod的生命周期(状态)以及生命周期的钩子函数处理

pod 的生命周期 1 ) pod 几种常用状态 1.1 )Pending(挂起) Pod 已被 Kubernetes 系统接受,但有一个或者多个容器尚未创建亦未运行此阶段包括等待 Pod 被调度的时间和通过网络下载镜像的时间。 1.2 )Running&#xff0…

【神经网络与深度学习】文本情感分类

数据准备 AclImdb – v1 Dataset 是用于二进制情绪分类的大型电影评论数据集,其涵盖比基准数据集更多的数据,其中有 25,000 条电影评论用于训练,25,000 条用于测试,还有其他未经标记的数据可供使用。 数据预处理和数据装载 imp…

codeforce #925 (div3) 题解

D. Divisible Pairs 给出数组 a a a,如果二元组 ( i , j ) (i,j) (i,j)满足 a i a j m o d x 0 & & a i − a j m o d y 0 a_i a_j mod x 0 \&\& a_i - a_j mod y 0 ai​aj​modx0&&ai​−aj​mody0,则beauty。其中 i &…

基于R语言实现的负二项回归模型【理解与实现】-理解负二项回归模型和泊松回归模型之间的区别

前言 我们可以在R语言中使用MASS包中的glm.nb函数来拟合负二项模型,以及使用glm函数来拟合泊松模型。以下是一个详细的过程,包括模拟数据的生成、模型的拟合、结果的比较和解释。 需要的包 if (!require("MASS")) install.packages("M…