单元格级别
Cell 类代表单个单元格,提供完整的数据、样式、验证等功能。
| 属性 | 类型 | 说明 |
|---|---|---|
editVal |
string |
编辑值或公式(可读写) |
calcVal |
any |
计算值(只读) |
showVal |
string |
显示值(只读) |
type |
string |
单元格类型(只读):string/number/date/time/dateTime/boolean/error |
isFormula |
boolean |
是否为公式(只读) |
isMerged |
boolean |
是否为合并单元格 |
master |
CellNum | null |
如果是合并单元格,指向主单元格 |
| 属性 | 类型 | 说明 |
|---|---|---|
font |
object |
字体样式 |
alignment |
object |
对齐方式 |
border |
object |
边框样式 |
fill |
object |
填充样式 |
numFmt |
string |
数字格式 |
| 属性 | 类型 | 说明 |
|---|---|---|
hyperlink |
object |
超链接配置 |
dataValidation |
object |
数据验证规则 |
validData |
boolean |
数据验证结果(只读) |
字体样式配置对象。
{
name?: string; // 字体名称,如 'Arial', '微软雅黑'
size?: number; // 字体大小,默认 11
bold?: boolean; // 是否粗体
italic?: boolean; // 是否斜体
underline?: string; // 下划线:'single' | 'double' | 'none'
strike?: boolean; // 是否删除线
color?: string; // 字体颜色,格式:'#RRGGBB'
vertAlign?: string; // 上下标:'superscript' | 'subscript'
outline?: boolean; // 是否轮廓(Mac专用)
charset?: number; // 字符集
}
示例:
const cell = sheet.getCell(0, 0);
// 基础字体设置
cell.font = {
name: '微软雅黑',
size: 14,
bold: true
};
// 带颜色和下划线
cell.font = {
size: 12,
color: '#FF0000',
underline: 'single'
};
// 删除线
cell.font = { strike: true };
对齐方式配置对象。
{
horizontal?: string; // 水平对齐:'left' | 'center' | 'right' | 'fill' | 'justify' | 'distributed'
vertical?: string; // 垂直对齐:'top' | 'middle' | 'bottom' | 'justify' | 'distributed'
wrapText?: boolean; // 是否自动换行
indent?: number; // 缩进级别(仅 horizontal='left'/'right' 时有效)
}
示例:
// 水平居中,垂直居中
cell.alignment = {
horizontal: 'center',
vertical: 'middle'
};
// 自动换行
cell.alignment = { wrapText: true };
// 左对齐并缩进2级
cell.alignment = {
horizontal: 'left',
indent: 2
};
// 两端对齐
cell.alignment = {
horizontal: 'justify',
vertical: 'top'
};
边框样式配置对象,可单独设置四个方向的边框。
{
top?: {
style: string; // 边框样式
color?: string; // 边框颜色,格式:'#RRGGBB',默认 '#000000'
};
right?: { style: string; color?: string; };
bottom?: { style: string; color?: string; };
left?: { style: string; color?: string; };
diagonal?: { style: string; color?: string; };
}
边框样式 (style):
thin- 细线(最常用)medium- 中等thick- 粗线dotted- 点线dashed- 虚线double- 双线hair- 极细线dashDot- 点划线dashDotDot- 双点划线mediumDashed- 中等虚线mediumDashDot- 中等点划线mediumDashDotDot- 中等双点划线slantDashDot- 斜点划线
示例:
// 设置所有边框
cell.border = {
top: { style: 'thin' },
right: { style: 'thin' },
bottom: { style: 'thin' },
left: { style: 'thin' }
};
// 设置单边框
cell.border = {
bottom: { style: 'medium', color: '#FF0000' }
};
// 添加对角线
cell.border = {
diagonal: { style: 'thin', color: '#0000FF' }
};
// 清空边框
cell.border = {};
填充样式配置对象,支持纯色填充和渐变填充。
{
type: 'pattern'; // 填充类型
pattern: string; // 图案类型
fgColor?: string; // 前景色,格式:'#RRGGBB'
bgColor?: string; // 背景色,格式:'#RRGGBB'
}
图案类型 (pattern):
solid- 纯色(最常用)darkGray- 深灰mediumGray- 中灰lightGray- 浅灰gray125- 12.5% 灰gray0625- 6.25% 灰darkHorizontal- 深色横线darkVertical- 深色竖线darkDown- 深色斜线(左上到右下)darkUp- 深色斜线(左下到右上)darkGrid- 深色网格darkTrellis- 深色斜网格lightHorizontal- 浅色横线lightVertical- 浅色竖线lightDown- 浅色斜线(左上到右下)lightUp- 浅色斜线(左下到右上)lightGrid- 浅色网格lightTrellis- 浅色斜网格
{
type: 'gradient'; // 填充类型
gradientType?: string; // 渐变类型:'linear' | 'path'
degree?: number; // 线性渐变角度(0-360)
left?: number; // 左侧偏移(0-1)
right?: number; // 右侧偏移(0-1)
top?: number; // 顶部偏移(0-1)
bottom?: number; // 底部偏移(0-1)
stops: Array<{ // 渐变色停止点
position: number; // 位置(0-1)
color: string; // 颜色,格式:'#RRGGBB'
}>;
}
示例:
// 纯色背景(最常用)
cell.fill = {
type: 'pattern',
pattern: 'solid',
fgColor: '#FFFF00'
};
// 图案填充
cell.fill = {
type: 'pattern',
pattern: 'lightGrid',
fgColor: '#FF0000',
bgColor: '#FFFFFF'
};
// 线性渐变(从红到蓝)
cell.fill = {
type: 'gradient',
gradientType: 'linear',
degree: 90,
stops: [
{ position: 0, color: '#FF0000' },
{ position: 1, color: '#0000FF' }
]
};
// 路径渐变
cell.fill = {
type: 'gradient',
gradientType: 'path',
left: 0.5,
right: 0.5,
top: 0.5,
bottom: 0.5,
stops: [
{ position: 0, color: '#FFFFFF' },
{ position: 1, color: '#000000' }
]
};
// 清空填充
cell.fill = {};
数字格式字符串,用于控制数值、日期、时间的显示格式。
| 格式字符串 | 说明 | 示例 |
|---|---|---|
0 |
整数 | 1234 |
0.00 |
保留2位小数 | 1234.50 |
#,##0 |
千分位分隔符 | 1,234 |
#,##0.00 |
千分位+2位小数 | 1,234.50 |
0% |
百分比 | 50% |
0.00% |
百分比+2位小数 | 50.25% |
0.00E+00 |
科学计数法 | 1.23E+03 |
# ?/? |
分数 | 1 1/4 |
¥#,##0.00 |
货币格式 | ¥1,234.50 |
yyyy/m/d |
日期(年/月/日) | 2024/1/15 |
m/d/yyyy |
日期(月/日/年) | 1/15/2024 |
yyyy-mm-dd |
日期(年-月-日) | 2024-01-15 |
h:mm |
时间(时:分) | 14:30 |
h:mm:ss |
时间(时:分:秒) | 14:30:25 |
yyyy/m/d h:mm:ss |
日期时间 | 2024/1/15 14:30:25 |
[Red]0.00 |
负数显示红色 | -12.34 |
0.00;[Red]-0.00 |
正数黑色,负数红色 | 12.34 或 -12.34 |
数字部分:
0- 占位符,不足补0#- 占位符,不足不显示,- 千分位分隔符.- 小数点%- 百分比?- 空格占位(用于对齐)
日期部分:
yyyy- 四位年份(2024)yy- 两位年份(24)m- 月份(1-12)mm- 月份补0(01-12)mmm- 月份简写(Jan-Dec)mmmm- 月份全称(January-December)d- 日期(1-31)dd- 日期补0(01-31)ddd- 星期简写(Sun-Sat)dddd- 星期全称(Sunday-Saturday)
时间部分:
h- 小时(0-23)hh- 小时补0(00-23)m- 分钟(0-59)mm- 分钟补0(00-59)s- 秒(0-59)ss- 秒补0(00-59)AM/PM- 12小时制
示例:
const cell = sheet.getCell(0, 0);
// 数字格式
cell.editVal = 1234.5;
cell.numFmt = '#,##0.00'; // 显示:1,234.50
// 百分比
cell.editVal = 0.258;
cell.numFmt = '0.00%'; // 显示:25.80%
// 货币
cell.editVal = 1234.5;
cell.numFmt = '¥#,##0.00'; // 显示:¥1,234.50
// 日期
cell.editVal = '2024/1/15';
cell.numFmt = 'yyyy-mm-dd'; // 显示:2024-01-15
// 时间
cell.editVal = '14:30:25';
cell.numFmt = 'h:mm:ss'; // 显示:14:30:25
// 自定义格式(正数、负数、零、文本)
cell.numFmt = '0.00;[Red]-0.00;"零";@';
// 清除格式(恢复常规)
cell.numFmt = null;
超链接配置对象。
{
target?: string; // 外部链接 URL(如 'https://example.com')
location?: string; // 内部链接位置(如 'Sheet2!A1')
tooltip?: string; // 鼠标悬停提示文本
}
示例:
// 外部链接
cell.editVal = '访问官网';
cell.hyperlink = {
target: 'https://www.sheetnext.com',
tooltip: '点击访问 SheetNext 官网'
};
// 内部链接(跳转到其他工作表)
cell.editVal = '查看数据';
cell.hyperlink = {
location: 'Sheet2!A1',
tooltip: '跳转到 Sheet2 的 A1 单元格'
};
// 移除超链接
cell.hyperlink = {};
数据验证规则配置对象,用于限制单元格可输入的内容。
{
type: string; // 验证类型:'list' | 'whole' | 'decimal' | 'date' | 'time' | 'textLength' | 'custom'
operator?: string; // 操作符:'between' | 'notBetween' | 'equal' | 'notEqual' | 'greaterThan' | 'lessThan' | 'greaterThanOrEqual' | 'lessThanOrEqual'
allowBlank?: boolean; // 是否允许空白,默认 false
formula1: any; // 公式1(type='list' 时为数组)
formula2?: any; // 公式2(范围验证时使用)
showInputMessage?: boolean; // 是否显示输入提示,默认 true
promptTitle?: string; // 输入提示标题
prompt?: string; // 输入提示内容
showErrorMessage?: boolean; // 是否显示错误提示,默认 true
errorTitle?: string; // 错误提示标题
error?: string; // 错误提示内容
errorStyle?: string; // 错误样式:'stop' | 'warning' | 'information'
showDropDown?: boolean; // 是否显示下拉框(type='list' 时),默认 true
}
示例:
// 下拉列表
cell.dataValidation = {
type: 'list',
formula1: ['优秀', '良好', '及格', '不及格'],
showDropDown: true,
promptTitle: '请选择',
prompt: '请从列表中选择一个等级'
};
// 整数范围(1-100)
cell.dataValidation = {
type: 'whole',
operator: 'between',
formula1: 1,
formula2: 100,
errorTitle: '输入错误',
error: '请输入 1 到 100 之间的整数'
};
// 小数验证(大于0)
cell.dataValidation = {
type: 'decimal',
operator: 'greaterThan',
formula1: 0,
errorTitle: '输入错误',
error: '请输入大于 0 的数字'
};
// 日期范围
cell.dataValidation = {
type: 'date',
operator: 'between',
formula1: '2024/1/1',
formula2: '2024/12/31',
errorTitle: '日期错误',
error: '请输入 2024 年的日期'
};
// 时间验证
cell.dataValidation = {
type: 'time',
operator: 'between',
formula1: '9:00:00',
formula2: '18:00:00',
errorTitle: '时间错误',
error: '请输入工作时间(9:00-18:00)'
};
// 文本长度限制
cell.dataValidation = {
type: 'textLength',
operator: 'lessThanOrEqual',
formula1: 20,
errorTitle: '文本过长',
error: '最多输入 20 个字符'
};
// 移除验证
cell.dataValidation = {};