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
150 lines
5.7 KiB
Markdown
150 lines
5.7 KiB
Markdown
# Sparklines Showcase
|
||
|
||
Exercises the full xlsx `sparkline` element — the in-cell mini charts (line,
|
||
column, win/loss) that render a trend inside a single cell. Three files work
|
||
together:
|
||
|
||
- **sparklines.py** — builds the workbook via the **officecli Python SDK**.
|
||
- **sparklines.xlsx** — the generated dashboard workbook.
|
||
- **sparklines.md** — this file.
|
||
|
||
## Built on the SDK (not subprocess)
|
||
|
||
Like `conditional-formatting.py`, this script drives the
|
||
[`officecli-sdk`](../../sdk/python) Python client rather than shelling out per
|
||
command. One resident process is started; the whole dashboard — data cells and
|
||
sparklines — ships over the named pipe in a single `doc.batch(...)` round-trip:
|
||
|
||
```python
|
||
import officecli # pip install officecli-sdk
|
||
|
||
with officecli.create(FILE, "--force") as doc:
|
||
doc.batch([
|
||
{"command": "set", "path": "/Sheet1/B2", "props": {"value": "45"}},
|
||
{"command": "add", "parent": "/Sheet1", "type": "sparkline",
|
||
"props": {"type": "line", "dataRange": "B2:M2", "location": "N2",
|
||
"color": "#4472C4", "lineWeight": "1.5"}},
|
||
])
|
||
```
|
||
|
||
The dict shape is identical to an `officecli batch` list item — `command`,
|
||
`path`/`parent`/`type`, and `props`. The script falls back to the in-repo SDK
|
||
copy if `officecli-sdk` isn't pip-installed, so it runs straight from a checkout.
|
||
|
||
## Regenerate
|
||
|
||
```bash
|
||
cd examples/excel
|
||
pip install officecli-sdk # plus the `officecli` binary on PATH
|
||
python3 sparklines.py # → sparklines.xlsx
|
||
# or the CLI twin:
|
||
bash sparklines.sh
|
||
```
|
||
|
||
## A sparkline
|
||
|
||
Each sparkline is one `add` against the sheet. `type=` picks the kind,
|
||
`dataRange=` is the source values, and `location=` is the cell the mini chart
|
||
draws in (place it next to the data row for a dashboard look):
|
||
|
||
```bash
|
||
officecli add file.xlsx /Sheet1 --type sparkline \
|
||
--prop type=line --prop dataRange=B2:M2 --prop location=N2 \
|
||
--prop color=#4472C4 --prop lineWeight=1.5
|
||
```
|
||
|
||
The group lands at `/Sheet1/sparkline[N]`; `get`/`set`/`remove` address it
|
||
there. Sparkline groups are stored under the worksheet's **x14 extension list**
|
||
(the Excel 2010+ feature area).
|
||
|
||
## Dashboard layout
|
||
|
||
One sheet: label in column A, twelve months of trend data across B–M, and the
|
||
sparkline in column N of the same row.
|
||
|
||
| Row | Label | Type | Highlights demonstrated |
|
||
|---|---|---|---|
|
||
| 2 | North | `line` | plain series colour, `lineWeight=1.5` |
|
||
| 3 | South | `line` | `markers` + all four point highlights + every marker colour |
|
||
| 4 | East | `column` | `highPoint`/`lowPoint` with marker colours |
|
||
| 5 | West | `column` | `firstPoint`/`lastPoint` with marker colours |
|
||
| 6 | Central | `column` | plain single-colour bars |
|
||
| 7 | Online | `winLoss` | `negative` points in `negativeColor` |
|
||
| 8 | Kiosk | `winLoss` (via `win-loss` alias) | high/low + negative |
|
||
|
||
## Sparkline kinds (`type=`)
|
||
|
||
`line`, `column`, `winLoss`. `stacked` and `win-loss` are accepted aliases that
|
||
both map to OOXML stacked and **read back as `winLoss`**.
|
||
|
||
```bash
|
||
officecli add file.xlsx /Sheet1 --type sparkline --prop type=line --prop dataRange=B2:M2 --prop location=N2
|
||
officecli add file.xlsx /Sheet1 --type sparkline --prop type=column --prop dataRange=B4:M4 --prop location=N4
|
||
officecli add file.xlsx /Sheet1 --type sparkline --prop type=winLoss --prop dataRange=B7:M7 --prop location=N7
|
||
```
|
||
|
||
## Point highlights & markers
|
||
|
||
Toggle any of the "special point" highlights; each has an **add-only** marker
|
||
colour. `markers=true` shows a marker at every point (line sparklines only).
|
||
|
||
```bash
|
||
officecli add file.xlsx /Sheet1 --type sparkline --prop type=line --prop dataRange=B3:M3 --prop location=N3 \
|
||
--prop markers=true \
|
||
--prop highPoint=true --prop highMarkerColor=#00B050 \
|
||
--prop lowPoint=true --prop lowMarkerColor=#FF0000 \
|
||
--prop firstPoint=true --prop firstMarkerColor=#7030A0 \
|
||
--prop lastPoint=true --prop lastMarkerColor=#0070C0 \
|
||
--prop markersColor=#808080 \
|
||
--prop lineWeight=2.25
|
||
```
|
||
|
||
## Negative points (win/loss & highlight)
|
||
|
||
`negative=true` highlights negative points in `negativeColor` — the defining
|
||
behaviour of a win/loss sparkline, but usable on line/column too.
|
||
|
||
```bash
|
||
officecli add file.xlsx /Sheet1 --type sparkline --prop type=winLoss --prop dataRange=B7:M7 --prop location=N7 \
|
||
--prop negative=true --prop negativeColor=#C00000
|
||
```
|
||
|
||
## Complete property coverage
|
||
|
||
| Group | Props | Ops |
|
||
|---|---|---|
|
||
| Kind | `type` (`line`/`column`/`winLoss`/`stacked`/`win-loss`) | add/set/get |
|
||
| Source & target | `dataRange`, `location` | add/set/get |
|
||
| Series style | `color`, `lineWeight` | add/set/get |
|
||
| Point highlights | `firstPoint`, `lastPoint`, `highPoint`, `lowPoint`, `negative` | add/set/get |
|
||
| Markers toggle | `markers` | add/set/get |
|
||
| Negative colour | `negativeColor` | add/set/get |
|
||
| Marker colours | `firstMarkerColor`, `lastMarkerColor`, `highMarkerColor`, `lowMarkerColor`, `markersColor` | **add-only** |
|
||
|
||
> Marker colours are **add-only** — set at creation, not modifiable via `set`,
|
||
> and not echoed by `get` (they live inline on the group's point definitions).
|
||
> The five point-highlight flags and `negativeColor` do round-trip.
|
||
|
||
Full property list: `officecli help xlsx sparkline` (or
|
||
`schemas/help/xlsx/sparkline.json`).
|
||
|
||
## Read a sparkline back
|
||
|
||
```bash
|
||
officecli query sparklines.xlsx sparkline
|
||
officecli get sparklines.xlsx "/Sheet1/sparkline[1]" --json
|
||
```
|
||
|
||
`get` normalizes on read: colours gain a `#` prefix (`#4472C4`), `type` comes
|
||
back as the canonical token (`stacked`/`win-loss` → `winLoss`), and
|
||
`lineWeight` reads back as a number.
|
||
|
||
## Validating
|
||
|
||
A sparkline group lives in the worksheet's x14 extension list, so validate the
|
||
**saved** file from a fresh process:
|
||
|
||
```bash
|
||
officecli validate sparklines.xlsx
|
||
```
|