Files
wehub-resource-sync 8cb1f9f479
Publish SDK (PyPI) / publish (push) Has been cancelled
Publish SDK (npm) / publish (@aionui/officecli-sdk) (push) Has been cancelled
SDK smoke / smoke (windows-latest) (push) Has been cancelled
Publish SDK (npm) / publish (@officecli/officecli-sdk) (push) Has been cancelled
Publish SDK (npm) / publish (@officecli/sdk) (push) Has been cancelled
Publish SDK (npm) / publish (officecli-sdk) (push) Has been cancelled
SDK smoke / smoke (macos-latest) (push) Has been cancelled
SDK smoke / smoke (ubuntu-latest) (push) Has been cancelled
Skill parity / diff (push) Has been cancelled
chore: import upstream snapshot with attribution
2026-07-13 13:09:29 +08:00

442 lines
14 KiB
JSON

{
"$schema": "../_schema.json",
"format": "docx",
"element": "cell",
"elementAliases": [
"tc"
],
"parent": "row",
"operations": {
"add": true,
"set": true,
"get": true,
"query": true,
"remove": true
},
"paths": {
"positional": [
"/body/tbl[N]/tr[R]/tc[C]"
]
},
"note": "Only 'text' and 'width' are honored at Add time; every other property is applied via Set after the cell exists. Run-level formatting (font/size/bold/italic/color/highlight/underline/strike) is written to every run in every paragraph in the cell — and to ParagraphMarkRunProperties when the cell has no runs yet. Border value format is STYLE[;SIZE[;COLOR[;SPACE]]], e.g. 'single;4;FF0000'.",
"extends": "_shared/table-cell",
"properties": {
"width": {
"type": "string",
"description": "cell preferred width (w:tcW). Accepts a bare twips integer or unit-qualified 'Ndxa' (Dxa), 'N%' (percent of table width), 'auto' (auto-fit, no preferred width), or 'nil' (no preferred width — distinct from a zero-twip explicit width). Get echoes the same unit-qualified form so the type round-trips losslessly.",
"add": true,
"set": true,
"get": true,
"examples": [
"--prop width=2500",
"--prop width=25%",
"--prop width=auto",
"--prop width=nil"
],
"readback": "'Ndxa' | 'N%' | 'auto' | 'nil' | '0dxa'",
"enforcement": "report"
},
"skipGridSync": {
"type": "bool",
"description": "suppress the per-cell tblGrid synchronization side effect that normally fires when `width` is set. Used by dump → batch replay to preserve the source table's authoritative colWidths when individual tcW values disagree with the gridCol widths (Word renders by tcW; tblGrid is a layout hint). Set-only.",
"add": false,
"set": true,
"get": false,
"examples": [
"--prop skipGridSync=true"
],
"readback": "n/a",
"enforcement": "report"
},
"font": {
"type": "string",
"description": "font family applied to every run in every paragraph in the cell (set-only; apply after add).",
"aliases": [
"fontname",
"fontFamily"
],
"add": false,
"set": true,
"get": true,
"examples": [
"--prop font=\"Times New Roman\""
],
"readback": "from first run's RunFonts.Ascii",
"enforcement": "report"
},
"size": {
"type": "font-size",
"description": "font size applied to every run in the cell. Accepts raw number (points), '14pt', '10.5pt' (set-only; apply after add).",
"aliases": [
"fontsize"
],
"add": false,
"set": true,
"get": true,
"examples": [
"--prop size=14pt",
"--prop size=10.5pt"
],
"readback": "unit-qualified, e.g. \"14pt\"",
"enforcement": "report"
},
"bold": {
"type": "bool",
"description": "bold applied to every run in the cell (set-only; apply after add).",
"add": false,
"set": true,
"get": true,
"examples": [
"--prop bold=true"
],
"readback": "true | (absent)",
"enforcement": "report"
},
"italic": {
"type": "bool",
"description": "italic applied to every run in the cell (set-only; apply after add).",
"add": false,
"set": true,
"get": true,
"examples": [
"--prop italic=true"
],
"readback": "true | (absent)",
"enforcement": "report"
},
"underline": {
"type": "enum",
"values": [
"none",
"single",
"double",
"thick",
"dotted",
"dash",
"wave",
"words"
],
"description": "underline style applied to every run in the cell (set-only; apply after add).",
"add": false,
"set": true,
"get": true,
"examples": [
"--prop underline=single",
"--prop underline=double"
],
"readback": "one of values",
"enforcement": "report"
},
"strike": {
"type": "bool",
"description": "strike-through applied to every run in the cell (set-only; apply after add).",
"add": false,
"set": true,
"get": true,
"examples": [
"--prop strike=true"
],
"readback": "true | (absent)",
"enforcement": "report"
},
"color": {
"type": "color",
"description": "run text color applied to every run in the cell (set-only; apply after add).",
"add": false,
"set": true,
"get": true,
"examples": [
"--prop color=FF0000",
"--prop color=#FF0000",
"--prop color=red"
],
"readback": "#RRGGBB uppercase",
"enforcement": "report"
},
"highlight": {
"type": "color",
"description": "text highlight color. Mapped to Word's named highlight palette (yellow, green, cyan, magenta, blue, red, darkBlue, …) (set-only; apply after add).",
"add": false,
"set": true,
"get": true,
"examples": [
"--prop highlight=yellow"
],
"readback": "highlight palette name",
"enforcement": "report"
},
"fill": {
"type": "color",
"description": "cell background shading (w:shd @fill). Accepts a solid color — hex ('FF0000'), '#'-prefixed hex ('#FF0000'), named color ('red'), rgb(...) notation, or 'transparent' to clear. docx <w:shd> has no native gradient primitive: the CSS-style hyphen form 'COLOR1-COLOR2[-ANGLE]' is NOT accepted (native gradient cell fill is a pptx-only feature). A synthetic two-stop gradient is available via the semicolon form 'gradient;STARTCOLOR;ENDCOLOR[;ANGLE]', emulated with a shading pattern. Bare 'none' is not accepted — use 'transparent'. Set-only; apply after add.",
"aliases": [
"shd",
"shading"
],
"add": false,
"set": true,
"get": true,
"examples": [
"--prop fill=FFFF00",
"--prop fill=#FF0000",
"--prop fill=red",
"--prop fill=transparent",
"--prop fill=\"gradient;FF0000;0000FF;90\""
],
"readback": "#RRGGBB uppercase, or 'gradient' (with a separate 'gradient' key)",
"enforcement": "report"
},
"align": {
"type": "enum",
"values": [
"left",
"center",
"right",
"justify",
"both",
"distribute"
],
"description": "horizontal paragraph alignment applied to every paragraph in the cell (set-only; apply after add).",
"aliases": [
"alignment"
],
"add": false,
"set": true,
"get": true,
"examples": [
"--prop align=center"
],
"readback": "one of values (from first paragraph)",
"enforcement": "report"
},
"valign": {
"type": "enum",
"values": [
"top",
"center",
"bottom"
],
"description": "vertical alignment of cell contents (set-only; apply after add).",
"add": false,
"set": true,
"get": true,
"examples": [
"--prop valign=center"
],
"readback": "one of values",
"enforcement": "report"
},
"colspan": {
"type": "int",
"description": "number of grid columns this cell spans. Aliases: gridspan. Adjusts cell width to the sum of spanned grid columns and removes now-redundant trailing cells in the row (set-only; apply after add).",
"aliases": [
"gridspan"
],
"add": false,
"set": true,
"get": true,
"examples": [
"--prop colspan=2"
],
"readback": "under key 'colspan' when > 1",
"enforcement": "report"
},
"fitText": {
"type": "bool",
"description": "enable w:fitText on every run so text is squeezed to the cell width (set-only; apply after add).",
"aliases": [
"fittext"
],
"add": false,
"set": true,
"get": false,
"examples": [
"--prop fitText=true"
],
"readback": "n/a",
"enforcement": "report"
},
"textDirection": {
"type": "enum",
"values": [
"lrtb",
"btlr",
"tbrl",
"horizontal",
"vertical",
"vertical-rl",
"tbrl-r",
"lrtb-r",
"tblr-r"
],
"description": "text flow direction inside the cell. Aliases: textdir (set-only; apply after add).",
"aliases": [
"textdir"
],
"add": false,
"set": true,
"get": true,
"examples": [
"--prop textDirection=btlr"
],
"readback": "OpenXML enum inner text",
"enforcement": "report"
},
"direction": {
"type": "enum",
"values": [
"rtl",
"ltr"
],
"aliases": [
"dir",
"bidi"
],
"description": "Reading direction (Arabic / Hebrew). 'rtl' writes <w:bidi/> on every cell paragraph, <w:rtl/> on each paragraph mark, and <w:rtl/> on every run; 'ltr' clears all three. Distinct from textDirection (which controls vertical/horizontal text flow inside the cell).",
"add": true,
"set": true,
"get": true,
"examples": [
"--prop direction=rtl"
],
"readback": "rtl when set, key absent otherwise",
"enforcement": "report"
},
"nowrap": {
"type": "bool",
"description": "disable text wrapping inside the cell.",
"add": true,
"set": true,
"get": true,
"examples": [
"--prop nowrap=true"
],
"readback": "true | (absent)",
"enforcement": "report"
},
"hideMark": {
"type": "bool",
"description": "w:hideMark — ignore the cell's end-of-cell mark when measuring the row height for autofit (the cell appears empty even though it holds a paragraph mark).",
"aliases": [
"hidemark"
],
"add": true,
"set": true,
"get": true,
"examples": [
"--prop hideMark=true"
],
"readback": "true | (absent)",
"enforcement": "report"
},
"tcFitText": {
"type": "bool",
"description": "w:tcFitText — fit the cell's text to its width (the tcPr-level toggle). Distinct from the run-level 'fitText' property, which squeezes each run via w:fitText.",
"aliases": [
"tcfittext"
],
"add": true,
"set": true,
"get": true,
"examples": [
"--prop tcFitText=true"
],
"readback": "true | (absent)",
"enforcement": "report"
},
"padding.top": {
"type": "number",
"description": "top cell margin in twips (integer; 1 twip = 1/20 pt, e.g. 100 = 5pt). Raw integer only — no unit suffix.",
"add": false,
"set": true,
"get": true,
"examples": [
"--prop padding.top=100"
],
"readback": "twips integer",
"enforcement": "report"
},
"padding.bottom": {
"type": "number",
"description": "bottom cell margin in twips (integer; 1 twip = 1/20 pt, e.g. 100 = 5pt). Raw integer only — no unit suffix.",
"add": false,
"set": true,
"get": true,
"examples": [
"--prop padding.bottom=100"
],
"readback": "twips integer",
"enforcement": "report"
},
"padding.left": {
"type": "number",
"description": "left cell margin in twips (integer; 1 twip = 1/20 pt, e.g. 100 = 5pt). Raw integer only — no unit suffix.",
"add": false,
"set": true,
"get": true,
"examples": [
"--prop padding.left=100"
],
"readback": "twips integer",
"enforcement": "report"
},
"padding.right": {
"type": "number",
"description": "right cell margin in twips (integer; 1 twip = 1/20 pt, e.g. 100 = 5pt). Raw integer only — no unit suffix.",
"add": false,
"set": true,
"get": true,
"examples": [
"--prop padding.right=100"
],
"readback": "twips integer",
"enforcement": "report"
},
"vmerge": {
"type": "enum",
"values": [
"restart",
"continue"
],
"description": "vertical merge marker (w:vMerge). 'restart' marks the top cell of a vertical span; 'continue' marks subsequent merged cells in the same column. Bare <w:vMerge/> reads as 'continue'.",
"add": false,
"set": true,
"get": true,
"examples": [
"--prop vmerge=restart",
"--prop vmerge=continue"
],
"readback": "restart|continue",
"enforcement": "report"
},
"hmerge": {
"type": "enum",
"values": [
"restart",
"continue"
],
"description": "horizontal merge marker (w:hMerge — legacy form). 'restart' marks the leading cell of a horizontal span; 'continue' marks subsequent merged cells. Most modern docs prefer gridSpan; hmerge is preserved for round-trip with files that already use it.",
"add": false,
"set": true,
"get": true,
"examples": [
"--prop hmerge=restart",
"--prop hmerge=continue"
],
"readback": "restart|continue",
"enforcement": "report"
},
"cnfStyle": {
"type": "string",
"description": "conditional-formatting bitmask (ST_Cnf @val) on the cell (tcPr). A 12-digit binary string — each '0'/'1' flags one region in order: firstRow, lastRow, firstColumn, lastColumn, oddVBand, evenVBand, oddHBand, evenHBand, firstRowFirstColumn, firstRowLastColumn, lastRowFirstColumn, lastRowLastColumn. Short binary input is right-padded to 12. Not a hex number.",
"add": false,
"set": true,
"get": true,
"examples": [
"--prop cnfStyle=100000000000"
],
"readback": "12-digit binary bitmask string",
"enforcement": "report"
}
}
}