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

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

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
就是一个单元格内,可以同时有多个不同的字体样式。
//方式1worksheet.getCell('A1').value = {'richText': [{'font': {'size': 12,'color': {'theme': 0},'name': 'Calibri','family': 2,'scheme': 'minor'},'text': 'This is '},{'font': {'italic': true,'size': 12,'color': {'theme': 0},'name': 'Calibri','scheme': 'minor'},'text': 'a'},{'font': {'size': 12,'color': {'theme': 1},'name': 'Calibri','family': 2,'scheme': 'minor'},'text': ' '},{'font': {'size': 12,'color': {'argb': 'FFFF6600'},'name': 'Calibri','scheme': 'minor'},'text': 'colorful'},{'font': {'size': 12,'color': {'theme': 1},'name': 'Calibri','family': 2,'scheme': 'minor'},'text': ' text '},{'font': {'size': 12,'color': {'argb': 'FFCCFFCC'},'name': 'Calibri','scheme': 'minor'},'text': 'with'},{'font': {'size': 12,'color': {'theme': 1},'name': 'Calibri','family': 2,'scheme': 'minor'},'text': ' in-cell '},{'font': {'bold': true,'size': 12,'color': {'theme': 1},'name': 'Calibri','family': 2,'scheme': 'minor'},'text': 'format'}]};//方式2expect(worksheet.getCell('A1').text).to.equal('This is a colorful text with in-cell format');expect(worksheet.getCell('A1').type).to.equal(Excel.ValueType.RichText);
对齐 alignment

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

worksheet.getCell('A1').border = {top: {style:'double', color: {argb:'FF00FF00'}}, //上边框left: {style:'double', color: {argb:'FF00FF00'}}, //左边框bottom: {style:'double', color: {argb:'FF00FF00'}}, //下边框right: {style:'double', color: {argb:'FF00FF00'}}, //右边框diagonal: {up: true, down: true, style:'thick', color: {argb:'FFFF0000'}}, //斜边框}
边框样式 style
thin 、dotted 、dashDot 、hair 、dashDotDot 、slantDashDot 、mediumDashed、 mediumDashDotDot、 mediumDashDot 、medium 、
double、thick
图案 fill

worksheet.getCell('A1').fill = {type: '图案类型值', //图案类型模式类型:'模式类型值',模式属性1:'模式属性1的值',模式属性2:'模式属性2的值'};
| 图案类型(二选一) | 图案模式(上图的图案样式) | 渐变模式(上图的填充效果) | |
|---|---|---|---|
| 图案类型值 | ‘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的样式相对较少,只有固定几个模式。 |


单元格保护 protection

ws.getCell('A1').protection = {locked: true, //锁定,指定在工作表受保护的情况下是否将单元格锁定。hidden: false, //隐藏,指定如果工作表受保护,则单元格的公式是否可见。};
================
条件格式 ConditionalFormatting
件格式化允许工作表根据单元格值或任意公式显示特定的样式,图标等。
条件格式设置规则是在工作表级别添加的,通常会覆盖一系列单元格。
可以将多个规则应用于给定的单元格范围,并且每个规则都将应用自己的样式。
如果多个规则影响给定的单元格,则规则优先级值将确定如果竞争样式冲突,则哪个规则胜出,优先级值较低的规则获胜。
如果没有为给定规则指定优先级值,ExcelJS 将按升序分配它们
添加规则
// 根据行和列为偶数或奇数向 A1:E7 添加一个棋盘图案worksheet.addConditionalFormatting({ref: 'A1:E7', //影响的单元格rules: [ //规则{type: '类型值',style: {fill: {type: 'pattern', pattern: 'solid', bgColor: {argb: 'FF00FF00'}}}, //样式priority:0, //优先级,可选属性,越小越优先,默认是自动分配属性1: 属性值1,属性2: 属性值2,属性3: 属性值3,}]})
类型值 type

| 类型值 | 描述 | 格式样式 |
|---|---|---|
| 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
类似折叠,有助于规划数据的位置,实际看需求使用。


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


默认是勾选的,勾选后位置不对,推荐去掉勾选,比较符合我们正常使用的习惯,也就是下面两个属性设置为false
worksheet.properties.outlineProperties = {summaryBelow: false,summaryRight: false,};
图片 Image
将图像添加到工作表是一个分为两个步骤的过程。
1、首先,通过 addImage() 函数将图像添加到工作簿中,该函数还将返回 imageId 值。
2、然后,使用 imageId,可以将图像作为浮动图片覆盖单元格区域 或 嵌入单元格 ,添加到工作表中。
1、添加到工作簿
// 通过文件名将图像添加到工作簿const imageId1 = workbook.addImage({filename: 'path/to/image.jpg',extension: 'jpeg',});// 通过 buffer 将图像添加到工作簿const imageId2 = workbook.addImage({buffer: fs.readFileSync('path/to.image.png'),extension: 'png',});// 通过 base64 将图像添加到工作簿const myBase64Image = "data:image/png;base64,iVBORw0KG...";const imageId2 = workbook.addImage({base64: myBase64Image,extension: 'png',});
2、添加到工作表
// 浮动图片worksheet.addImage(imageId2, 'B2:D6'); // 在 B2:D6 上插入图片worksheet.addImage(imageId2, { // 在 B2:D6 的一部分上插入图像tl: { col: 1.5, row: 1.5 },br: { col: 3.5, row: 5.5 },editAs: 'oneCell' //可选,oneCell默认值,表示图像将与单元格一起移动,但大小不变动;//absolute 图像将不会随着单元格移动或调整大小;undefined 它指定使图像将根据单元格移动和调整其大小});//嵌入单元格worksheet.addImage(imageId2, {tl: { col: 0, row: 0 }, //嵌入位置ext: { width: 500, height: 200 }, //大小,单位像素hyperlinks: { //可选,给图片添加超链接hyperlink: 'http://www.somewhere.com',tooltip: 'http://www.somewhere.com'}});
工作表保护 protect
设置保护
await worksheet.protect('the-password', options);
移除保护
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 | 保护或取消保护时执行的哈希迭代次数 |
单独设置单元格是否受保护
ws.getCell('A1').protection = {locked: true, //工作表设置保护后,是否将单元格锁定。hidden: false, //工作表设置保护后,则单元格的公式是否可见。};
