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

274 lines
12 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Tables Showcase
Comprehensive table demo spanning Word (.docx), Excel (.xlsx), and PowerPoint (.pptx). Three output files are generated by a single script. This document covers the Word portion in detail.
- **tables.sh** — builds all three files with `officecli` (483 lines).
- **tables.docx** — Word output: 7 tables covering vertical merge, horizontal merge, color heatmap, border/layout/direction/cell-formatting, hmerge, RTL, and inline `data` shorthand.
- **tables.xlsx** — Excel output: 3 sheets with sales data, employee performance formulas, and cross-sheet summary.
- **tables.pptx** — PowerPoint output: 3 slides including a raw-XML data table.
- **tables.md** — this file.
## Regenerate
```bash
cd examples/word
bash tables.sh
# → tables.docx tables.xlsx tables.pptx
```
## Table 1: Project Progress Tracker (Vertical Merge)
A 7-row × 6-column table with `vmerge=restart`/`continue` to span project rows, shaded header, and color-coded progress cells.
```bash
# Create blank table
officecli add tables.docx /body --type table --prop rows=7 --prop cols=6
# Header row — blue shading, white bold text, center-aligned
officecli set tables.docx '/body/tbl[1]/tr[1]/tc[1]' \
--prop text="Project Name" --prop bold=true \
--prop shd=4472C4 --prop color=FFFFFF --prop valign=center
# ... repeat for tc[2]tc[6] ...
# Project A rows — restart merge on first row, continue on next two
officecli set tables.docx '/body/tbl[1]/tr[2]/tc[1]' \
--prop text="Smart Office System" \
--prop vmerge=restart --prop valign=center --prop shd=D9E2F3
officecli set tables.docx '/body/tbl[1]/tr[3]/tc[1]' \
--prop text="" --prop vmerge=continue --prop shd=D9E2F3
officecli set tables.docx '/body/tbl[1]/tr[4]/tc[1]' \
--prop text="" --prop vmerge=continue --prop shd=D9E2F3
# Color-coded progress — green/amber/red
officecli set tables.docx '/body/tbl[1]/tr[2]/tc[6]' \
--prop text="100%" --prop color=00B050
officecli set tables.docx '/body/tbl[1]/tr[3]/tc[6]' \
--prop text="75%" --prop color=FFC000
officecli set tables.docx '/body/tbl[1]/tr[4]/tc[6]' \
--prop text="0%" --prop color=FF0000
```
**Features:** `vmerge` (restart/continue — vertical cell merge across rows), `valign` (top/center/bottom), `shd` (hex cell background), `bold`, `color` (text color), `text`
## Table 2: Financial Statement (Gridspan + Vertical Merge)
An 8-row × 5-column table with a two-row header using `gridspan=2` (horizontal merge) and `vmerge` on the outer columns, plus right-aligned numeric data with color highlights.
```bash
officecli add tables.docx /body --type table --prop rows=8 --prop cols=5
# Two-column header span: gridspan=2 removes the merged cell;
# original tc[5] becomes tc[4] after the merge
officecli set tables.docx '/body/tbl[2]/tr[1]/tc[3]' \
--prop text="Amount (10K USD)" \
--prop bold=true --prop shd=2E75B6 --prop color=FFFFFF \
--prop gridspan=2 --prop align=center
# Row 2 sub-headers (Budget / Actual)
officecli set tables.docx '/body/tbl[2]/tr[2]/tc[3]' \
--prop text="Budget" --prop bold=true --prop shd=5B9BD5 \
--prop color=FFFFFF --prop align=center
officecli set tables.docx '/body/tbl[2]/tr[2]/tc[4]' \
--prop text="Actual" --prop bold=true --prop shd=5B9BD5 \
--prop color=FFFFFF --prop align=center
# Data rows: right-align numeric cells, color-code vs. budget
officecli set tables.docx '/body/tbl[2]/tr[3]/tc[3]' \
--prop text="500.00" --prop align=right
officecli set tables.docx '/body/tbl[2]/tr[3]/tc[4]' \
--prop text="523.50" --prop align=right --prop color=00B050
```
**Features:** `gridspan` (integer ≥ 2; collapses that many cells into one — handler removes the absorbed `tc` elements automatically), `align` (left/center/right on cell paragraph), `vmerge` (restart/continue combined with gridspan for multi-level headers)
## Table 3: Skill Assessment Matrix (Color Heatmap)
A 6-row × 7-column color-coded matrix. Each cell uses `shd` for the fill and `color=FFFFFF` for white text, producing a traffic-light heatmap.
```bash
officecli add tables.docx /body --type table --prop rows=6 --prop cols=7
# Header row — dark navy
officecli set tables.docx '/body/tbl[3]/tr[1]/tc[1]' \
--prop text="Name/Skill" --prop bold=true \
--prop shd=002060 --prop color=FFFFFF --prop align=center
# Data cells: Expert=00B050, Proficient=92D050, Familiar=FFC000, Beginner=FF0000
officecli set tables.docx '/body/tbl[3]/tr[2]/tc[2]' \
--prop text="Expert" --prop shd=00B050 --prop color=FFFFFF \
--prop align=center --prop bold=true
officecli set tables.docx '/body/tbl[3]/tr[2]/tc[3]' \
--prop text="Proficient" --prop shd=92D050 --prop color=FFFFFF \
--prop align=center --prop bold=true
# ... and so on for each cell ...
```
**Features:** `shd` (cell fill for heatmap coloring), `bold` + `color=FFFFFF` (white text on colored backgrounds), `align=center`
## Table 4: Property Coverage (Border / Layout / Direction / Cell Formatting)
A table created with `border.all`, `colWidths`, `cellSpacing`, `indent`, `layout`, and `padding`, then each border side is overridden individually. Row and cell properties exercise the full tc property surface.
```bash
# Create table with all table-level props
officecli add tables.docx /body --type table \
--prop rows=3 --prop cols=4 \
--prop "border.all=single;8;2E74B5" \
--prop "colWidths=2500,2500,2500,2500" \
--prop "cellSpacing=20" \
--prop "indent=200" \
--prop "layout=fixed" \
--prop "padding=80"
# Override individual border sides after creation
officecli set tables.docx '/body/tbl[4]' --prop "border.top=double;8;1F3864"
officecli set tables.docx '/body/tbl[4]' --prop "border.bottom=double;8;1F3864"
officecli set tables.docx '/body/tbl[4]' --prop "border.left=double;8;1F3864"
officecli set tables.docx '/body/tbl[4]' --prop "border.right=double;8;1F3864"
officecli set tables.docx '/body/tbl[4]' --prop "border.horizontal=single;4;9DC3E6"
officecli set tables.docx '/body/tbl[4]' --prop "border.vertical=single;4;9DC3E6"
# Row-level props: header repeat + exact height
officecli set tables.docx '/body/tbl[4]/tr[1]' \
--prop header=true --prop height.exact=400
officecli set tables.docx '/body/tbl[4]/tr[1]/tc[1]' \
--prop text="Cell Borders" --prop bold=true \
--prop fill=2E74B5 --prop color=FFFFFF
# Cell with diagonal borders
officecli set tables.docx '/body/tbl[4]/tr[2]/tc[1]' \
--prop text="border.all + tl2br + tr2bl" \
--prop "border.all=single;8;FF0000" \
--prop "border.tl2br=single;4;0000FF" \
--prop "border.tr2bl=single;4;0000FF"
# Cell with run formatting
officecli set tables.docx '/body/tbl[4]/tr[2]/tc[2]' \
--prop text="font + italic + strike + underline + highlight" \
--prop "font=Times New Roman" \
--prop italic=true --prop strike=true \
--prop underline=single --prop highlight=yellow
# Cell with direction + textDirection + nowrap
officecli set tables.docx '/body/tbl[4]/tr[2]/tc[3]' \
--prop text="direction=rtl + nowrap + textDirection=btlr" \
--prop direction=rtl --prop nowrap=true --prop textDirection=btlr
# Cell with per-side padding
officecli set tables.docx '/body/tbl[4]/tr[2]/tc[4]' \
--prop text="padding per side + skipGridSync" \
--prop padding.top=50 --prop padding.bottom=150 \
--prop padding.left=80 --prop padding.right=80
# Per-side cell borders
officecli set tables.docx '/body/tbl[4]/tr[3]/tc[1]' \
--prop text="border.top + border.bottom" \
--prop "border.top=single;8;FF0000" \
--prop "border.bottom=single;8;0000FF"
officecli set tables.docx '/body/tbl[4]/tr[3]/tc[2]' \
--prop text="border.left + border.right" \
--prop "border.left=single;8;00FF00" \
--prop "border.right=single;8;FF00FF"
# fitText + skipGridSync
officecli set tables.docx '/body/tbl[4]/tr[3]/tc[3]' \
--prop text="fitText squeezes text to cell width" --prop fitText=true
officecli set tables.docx '/body/tbl[4]/tr[3]/tc[4]' \
--prop text="width + skipGridSync" \
--prop width=2500 --prop skipGridSync=true
```
**Features:** `border.all` (style;size;color shorthand for all 6 edges), `border.top/bottom/left/right` (outer edges), `border.horizontal/vertical` (inside dividers), `border.tl2br` (diagonal top-left to bottom-right), `border.tr2bl` (diagonal top-right to bottom-left), `colWidths` (comma-separated column widths in twips), `cellSpacing` (inter-cell gap in twips), `indent` (table left offset in twips), `layout` (fixed/autofit), `padding` (default cell padding all sides), `header` (true = repeat row as header on every page), `height.exact` (exact row height in twips), `fill` (cell background; alias for `shd`), `font`, `italic`, `strike`, `underline`, `highlight`, `direction` (rtl on cell → `w:bidi`), `nowrap`, `textDirection` (lrtb/btlr/tbrl/lrbt/tblrV/btlrV), `padding.top/bottom/left/right`, `fitText`, `width`, `skipGridSync`
## Table 5: Horizontal Merge (hmerge)
A small 2-row × 3-column table demonstrating `hmerge=restart`. Setting `hmerge=restart` on a cell inserts a `gridspan` and removes the absorbed `tc` — set other cells in the same row before applying the merge.
```bash
officecli add tables.docx /body --type table \
--prop rows=2 --prop cols=3 \
--prop "border.all=single;4;808080"
# Set the non-merged cell first (it will become tc[2] after merge)
officecli set tables.docx '/body/tbl[5]/tr[1]/tc[3]' --prop text="normal tc"
# Apply horizontal merge — tc[2] is absorbed; original tc[3] becomes tc[2]
officecli set tables.docx '/body/tbl[5]/tr[1]/tc[1]' \
--prop text="hmerge restart (spans 2 cols)" \
--prop hmerge=restart
officecli set tables.docx '/body/tbl[5]/tr[2]/tc[1]' --prop text="row 2 col 1"
officecli set tables.docx '/body/tbl[5]/tr[2]/tc[2]' --prop text="row 2 col 2"
officecli set tables.docx '/body/tbl[5]/tr[2]/tc[3]' --prop text="row 2 col 3"
```
**Features:** `hmerge` (restart — legacy horizontal merge: inserts `gridspan`, removes absorbed cell; handler re-indexes subsequent cells automatically)
> Set cells in the row that will remain **after** the merge before setting `hmerge=restart`, because the merge removes the absorbed `tc` and subsequent tc indices shift.
## Table 6: RTL Table Direction
A 2-row × 2-column table with `direction=rtl` on the table itself, which mirrors the column order (`w:bidiVisual`).
```bash
officecli add tables.docx /body --type table \
--prop rows=2 --prop cols=2 \
--prop "direction=rtl" \
--prop "border.all=single;8;C00000"
officecli set tables.docx '/body/tbl[6]/tr[1]/tc[1]' \
--prop text="RTL table" --prop bold=true
officecli set tables.docx '/body/tbl[6]/tr[1]/tc[2]' \
--prop text="column order mirrored"
```
**Features:** `direction=rtl` on table (writes `w:bidiVisual` — mirrors column order for right-to-left reading direction)
## Table 7: Inline Data Shorthand (`data`)
Build an entire grid in one property: rows separated by `;`, cells by `,` — no
`rows`/`cols`/per-cell `set` needed.
```bash
officecli add tables.docx /body --type table \
--prop "data=Region,Q1,Q2;North,120,150;South,90,110" \
--prop "border.all=single;4;808080"
```
**Features:** `data` (inline grid shorthand — `;`-separated rows of `,`-separated cells; sizes the table automatically)
## Complete Feature Coverage
| Feature | Table |
|---------|-------|
| **Vertical merge:** `vmerge=restart/continue` | 1, 2 |
| **Horizontal merge:** `gridspan`, `hmerge=restart` | 2, 5 |
| **Cell background:** `shd`, `fill` | 1, 2, 3, 4 |
| **Text color & bold:** `color`, `bold` | 1, 2, 3, 4 |
| **Cell alignment:** `align`, `valign` | 1, 2, 3 |
| **Table borders:** `border.all`, `border.top/bottom/left/right`, `border.horizontal/vertical` | 4 |
| **Cell borders:** `border.all`, `border.top/bottom/left/right`, `border.tl2br`, `border.tr2bl` | 4 |
| **Table layout:** `layout`, `colWidths`, `cellSpacing`, `indent`, `padding` | 4 |
| **Row props:** `header`, `height.exact` | 4 |
| **Cell run formatting:** `font`, `italic`, `strike`, `underline`, `highlight` | 4 |
| **Cell text direction:** `direction=rtl` (cell), `textDirection`, `nowrap` | 4 |
| **Per-side padding:** `padding.top/bottom/left/right` | 4 |
| **Cell width:** `width`, `skipGridSync`, `fitText` | 4 |
| **Table RTL:** `direction=rtl` (table) | 6 |
| **Inline data shorthand:** `data` | 7 |
## Inspect the Generated File
```bash
# List all tables in the document
officecli query tables.docx table
# Inspect a specific table's structure
officecli get tables.docx '/body/tbl[1]'
# Inspect a cell's properties
officecli get tables.docx '/body/tbl[1]/tr[2]/tc[1]'
# List all rows in a table
officecli query tables.docx '/body/tbl[4]' row
```