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

150 lines
5.7 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.
# 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 BM, 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
```