{ "$schema": "../_schema.json", "format": "xlsx", "element": "table", "elementAliases": ["listobject"], "parent": "sheet", "operations": { "add": true, "set": true, "get": true, "query": true, "remove": true }, "paths": { "positional": [ "/SheetName/table[N]" ] }, "note": "'ref' (alias 'range') required: cell range like 'A1:C10'. Rejects ranges that overlap existing tables. Names sanitized; style validated against built-in/custom whitelist. QUERY: `query table` returns real ListObjects (type=table) PLUS heuristically detected table-shaped blocks (type=detectedtable, stable=false, honest range path like /Sheet1/A1:D10 — never a fake /table[N]). Detection is strict/high-precision: a block qualifies only with a contiguous >=2-column non-numeric-text header row, >=1 data row below, and no overlap with a real ListObject. Use `query listobject` to get ONLY real ListObjects (no detection). add/set/get/remove operate exclusively on real ListObjects via /table[N]; detected blocks are query-only and addressed by their range path.", "extends": [ "_shared/table", "_shared/table.pptx-xlsx" ], "properties": { "ref": { "type": "string", "description": "cell range reference (A1:C10). Required. Alias: range.", "aliases": [ "range" ], "add": true, "set": true, "get": true, "examples": [ "--prop ref=A1:C10" ], "readback": "range string", "enforcement": "report" }, "displayName": { "type": "string", "description": "Excel UI display name. Defaults to name.", "add": true, "set": true, "get": true, "examples": [ "--prop displayName=SalesData" ], "readback": "display name", "enforcement": "report" }, "headerRow": { "type": "bool", "description": "show header row. Alias: showHeader.", "aliases": [ "showHeader" ], "add": true, "set": true, "get": true, "examples": [ "--prop headerRow=true" ], "readback": "true/false", "enforcement": "report" }, "totalRow": { "type": "bool", "description": "show total row. Aliases: totalsRow, showTotals.", "aliases": [ "totalsRow", "showTotals" ], "add": true, "set": true, "get": true, "examples": [ "--prop totalRow=true" ], "readback": "true/false", "enforcement": "report" }, "autoExpand": { "type": "bool", "description": "auto-expand range downward through contiguous non-empty rows at Add time.", "add": true, "set": false, "get": false, "examples": [ "--prop autoExpand=true" ], "readback": "affects range at Add time", "enforcement": "report" }, "showFirstColumn": { "type": "bool", "description": "highlight the first column with the table style. Alias: firstColumn.", "aliases": [ "firstColumn" ], "add": true, "set": true, "get": true, "examples": [ "--prop showFirstColumn=true" ], "readback": "true/false", "enforcement": "report" }, "showLastColumn": { "type": "bool", "description": "highlight the last column with the table style. Alias: lastColumn.", "aliases": [ "lastColumn" ], "add": true, "set": true, "get": true, "examples": [ "--prop showLastColumn=true" ], "readback": "true/false", "enforcement": "report" }, "showRowStripes": { "type": "bool", "description": "alternate-row banding from the table style. Default: true. Aliases: showBandedRows, bandedRows, bandRows.", "aliases": [ "showBandedRows", "bandedRows", "bandRows" ], "add": true, "set": true, "get": true, "examples": [ "--prop showRowStripes=false" ], "readback": "true/false", "enforcement": "report" }, "showColumnStripes": { "type": "bool", "description": "alternate-column banding from the table style. Default: false. Aliases: showBandedColumns, bandedColumns, bandedCols, showColStripes, bandCols.", "aliases": [ "showBandedColumns", "bandedColumns", "bandedCols", "showColStripes", "bandCols" ], "add": true, "set": true, "get": true, "examples": [ "--prop showColumnStripes=true" ], "readback": "true/false", "enforcement": "report" }, "columns": { "type": "string", "description": "comma-separated column header names overriding A1, B1, ... defaults.", "add": true, "set": false, "get": true, "examples": [ "--prop columns=Name,Qty,Price" ], "readback": "comma-separated column names as stored (e.g. \"Name,Qty,Price\")", "enforcement": "report" }, "totalsRowFunction": { "type": "string", "description": "comma-separated per-column totals row functions (none|sum|average|count|countNums|max|min|stdDev|var|custom). Effective only when totalRow=true.", "add": true, "set": false, "get": false, "examples": [ "--prop totalsRowFunction=none,sum,average" ], "readback": "per-column tokens", "enforcement": "report" }, "totalFunction": { "type": "string", "add": false, "set": false, "get": true, "description": "per-column totals-row function readback (surfaces on the column child node).", "readback": "function token", "enforcement": "report" }, "totalLabel": { "type": "string", "add": false, "set": false, "get": true, "description": "per-column totals-row label readback (surfaces on the column child node).", "readback": "label text", "enforcement": "report" } } }