Files
wehub-resource-sync 8cb1f9f479
Publish SDK (PyPI) / publish (push) Waiting to run
Publish SDK (npm) / publish (@aionui/officecli-sdk) (push) Waiting to run
Publish SDK (npm) / publish (@officecli/officecli-sdk) (push) Waiting to run
Publish SDK (npm) / publish (@officecli/sdk) (push) Waiting to run
Publish SDK (npm) / publish (officecli-sdk) (push) Waiting to run
SDK smoke / smoke (windows-latest) (push) Waiting to run
SDK smoke / smoke (macos-latest) (push) Waiting to run
SDK smoke / smoke (ubuntu-latest) (push) Waiting to run
Skill parity / diff (push) Waiting to run
chore: import upstream snapshot with attribution
2026-07-13 13:09:29 +08:00

5.7 KiB
Raw Permalink Blame History

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 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:

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

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):

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.

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).

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.

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

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-losswinLoss), 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:

officecli validate sparklines.xlsx