优先级
单元格样式 > 行样式 > 列样式
设置样式
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
就是一个单元格内,可以同时有多个不同的字体样式。
//方式1
worksheet.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'}
]
};
//方式2
expect(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, //工作表设置保护后,则单元格的公式是否可见。
};