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

99 lines
4.7 KiB
JSON

{
"$schema": "../_schema.json",
"format": "xlsx",
"element": "row",
"parent": "sheet",
"operations": {
"add": true,
"set": true,
"get": true,
"query": true,
"remove": true
},
"paths": {
"positional": ["/SheetName/row[N]"]
},
"note": "Row index N is 1-based. Add/Set asymmetry: all formatting props are currently Set-only. Insert/move/clone at an occupied slot shifts every row at or past the slot down by one, and every range-bearing structure on the sheet (mergeCells, CF/DV sqref, autoFilter, hyperlink/table refs, named ranges, formula cell-refs) follows the displacement. 'add --from /SheetName/row[K]' with --before/--after clones cells + single-row mergeCells; relative formula refs are delta-shifted to the new anchor (Excel 'Insert Copied Cells' parity). Excel-style whole-row references (1:1; 2:5 spans on set) are accepted as input aliases for row[N]; readback paths stay canonical. Set also accepts TABLE COLUMN names as prop keys (`--prop Salary=9000` writes that column's cell in the row, symmetric with query row[Salary>5000]). When a key names BOTH a row property and a table column (e.g. a column headed 'Height'), the bare key is rejected as ambiguous (invalid_selector) — force the side with `--prop col.Height=180` (column cell) or `--prop @height=25` (row property); same col./@ escape vocabulary as query row[col.X…]/row[@X…].",
"examples": [
{
"title": "Filter rows by column name (resolves against a ListObject or a detected header-row table)",
"commands": [
"officecli query book.xlsx \"row[Salary>5000]\"",
"officecli query book.xlsx \"row[Region=West and Sales>1000]\"",
"officecli query book.xlsx \"row[Status=open or Priority=high]\""
]
},
{
"title": "Write a table column's cell on a row; disambiguate a column that shadows a row property",
"commands": [
"officecli set book.xlsx \"/Sheet1/row[2]\" --prop Salary=9000",
"officecli set book.xlsx \"/Sheet1/row[2]\" --prop col.Height=180",
"officecli set book.xlsx \"/Sheet1/row[2]\" --prop @height=25"
]
}
],
"properties": {
"matchedTable": {
"type": "string",
"description": "label of the table whose column predicate this row matched (emitted on row nodes returned by a row[Col op val] selector). Get-only.",
"add": false, "set": false, "get": true,
"enforcement": "report"
},
"tableSource": {
"type": "string",
"description": "`detected` when matchedTable came from a header-sniffed (not real listObject) table. Get-only.",
"add": false, "set": false, "get": true,
"enforcement": "report"
},
"cols": {
"type": "int",
"description": "number of empty cells to seed in the new row.",
"add": true, "set": false, "get": false,
"examples": ["--prop cols=5"],
"readback": "n/a (structural only)",
"enforcement": "strict"
},
"height": {
"type": "length",
"description": "row height in points.",
"add": true, "set": true, "get": true,
"examples": ["--prop height=24"],
"readback": "numeric points (raw double as stored)",
"enforcement": "strict"
},
"hidden": {
"type": "bool",
"description": "hide row.",
"add": true, "set": true, "get": true,
"examples": ["--prop hidden=true"],
"readback": "true when hidden, key absent otherwise",
"enforcement": "strict"
},
"outline": {
"type": "int",
"description": "outline/group level 0-7. Aliases: outlineLevel, group. Set accepts `outline`/`outlineLevel`/`group`; Get readback uses canonical key `outlineLevel`.",
"aliases": ["outlinelevel", "group"],
"add": false, "set": true, "get": false,
"examples": ["--prop outline=1"],
"readback": "see `outlineLevel`",
"enforcement": "report"
},
"outlineLevel": {
"type": "number",
"description": "row outline grouping level (0 = ungrouped, 1..7 = nested group depth). Get-only readback of the value set via `outline`.",
"add": false, "set": false, "get": true,
"readback": "integer 0..7; key omitted when row has no outline level",
"enforcement": "report"
},
"collapsed": {
"type": "bool",
"description": "collapsed row-group flag; omitted from Get when not collapsed.",
"add": false, "set": true, "get": true,
"examples": ["--prop collapsed=true"],
"readback": "true when the row group is collapsed",
"enforcement": "report"
},
"customHeight": { "type":"bool", "add":false, "set":false, "get":true, "description":"true when the row carries an explicit height (Row @customHeight). Get-only flag.", "readback":"true when row has a custom height", "enforcement":"report" }
}
}