优先级

单元格样式 > 行样式 > 列样式

设置样式

  1. worksheet.getCell('A1').属性 = 值;// 为单元格分配样式
  2. // 将样式应用于工作表列
  3. worksheet.columns = [
  4. { header: 'Id', key: 'id', width: 10 },
  5. { header: 'Name', key: 'name', width: 32, style: { font: { name: 'Arial Black' } } },
  6. { header: 'D.O.B.', key: 'DOB', width: 10, style: { numFmt: 'dd/mm/yyyy' } }
  7. ];
  8. worksheet.getColumn(3).属性 = 值; // 将样式应用于工作表列
  9. worksheet.getRow(2).属性 = 值; // 将样式应用于工作表行

================

数字格式 numFmt

image.png

  1. worksheet.getCell('A1').value = 1.6;
  2. worksheet.getCell('A1').numFmt = '# ?/?';// 将值显示为“ 1 3/5”
  3. worksheet.getCell('B1').value = 0.016;
  4. worksheet.getCell('B1').numFmt = '0.00%';// 显示为“ 1.60%”

字体 font

image.png

  1. worksheet.getCell('A1').font = {属性 : 值,}
字体属性 描述 示例值
name 字体名称。 ‘Arial’, ‘Calibri’, …
family 备用字体家族。整数值。 1 - Serif, 2 - Sans Serif, 3 - Mono, Others - unknown
scheme 字体方案。 ‘minor’, ‘major’, ‘none’
charset 字体字符集。整数值。 1, 2, etc.
size 字体大小。整数值。 9, 10, 12, 16, …
color 颜色描述,一个包含 ARGB 值的对象。 { argb: ‘FFFF0000’}
bold 字体 粗细 true, false
italic 字体 倾斜 true, false
underline 字体 下划线 样式 true, false, ‘none’, ‘single’, ‘double’, ‘singleAccounting’, ‘doubleAccounting’
strike 字体 删除线 true, false
outline 字体轮廓 true, false
vertAlign 垂直对齐 ‘superscript’ 上标 , ‘subscript’ 下标

富文本 value

就是一个单元格内,可以同时有多个不同的字体样式。

  1. //方式1
  2. worksheet.getCell('A1').value = {
  3. 'richText': [
  4. {'font': {'size': 12,'color': {'theme': 0},'name': 'Calibri','family': 2,'scheme': 'minor'},'text': 'This is '},
  5. {'font': {'italic': true,'size': 12,'color': {'theme': 0},'name': 'Calibri','scheme': 'minor'},'text': 'a'},
  6. {'font': {'size': 12,'color': {'theme': 1},'name': 'Calibri','family': 2,'scheme': 'minor'},'text': ' '},
  7. {'font': {'size': 12,'color': {'argb': 'FFFF6600'},'name': 'Calibri','scheme': 'minor'},'text': 'colorful'},
  8. {'font': {'size': 12,'color': {'theme': 1},'name': 'Calibri','family': 2,'scheme': 'minor'},'text': ' text '},
  9. {'font': {'size': 12,'color': {'argb': 'FFCCFFCC'},'name': 'Calibri','scheme': 'minor'},'text': 'with'},
  10. {'font': {'size': 12,'color': {'theme': 1},'name': 'Calibri','family': 2,'scheme': 'minor'},'text': ' in-cell '},
  11. {'font': {'bold': true,'size': 12,'color': {'theme': 1},'name': 'Calibri','family': 2,'scheme': 'minor'},'text': 'format'}
  12. ]
  13. };
  14. //方式2
  15. expect(worksheet.getCell('A1').text).to.equal('This is a colorful text with in-cell format');
  16. expect(worksheet.getCell('A1').type).to.equal(Excel.ValueType.RichText);

对齐 alignment

image.png

  1. worksheet.getCell('A1').alignment = {属性 : 值,}
样式名 水平对齐 垂直对齐 文本换行 缩进 文本旋转
属性名 horizontal vertical wrapText indent textRotation
可选的值 left 靠左 top 靠上 true 整数 0 to 90
center 居中 middle 居中 false -1 to -90
right 靠右 bottom 靠下 vertical 文字竖排
fill 填充 distributed 分散对齐
justify 两端对齐 justify 两端对齐
centerContinuous 跨列居中
distributed 分散对齐

边框 border

image.png

  1. worksheet.getCell('A1').border = {
  2. top: {style:'double', color: {argb:'FF00FF00'}}, //上边框
  3. left: {style:'double', color: {argb:'FF00FF00'}}, //左边框
  4. bottom: {style:'double', color: {argb:'FF00FF00'}}, //下边框
  5. right: {style:'double', color: {argb:'FF00FF00'}}, //右边框
  6. diagonal: {up: true, down: true, style:'thick', color: {argb:'FFFF0000'}}, //斜边框
  7. }

边框样式 style
thin 、dotted 、dashDot 、hair 、dashDotDot 、slantDashDot 、mediumDashed、 mediumDashDotDot、 mediumDashDot 、medium 、
double、thick

图案 fill

image.png image.png

  1. worksheet.getCell('A1').fill = {
  2. type: '图案类型值', //图案类型
  3. 模式类型:'模式类型值',
  4. 模式属性1:'模式属性1的值',
  5. 模式属性2:'模式属性2的值'
  6. };
图案类型(二选一) 图案模式(上图的图案样式) 渐变模式(上图的填充效果)
图案类型值 ‘pattern’ ‘gradient’
模式类型 pattern gradient
模式类型值
(字符串)
none 、solid 、darkGray 、mediumGray 、
lightGray 、gray125 、gray0625 、darkHorizontal 、
darkVertical 、darkDown 、darkUp 、darkGrid 、
darkTrellis 、lightHorizontal 、lightVertical 、lightDown 、
lightUp 、lightGrid 、lightTrellis
‘angle’ 角度渐变 ‘path’ 线性渐变
模式属性1 fgColor 图案前景色。默认为黑色 degree center
模式属性1的值 { argb:’AARRGGBB’ } RGBA颜色对象,AA里面,0表示完全透明,FF表示完全不透明 角度,范围是0-359。
0是指时钟上9点的位置,90是0点的位置
{ left : num , top : num } 辐射的中心点,左上角是0,0,右下角是1,1
模式属性2 bgColor 图案背景色。默认为白色 stops stops
模式属性2的值 { argb:’AARRGGBB’ } RGBA颜色对象,AA里面,0表示完全透明,FF表示完全不透明 指定渐变颜色序列,参考下面图片的示例,表示颜色渐变的点。
WPS的样式相对较少,只有固定几个模式。
指定渐变颜色序列,参考下面图片的示例,表示颜色渐变的点。
WPS的样式相对较少,只有固定几个模式。

image.png image.png image.pngimage.png image.png image.png

单元格保护 protection

image.png

  1. ws.getCell('A1').protection = {
  2. locked: true, //锁定,指定在工作表受保护的情况下是否将单元格锁定。
  3. hidden: false, //隐藏,指定如果工作表受保护,则单元格的公式是否可见。
  4. };

================

条件格式 ConditionalFormatting

件格式化允许工作表根据单元格值或任意公式显示特定的样式,图标等。

条件格式设置规则是在工作表级别添加的,通常会覆盖一系列单元格。

可以将多个规则应用于给定的单元格范围,并且每个规则都将应用自己的样式。

如果多个规则影响给定的单元格,则规则优先级值将确定如果竞争样式冲突,则哪个规则胜出,优先级值较低的规则获胜。
如果没有为给定规则指定优先级值,ExcelJS 将按升序分配它们
image.png

添加规则

  1. // 根据行和列为偶数或奇数向 A1:E7 添加一个棋盘图案
  2. worksheet.addConditionalFormatting({
  3. ref: 'A1:E7', //影响的单元格
  4. rules: [ //规则
  5. {
  6. type: '类型值',
  7. style: {fill: {type: 'pattern', pattern: 'solid', bgColor: {argb: 'FF00FF00'}}}, //样式
  8. priority:0, //优先级,可选属性,越小越优先,默认是自动分配
  9. 属性1: 属性值1,
  10. 属性2: 属性值2,
  11. 属性3: 属性值3,
  12. }
  13. ]
  14. })

类型值 type

image.png

类型值 描述 格式样式
expression 任何自定义功能均可用于激活规则。
cellIs 使用公式确定要设置格式的单元格
top10 仅对排名靠前或靠后的数值设置格式
aboveAverage 仅对高于或低于平均值的数值设置格式
colorScale 基于各自值设置所有单元格的格式 双色刻度、三色刻度
iconSet 基于各自值设置所有单元格的格式 图标集
dataBar 基于各自值设置所有单元格的格式 数据条
containsText 只为包含以下内容的单元格的格式 特定文本
timePeriod 只为包含以下内容的单元格的格式 发生日期

type : ‘expression’ 的属性

属性 可选 默认值 描述
type 'expression'
priority Y 确定样式的优先顺序
formulae 1个包含真/假值的公式字符串数组。要引用单元格值,请使用左上角的单元格地址
style 公式返回 true 时要应用的样式结构

type : ‘cellIs’ 的属性

属性 可选 默认值 描述
type 'cellIs'
priority Y 确定样式的优先顺序
operator 如何将单元格值与公式结果进行比较
formulae 1个公式字符串数组,返回要与每个单元格进行比较的值
style 如果比较返回 true,则应用样式结构
运算 描述
equal 如果单元格值等于公式值,则应用格式
greaterThan 如果单元格值大于公式值,则应用格式
lessThan 如果单元格值小于公式值,则应用格式
between 如果单元格值在两个公式值之间(包括两个值),则应用格式

type : ‘top10’ 的属性

属性 可选 默认值 描述
type 'top10'
priority Y 确定样式的优先顺序
rank Y 10 指定格式中包含多少个顶部(或底部)值
percent Y false 如果为 true,则等级字段为百分比,而不是绝对值
bottom Y false 如果为 true,则包含最低值而不是最高值
style 如果比较返回 true,则应用样式结构

type : ‘aboveAverage’ 的属性

属性 可选 默认值 描述
type 'aboveAverage'
priority Y 确定样式的优先顺序
aboveAverage Y false 如果为 true,则等级字段为百分比,而不是绝对值
style 如果比较返回 true,则应用样式结构

type : ‘colorScale’ 的属性

属性 可选 默认值 描述
type 'colorScale'
priority Y 确定样式的优先顺序
cfvo 2到5个条件格式化值对象的数组,指定值范围内的航路点
color 在给定的航路点使用的相应颜色数组
style 如果比较返回 true,则应用样式结构

type : ‘iconSet’ 的属性

属性 可选 默认值 描述
type 'iconSet'
priority Y 确定样式的优先顺序
iconSet Y 3TrafficLights 设置使用的图标名称
showValue true 指定应用范围内的单元格是显示图标和单元格值,还是仅显示图标
reverse false 指定是否以保留顺序显示 iconSet 中指定的图标集中的图标。 如果 custom 等于 true,则必须忽略此值
custom false 指定是否使用自定义图标集
cfvo 2到5个条件格式化值对象的数组,指定值范围内的航路点
style 如果比较返回 true,则应用样式结构

type : ‘dataBar’ 的属性

字段 可选 默认值 描述
type 'dataBar'
priority Y 确定样式的优先顺序
minLength 0 指定此条件格式范围内最短数据条的长度
maxLength 100 指定此条件格式范围内最长数据条的长度
showValue true 指定条件格式范围内的单元格是否同时显示数据条和数值或数据条
gradient true 指定数据条是否具有渐变填充
border true 指定数据条是否有边框
negativeBarColorSameAsPositive true 指定数据条是否具有与正条颜色不同的负条颜色
negativeBarBorderColorSameAsPositive true 指定数据条的负边框颜色是否不同于正边框颜色
axisPosition ‘auto’ 指定数据条的轴位置
direction ‘leftToRight’ 指定数据条的方向
cfvo 2 到 5 个条件格式化值对象的数组,指定值范围内的航路点
style 如果比较返回 true,则应用样式结构

type : ‘containsText’ 的属性

属性 可选 默认值 描述
type 'containsText'
priority Y 确定样式的优先顺序
operator 文本比较类型
text 要搜索的文本
style 如果比较返回 true,则应用样式结构
运算符 描述
containsText 如果单元格值包含在 text 字段中指定的值,则应用格式
containsBlanks 如果单元格值包含空格,则应用格式
notContainsBlanks 如果单元格值不包含空格,则应用格式
containsErrors 如果单元格值包含错误,则应用格式
notContainsErrors 如果单元格值不包含错误,则应用格式

type : ‘timePeriod’ 的属性

属性 可选 默认值 描述
type 'timePeriod'
priority Y 确定样式的优先顺序
timePeriod 比较单元格值的时间段
style 如果比较返回 true,则应用样式结构

时间段

时间段 描述
lastWeek 如果单元格值落在最后一周内,则应用格式
thisWeek 如果单元格值在本周下降,则应用格式
nextWeek 如果单元格值在下一周下降,则应用格式
yesterday 如果单元格值等于昨天,则应用格式
today 如果单元格值等于今天,则应用格式
tomorrow 如果单元格值等于明天,则应用格式
last7Days 如果单元格值在过去7天之内,则应用格式
lastMonth 如果单元格值属于上个月,则应用格式
thisMonth 如果单元格值在本月下降,则应用格式
nextMonth 如果单元格值在下个月下降,则应用格式

大纲级别 outlineLevel

类似折叠,有助于规划数据的位置,实际看需求使用。
image.png image.pngimage.png

设置大纲

  1. //方式1:大纲级别可以在列设置中定义
  2. worksheet.columns = [
  3. { header: 'Id', key: 'id', width: 10 },
  4. { header: 'Name', key: 'name', width: 32 },
  5. { header: 'D.O.B.', key: 'DOB', width: 10, outlineLevel: 1 }
  6. ];
  7. //方式2:直接在行或列上设置
  8. worksheet.getColumn(3).outlineLevel = 1;
  9. worksheet.getRow(3).outlineLevel = 1;

设置大纲折叠按钮位置

image.png image.png
image.png image.png
默认是勾选的,勾选后位置不对,推荐去掉勾选,比较符合我们正常使用的习惯,也就是下面两个属性设置为false

  1. worksheet.properties.outlineProperties = {
  2. summaryBelow: false,
  3. summaryRight: false,
  4. };

图片 Image

将图像添加到工作表是一个分为两个步骤的过程。

1、首先,通过 addImage() 函数将图像添加到工作簿中,该函数还将返回 imageId 值。
2、然后,使用 imageId,可以将图像作为浮动图片覆盖单元格区域 或 嵌入单元格 ,添加到工作表中。

1、添加到工作簿

  1. // 通过文件名将图像添加到工作簿
  2. const imageId1 = workbook.addImage({
  3. filename: 'path/to/image.jpg',
  4. extension: 'jpeg',
  5. });
  6. // 通过 buffer 将图像添加到工作簿
  7. const imageId2 = workbook.addImage({
  8. buffer: fs.readFileSync('path/to.image.png'),
  9. extension: 'png',
  10. });
  11. // 通过 base64 将图像添加到工作簿
  12. const myBase64Image = "data:image/png;base64,iVBORw0KG...";
  13. const imageId2 = workbook.addImage({
  14. base64: myBase64Image,
  15. extension: 'png',
  16. });

2、添加到工作表

  1. // 浮动图片
  2. worksheet.addImage(imageId2, 'B2:D6'); // 在 B2:D6 上插入图片
  3. worksheet.addImage(imageId2, { // 在 B2:D6 的一部分上插入图像
  4. tl: { col: 1.5, row: 1.5 },
  5. br: { col: 3.5, row: 5.5 },
  6. editAs: 'oneCell' //可选,oneCell默认值,表示图像将与单元格一起移动,但大小不变动;
  7. //absolute 图像将不会随着单元格移动或调整大小;undefined 它指定使图像将根据单元格移动和调整其大小
  8. });
  9. //嵌入单元格
  10. worksheet.addImage(imageId2, {
  11. tl: { col: 0, row: 0 }, //嵌入位置
  12. ext: { width: 500, height: 200 }, //大小,单位像素
  13. hyperlinks: { //可选,给图片添加超链接
  14. hyperlink: 'http://www.somewhere.com',
  15. tooltip: 'http://www.somewhere.com'
  16. }
  17. });

工作表保护 protect

通过设置保护,避免其他用户修改表格
image.png

设置保护

  1. await worksheet.protect('the-password', options);

移除保护

  1. worksheet.unprotect();

保护的选项 options

只针对锁定的单元格有效,锁定见下方“单独设置单元格是否受保护”

属性 默认值 描述
selectLockedCells true 允许用户选择锁定的单元格
selectUnlockedCells true 允许用户选择未锁定的单元格
formatCells false 允许用户格式化单元格
formatColumns false 允许用户格式化列
formatRows false 允许用户格式化行
insertRows false 允许用户插入行
insertColumns false 允许用户插入列
insertHyperlinks false 允许用户插入超链接
deleteRows false 允许用户删除行
deleteColumns false 允许用户删除列
sort false 允许用户对数据进行排序
autoFilter false 允许用户过滤表中的数据
pivotTables false 允许用户使用数据透视表
spinCount 100000 保护或取消保护时执行的哈希迭代次数

单独设置单元格是否受保护

  1. ws.getCell('A1').protection = {
  2. locked: true, //工作表设置保护后,是否将单元格锁定。
  3. hidden: false, //工作表设置保护后,则单元格的公式是否可见。
  4. };