Workbook sheet schema used when creating a live grid.
- Package
@sheetwrite/core
- Source
packages/core/src/types/document.ts#L11
Members 17
id Stable identifier, unique within the workbook and used by every cell address.
id: SheetIdtype SheetId = string;type SheetId = string;type SheetId = string;Stable identifier used to address a workbook sheet.API reference →;
name User-facing sheet name shown in tabs and workbook exports.
visibility Hidden worksheets remain addressable but are omitted from the tab strip.
visibility?: SheetVisibilitytype SheetVisibility = "visible" | "hidden" | "veryHidden";type SheetVisibility = "visible" | "hidden" | "veryHidden";type SheetVisibility =
| "visible"
| "hidden"
| "veryHidden";Native worksheet visibility preserved across workbook snapshots and tab rendering.API reference →;
columns Ordered schema; array positions are the zero-based column coordinates.
columns: Columninterface Column {
key: string;
header: string;
width: number;
type: CellFormat;
numberFormat?: string;
numberLocale?: string;
headerStyle?: CellStyle;
cellStyle?: CellStyle;
visible?: boolean;
renderer?: string;
}interface Column {
key: string;
header: string;
width: number;
type: CellFormat;
numberFormat?: string;
numberLocale?: string;
headerStyle?: CellStyle;
cellStyle?: CellStyle;
visible?: boolean;
renderer?: string;
}interface Column {
key: string;
header: string;
width: number;
type: CellFormat;
numberFormat?: string;
numberLocale?: string;
headerStyle?: CellStyle;
cellStyle?: CellStyle;
visible?: boolean;
renderer?: string;
}Schema and default presentation for one workbook column.API reference →[];
rowCount Row count for both in-memory and datasource-backed sheets.
rowHeights Sparse per-row height overrides; default comes from the theme.
rowHeights?: Map<number, number>;
hiddenRows Persisted hidden data rows; runtime form is sparse and non-JSON.
hiddenRows?: Set<number>;
rowGroups Persisted collapsible row groups.
rowGroups?: RowGroupinterface RowGroup {
start: number;
end: number;
collapsed: boolean;
}interface RowGroup {
start: number;
end: number;
collapsed: boolean;
}interface RowGroup {
start: number;
end: number;
collapsed: boolean;
}A collapsible row group (data-row range, end-inclusive), Sheets-style.API reference →[];
conditionalFormats Conditional styles folded into the bulk render-window style dictionary.
conditionalFormats?: ConditionalFormatRuleinterface ConditionalFormatRule {
range: Range;
when: ConditionalFormatPredicate;
style: CellStyle;
}interface ConditionalFormatRule {
range: Range;
when: ConditionalFormatPredicate;
style: CellStyle;
}interface ConditionalFormatRule {
range: Range;
when: ConditionalFormatPredicate;
style: CellStyle;
}Ordered condition and style applied to a cell range.API reference →[];
validationRules Serializable data-entry rules evaluated at the local mutation barrier.
validationRules?: DataValidationRuleinterface DataValidationRule {
id: string;
range: Range;
condition: DataValidationCondition;
policy: ValidationPolicy;
allowBlank?: boolean;
helpText?: string;
}interface DataValidationRule {
id: string;
range: Range;
condition: DataValidationCondition;
policy: ValidationPolicy;
allowBlank?: boolean;
helpText?: string;
}interface DataValidationRule {
id: string;
range: Range;
condition: DataValidationCondition;
policy: ValidationPolicy;
allowBlank?: boolean;
helpText?: string;
}One stable, range-scoped data-entry rule. Blank cells are allowed unless disabled.API reference →[];
protectedRanges Client-side protected-range policy metadata; never server authorization.
protectedRanges?: ProtectedRangeinterface ProtectedRange {
id: string;
range: Range;
label?: string;
permissionKey?: string;
}interface ProtectedRange {
id: string;
range: Range;
label?: string;
permissionKey?: string;
}interface ProtectedRange {
id: string;
range: Range;
label?: string;
permissionKey?: string;
}Serializable client UX policy. A host resolver decides whether a local mutation may proceed.API reference →[];
notes Simple cell notes. Discussion threads live outside the document model.
notes?: CellNoteinterface CellNote {
addr: CellAddress;
text: string;
}interface CellNote {
addr: CellAddress;
text: string;
}interface CellNote {
addr: CellAddress;
text: string;
}Serializable plain-text note anchored to a cell.API reference →[];
sortKeys Persisted sort keys for the sheet's view.
sortKeys?: SortKeyinterface SortKey {
col: number;
ascending: boolean;
}interface SortKey {
col: number;
ascending: boolean;
}interface SortKey {
col: number;
ascending: boolean;
}One key of a multi-column sort, applied in array order (first = primary).API reference →[];
filters Persisted column filters as JSON-safe index/value tuples.
filters?: Array<[col: number, filter: ColumnFiltertype ColumnFilter =
| { kind: "values"; values: readonly CellScalar[] }
| { kind: "contains"; text: string; matchCase?: boolean }
| {
kind: "compare";
op: "gt" | "gte" | "lt" | "lte" | "eq" | "neq";
value: number;
}
| { kind: "empty" }
| { kind: "nonEmpty" };type ColumnFilter =
| { kind: "values"; values: readonly CellScalar[] }
| { kind: "contains"; text: string; matchCase?: boolean }
| {
kind: "compare";
op: "gt" | "gte" | "lt" | "lte" | "eq" | "neq";
value: number;
}
| { kind: "empty" }
| { kind: "nonEmpty" };type ColumnFilter =
| {
kind: "values";
values: readonly CellScalar[];
}
| {
kind: "contains";
text: string;
matchCase?: boolean;
}
| {
kind: "compare";
op:
| "gt"
| "gte"
| "lt"
| "lte"
| "eq"
| "neq";
// … 4 more lines — see the API reference
}One column's filter predicate. All active column filters AND together; matching is against the cell's resolved value (text or number).API reference →]>;
merges Persisted merged-cell regions; covered cells render/export from the anchor.
merges?: MergeRangeinterface MergeRange {
r0: number;
c0: number;
r1: number;
c1: number;
}interface MergeRange {
r0: number;
c0: number;
r1: number;
c1: number;
}interface MergeRange {
r0: number;
c0: number;
r1: number;
c1: number;
}Inclusive merged-cell rectangle in data-row/column coordinates.API reference →[];
frozenRows Leading view rows pinned above the scrolling body (0/undefined = none).
frozenCols Leading columns pinned left of the scrolling body (0/undefined = none).
Declaration
View full TypeScript declaration
id: SheetIdtype SheetId = string;type SheetId = string;type SheetId = string;Stable identifier used to address a workbook sheet.API reference →; visibility?: SheetVisibilitytype SheetVisibility = "visible" | "hidden" | "veryHidden";type SheetVisibility = "visible" | "hidden" | "veryHidden";type SheetVisibility =
| "visible"
| "hidden"
| "veryHidden";Native worksheet visibility preserved across workbook snapshots and tab rendering.API reference →; columns: Columninterface Column {
key: string;
header: string;
width: number;
type: CellFormat;
numberFormat?: string;
numberLocale?: string;
headerStyle?: CellStyle;
cellStyle?: CellStyle;
visible?: boolean;
renderer?: string;
}interface Column {
key: string;
header: string;
width: number;
type: CellFormat;
numberFormat?: string;
numberLocale?: string;
headerStyle?: CellStyle;
cellStyle?: CellStyle;
visible?: boolean;
renderer?: string;
}interface Column {
key: string;
header: string;
width: number;
type: CellFormat;
numberFormat?: string;
numberLocale?: string;
headerStyle?: CellStyle;
cellStyle?: CellStyle;
visible?: boolean;
renderer?: string;
}Schema and default presentation for one workbook column.API reference →[]; rowHeights?: Map<number, number>;
hiddenRows?: Set<number>;
rowGroups?: RowGroupinterface RowGroup {
start: number;
end: number;
collapsed: boolean;
}interface RowGroup {
start: number;
end: number;
collapsed: boolean;
}interface RowGroup {
start: number;
end: number;
collapsed: boolean;
}A collapsible row group (data-row range, end-inclusive), Sheets-style.API reference →[]; conditionalFormats?: ConditionalFormatRuleinterface ConditionalFormatRule {
range: Range;
when: ConditionalFormatPredicate;
style: CellStyle;
}interface ConditionalFormatRule {
range: Range;
when: ConditionalFormatPredicate;
style: CellStyle;
}interface ConditionalFormatRule {
range: Range;
when: ConditionalFormatPredicate;
style: CellStyle;
}Ordered condition and style applied to a cell range.API reference →[]; validationRules?: DataValidationRuleinterface DataValidationRule {
id: string;
range: Range;
condition: DataValidationCondition;
policy: ValidationPolicy;
allowBlank?: boolean;
helpText?: string;
}interface DataValidationRule {
id: string;
range: Range;
condition: DataValidationCondition;
policy: ValidationPolicy;
allowBlank?: boolean;
helpText?: string;
}interface DataValidationRule {
id: string;
range: Range;
condition: DataValidationCondition;
policy: ValidationPolicy;
allowBlank?: boolean;
helpText?: string;
}One stable, range-scoped data-entry rule. Blank cells are allowed unless disabled.API reference →[]; protectedRanges?: ProtectedRangeinterface ProtectedRange {
id: string;
range: Range;
label?: string;
permissionKey?: string;
}interface ProtectedRange {
id: string;
range: Range;
label?: string;
permissionKey?: string;
}interface ProtectedRange {
id: string;
range: Range;
label?: string;
permissionKey?: string;
}Serializable client UX policy. A host resolver decides whether a local mutation may proceed.API reference →[]; notes?: CellNoteinterface CellNote {
addr: CellAddress;
text: string;
}interface CellNote {
addr: CellAddress;
text: string;
}interface CellNote {
addr: CellAddress;
text: string;
}Serializable plain-text note anchored to a cell.API reference →[]; sortKeys?: SortKeyinterface SortKey {
col: number;
ascending: boolean;
}interface SortKey {
col: number;
ascending: boolean;
}interface SortKey {
col: number;
ascending: boolean;
}One key of a multi-column sort, applied in array order (first = primary).API reference →[]; filters?: Array<[col: number, filter: ColumnFiltertype ColumnFilter =
| { kind: "values"; values: readonly CellScalar[] }
| { kind: "contains"; text: string; matchCase?: boolean }
| {
kind: "compare";
op: "gt" | "gte" | "lt" | "lte" | "eq" | "neq";
value: number;
}
| { kind: "empty" }
| { kind: "nonEmpty" };type ColumnFilter =
| { kind: "values"; values: readonly CellScalar[] }
| { kind: "contains"; text: string; matchCase?: boolean }
| {
kind: "compare";
op: "gt" | "gte" | "lt" | "lte" | "eq" | "neq";
value: number;
}
| { kind: "empty" }
| { kind: "nonEmpty" };type ColumnFilter =
| {
kind: "values";
values: readonly CellScalar[];
}
| {
kind: "contains";
text: string;
matchCase?: boolean;
}
| {
kind: "compare";
op:
| "gt"
| "gte"
| "lt"
| "lte"
| "eq"
| "neq";
// … 4 more lines — see the API reference
}One column's filter predicate. All active column filters AND together; matching is against the cell's resolved value (text or number).API reference →]>; merges?: MergeRangeinterface MergeRange {
r0: number;
c0: number;
r1: number;
c1: number;
}interface MergeRange {
r0: number;
c0: number;
r1: number;
c1: number;
}interface MergeRange {
r0: number;
c0: number;
r1: number;
c1: number;
}Inclusive merged-cell rectangle in data-row/column coordinates.API reference →[];