Files
iofficeai--officecli/examples/excel/charts/charts-extended.md
T
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

15 KiB
Raw Blame History

Extended Chart Types Showcase

This demo consists of three files that work together:

  • charts-extended.py — Python script that calls officecli commands to generate the workbook. Each chart command is shown as a copyable shell command in the comments.
  • charts-extended.xlsx — The generated workbook: 5 sheets, 18 charts, covering every property supported by the cx:chart family (waterfall, funnel, treemap, sunburst, histogram, boxWhisker) plus chart-meta properties (anchor, preset, autotitledeleted, plotvisonly).
  • charts-extended.md — This file. Maps each sheet to the features it demonstrates.

Regenerate

cd examples/excel
python3 charts-extended.py
# → charts-extended.xlsx

Feature Coverage Summary

Every extended-chart-specific knob is exercised by at least one chart:

Chart type Specific knobs Covered by
waterfall increaseColor, decreaseColor, totalColor, chartFill, labelFont Sheet 1, Chart 12
funnel (generic styling only) Sheet 1, Chart 34
pareto auto-sort desc, ownerIdx cumulative-% line, secondary % axis Sheet 4, Chart 12
treemap parentLabelLayout = overlapping / banner / none Sheet 2, Chart 1/2/3
sunburst (generic styling only) Sheet 2, Chart 4
histogram binCount, binSize, intervalClosed = r / l, underflowBin, overflowBin Sheet 3, Chart 14
boxWhisker quartileMethod = exclusive / inclusive Sheet 3, Chart 56
(all types) anchor, preset, autotitledeleted, plotvisonly Sheet 5, Chart 14

Generic cx styling exercised across the deck: title.glow, title.shadow, title.bold/size/color, dataLabels, labelFont, legend position, legendfont, axisfont, colors palette, chartFill, plotFill.

Notes on cx:chart styling:

  • chartFill / plotFill accept a solid hex color, none, or a gradient — the same C1-C2:angle (and c1,c2 stop-list) syntax as regular cChart.
  • colors= palette works per-data-point on single-series cx charts (funnel, treemap, sunburst): each segment gets the next palette color (emitted as cx:dataPt fills, cycling if there are more points than colors). On multi-series cx charts (boxWhisker) colors= is one color per series, as on regular cCharts.

Sheet: 1-Waterfall & Funnel

Two waterfall charts (financial bridges) and two funnel charts (pipelines).

# Chart 1 — waterfall with increase/decrease/total colors + data labels + title glow
officecli add charts-extended.xlsx "/1-Waterfall & Funnel" --type chart \
  --prop chartType=waterfall \
  --prop title="Cash Flow Bridge" \
  --prop data="Start:1000,Revenue:500,Costs:-300,Tax:-100,Net:1100" \
  --prop increaseColor=70AD47 --prop decreaseColor=FF0000 --prop totalColor=4472C4 \
  --prop dataLabels=true \
  --prop title.glow="00D2FF-6-60"

# Chart 2 — waterfall with legend + chartFill (solid) + custom label font
officecli add charts-extended.xlsx "/1-Waterfall & Funnel" --type chart \
  --prop chartType=waterfall \
  --prop title="Budget vs Actual" \
  --prop data="Budget:5000,Sales:2000,Marketing:-800,Ops:-600,Net:5600" \
  --prop increaseColor=2E75B6 --prop decreaseColor=C00000 --prop totalColor=FFC000 \
  --prop legend=bottom \
  --prop chartFill=F0F4FA \
  --prop dataLabels=true \
  --prop labelFont="9:333333:true"

# Chart 3 — funnel (sales pipeline) with title shadow
officecli add charts-extended.xlsx "/1-Waterfall & Funnel" --type chart \
  --prop chartType=funnel \
  --prop title="Sales Pipeline" \
  --prop series1="Pipeline:1200,850,600,300,120" \
  --prop categories=Leads,Qualified,Proposal,Negotiation,Won \
  --prop dataLabels=true \
  --prop title.shadow="000000-4-45-2-40"

# Chart 4 — funnel (marketing) with custom colors palette, legend/axis fonts
officecli add charts-extended.xlsx "/1-Waterfall & Funnel" --type chart \
  --prop chartType=funnel \
  --prop title="Marketing Funnel" \
  --prop series1="Users:10000,6500,3200,1800,900,450" \
  --prop categories=Impressions,Clicks,Signups,Active,Paying,Retained \
  --prop dataLabels=true \
  --prop legendfont="9:8B949E:Helvetica Neue" \
  --prop axisfont="10:58626E:Helvetica Neue"

Features: chartType=waterfall, increaseColor, decreaseColor, totalColor, chartType=funnel, descending pipeline values, dataLabels, title.glow, title.shadow, legend=bottom, chartFill (solid hex), labelFont, colors palette, legendfont, axisfont.


Sheet: 2-Treemap & Sunburst

Three treemaps (one per parentLabelLayout value) and one sunburst.

# Chart 1 — treemap with parentLabelLayout=overlapping + dataLabels
officecli add charts-extended.xlsx "/2-Treemap & Sunburst" --type chart \
  --prop chartType=treemap \
  --prop title="Revenue by Product" \
  --prop series1="Revenue:450,380,310,280,210,180,150,120" \
  --prop categories=Laptops,Phones,Tablets,TVs,Cameras,Audio,Gaming,Wearables \
  --prop parentLabelLayout=overlapping \
  --prop dataLabels=true

# Chart 2 — treemap with parentLabelLayout=banner + title styling
officecli add charts-extended.xlsx "/2-Treemap & Sunburst" --type chart \
  --prop chartType=treemap \
  --prop title="Department Budget" \
  --prop series1="Budget:900,750,600,500,420,350,280" \
  --prop categories=Engineering,Sales,Marketing,Support,Finance,HR,Legal \
  --prop parentLabelLayout=banner \
  --prop title.bold=true --prop title.size=14 --prop title.color=2E5090

# Chart 3 — treemap with parentLabelLayout=none (flat, no parent header strip)
officecli add charts-extended.xlsx "/2-Treemap & Sunburst" --type chart \
  --prop chartType=treemap \
  --prop title="Flat Treemap (no parent labels)" \
  --prop series1="Units:250,200,180,160,140,120,100,80,60,40" \
  --prop categories=A,B,C,D,E,F,G,H,I,J \
  --prop parentLabelLayout=none \
  --prop dataLabels=true

# Chart 4 — sunburst with chartFill + plotFill (solid) + colors palette
officecli add charts-extended.xlsx "/2-Treemap & Sunburst" --type chart \
  --prop chartType=sunburst \
  --prop title="Market Share by Region" \
  --prop series1="Share:35,25,20,15,30,25,20,10,15" \
  --prop categories=North,South,East,West,Urban,Suburban,Rural,Online,Retail \
  --prop chartFill=F8FAFC --prop plotFill=FFFFFF \
  --prop dataLabels=true

Features: chartType=treemap, parentLabelLayout=overlapping, parentLabelLayout=banner, parentLabelLayout=none, chartType=sunburst, radial hierarchical layout, colors palette, title.bold/size/color, dataLabels, chartFill + plotFill (solid).


Sheet: 3-Histogram & BoxWhisker

Four histograms covering every binning knob, and two box-and-whisker charts (one per quartile method).

# Chart 1 — histogram with auto-binning (no binCount/binSize)
officecli add charts-extended.xlsx "/3-Histogram & BoxWhisker" --type chart \
  --prop chartType=histogram \
  --prop title="Test Scores (auto bins)" \
  --prop series1="Scores:45,52,58,61,63,...,95,97,99"

# Chart 2 — histogram with explicit binCount=5 + title glow
officecli add charts-extended.xlsx "/3-Histogram & BoxWhisker" --type chart \
  --prop chartType=histogram \
  --prop title="Sales (binCount=5)" \
  --prop series1="Sales:120,135,...,620,700" \
  --prop binCount=5 \
  --prop title.glow="FFC000-6-50"

# Chart 3 — histogram with explicit binSize=50 (fixed bin width) + label font
officecli add charts-extended.xlsx "/3-Histogram & BoxWhisker" --type chart \
  --prop chartType=histogram \
  --prop title="Sales (binSize=50)" \
  --prop series1="Sales:120,135,...,620,700" \
  --prop binSize=50 \
  --prop dataLabels=true --prop labelFont="9:FFFFFF:true"

# Chart 4 — histogram with underflowBin + overflowBin + intervalClosed=l
officecli add charts-extended.xlsx "/3-Histogram & BoxWhisker" --type chart \
  --prop chartType=histogram \
  --prop title="Response Time (outlier bins)" \
  --prop series1="ms:40,55,68,75,...,220,280,350" \
  --prop underflowBin=60 \
  --prop overflowBin=200 \
  --prop intervalClosed=l \
  --prop dataLabels=true \
  --prop legend=none

# Chart 5 — box & whisker, two teams, quartileMethod=exclusive
officecli add charts-extended.xlsx "/3-Histogram & BoxWhisker" --type chart \
  --prop chartType=boxWhisker \
  --prop title="Response Time by Team (ms)" \
  --prop series1="TeamA:42,55,...,105,120" \
  --prop series2="TeamB:30,38,...,92,110" \
  --prop quartileMethod=exclusive \
  --prop legend=bottom

# Chart 6 — box & whisker, three departments, quartileMethod=inclusive + title glow
officecli add charts-extended.xlsx "/3-Histogram & BoxWhisker" --type chart \
  --prop chartType=boxWhisker \
  --prop title="Salary Distribution (\$k)" \
  --prop series1="Engineering:85,92,...,150,180" \
  --prop series2="Marketing:60,65,...,98,110" \
  --prop series3="Sales:55,62,...,160,190" \
  --prop quartileMethod=inclusive \
  --prop title.glow="00D2FF-6-60" \
  --prop legend=bottom

Features: chartType=histogram, auto-binning, binCount (explicit count), binSize (explicit width — mutually exclusive with binCount), underflowBin (cutoff for <N), overflowBin (cutoff for >N), intervalClosed=r (default, (a,b]) vs intervalClosed=l ([a,b)), chartType=boxWhisker, quartileMethod=exclusive, quartileMethod=inclusive, multi-series grouping (2 or 3), title.glow, legend=bottom, legend=none, labelFont, dataLabels.


Sheet: 4-Pareto

Two Pareto charts demonstrating automatic descending sort and cumulative-% overlay line.

# Chart 1 — categorical Pareto (defect analysis), pre-sorted input
officecli add charts-extended.xlsx "/4-Pareto" --type chart \
  --prop chartType=pareto \
  --prop title="Defect Pareto" \
  --prop series1="Count:45,30,10,8,5,2" \
  --prop categories=Scratches,Dents,Cracks,Chips,Stains,Other \
  --prop dataLabels=true

# Chart 2 — Pareto with out-of-order input (auto-sorted desc by officecli)
officecli add charts-extended.xlsx "/4-Pareto" --type chart \
  --prop chartType=pareto \
  --prop title="Root Cause Pareto" \
  --prop series1="Tickets:12,87,5,45,3,120,22,67,8,31" \
  --prop categories=Network,Auth,DB,Cache,UI,Config,Deploy,Monitor,Queue,Storage \
  --prop title.glow="FFC000-6-50" \
  --prop legend=bottom

Features: chartType=pareto, automatic descending sort of values + categories, cumulative-% overlay line on secondary 0-100% axis (auto-generated via ownerIdx), dataLabels, title.glow, legend=bottom. Input is a SINGLE user series; officecli synthesizes the 2-series structure internally (clusteredColumn bars + paretoLine with ownerIdx="0" + secondary percentage axis).


Sheet: 5-Chart Meta

Four charts demonstrating chart-level meta properties: cell-range anchor placement, named style presets, and display-control flags.

# anchor (cell-range placement) + preset=corporate
officecli add charts-extended.xlsx "/5-Chart Meta" --type chart \
  --prop chartType=column \
  --prop title="anchor + preset=corporate" \
  --prop series1="Revenue:120,145,132,160" \
  --prop categories=Q1,Q2,Q3,Q4 \
  --prop anchor="A1:M20" \
  --prop preset=corporate

# autotitledeleted + plotvisonly
officecli add charts-extended.xlsx "/5-Chart Meta" --type chart \
  --prop chartType=bar \
  --prop series1="Sales:80,95,88,110" \
  --prop categories=Q1,Q2,Q3,Q4 \
  --prop x=0 --prop y=22 --prop width=12 --prop height=18 \
  --prop autotitledeleted=true \
  --prop plotvisonly=true

# preset=minimal
officecli add charts-extended.xlsx "/5-Chart Meta" --type chart \
  --prop chartType=line \
  --prop title="preset=minimal" \
  --prop series1="A:10,20,15,25" \
  --prop series2="B:8,14,12,20" \
  --prop categories=W1,W2,W3,W4 \
  --prop x=13 --prop y=0 --prop width=12 --prop height=18 \
  --prop preset=minimal

# preset=dark
officecli add charts-extended.xlsx "/5-Chart Meta" --type chart \
  --prop chartType=column \
  --prop title="preset=dark" \
  --prop series1="Sales:45,60,55,80" \
  --prop categories=Q1,Q2,Q3,Q4 \
  --prop x=13 --prop y=22 --prop width=12 --prop height=18 \
  --prop preset=dark

Features: anchor="A1:M20" (position chart at exact cell-range two-cell anchor instead of x/y/width/height), preset=corporate (named style bundle — sets colors, fonts, fill, border in one shot; values: minimal, dark, corporate, magazine, dashboard, colorful, monochrome), autotitledeleted=true (suppress the auto "Chart Title" placeholder that Excel inserts when no title= is given), plotvisonly=true (skip plotting data in hidden rows/columns — mirrors Excel's "Show data in hidden rows and columns" unchecked)


Property Reference

Property Applies to Example value Sheet
chartType=waterfall waterfall waterfall 1
chartType=funnel funnel funnel 1
chartType=treemap treemap treemap 2
chartType=sunburst sunburst sunburst 2
chartType=histogram histogram histogram 3
chartType=boxWhisker boxWhisker boxWhisker 3
chartType=pareto pareto pareto 4
data= name:value pairs waterfall Start:1000,Revenue:500,... 1
increaseColor waterfall 70AD47 1
decreaseColor waterfall FF0000 1
totalColor waterfall 4472C4 1
series1=Name:values, series2=..., series3=... all cx TeamA:42,55,... 1/2/3
categories all cx except histogram Leads,Qualified,... 1/2
parentLabelLayout treemap overlapping | banner | none 2
binCount histogram 5 3
binSize histogram 50 3
intervalClosed histogram r (default) | l 3
underflowBin histogram 60 3
overflowBin histogram 200 3
quartileMethod boxWhisker exclusive | inclusive 3
dataLabels all cx true 1/2/3
labelFont all cx "9:FFFFFF:true" 1/3
title.glow all cx "00D2FF-6-60" 1/3
title.shadow all cx "000000-4-45-2-40" 1
title.bold/size/color all cx true / 14 / 2E5090 2
legend all cx bottom | none 1/3
legendfont all cx "9:8B949E:Helvetica Neue" 1
axisfont all cx "10:58626E:Helvetica Neue" 1
colors per-point on single-series cx (funnel/treemap/sunburst); per-series on multi-series cx 4472C4,5B9BD5,...
chartFill (solid only) all cx F8FAFC 1/2
plotFill (solid only) all cx FFFFFF 2
anchor all chart types "A1:M20" 5
preset all chart types minimal | dark | corporate | magazine | dashboard | colorful | monochrome 5
autotitledeleted all chart types true 5
plotvisonly all chart types true 5

Known Validation Warning

officecli validate charts-extended.xlsx reports schema warnings on histogram charts' binCount / binSize elements:

[Schema] The element '...:binCount' has invalid value ''. The text value cannot be empty.
[Schema] The 'val' attribute is not declared.

This is expected. The Open XML SDK's generated schema models cx:binCount as a text-valued leaf (<binCount>5</binCount>), but real Excel writes and requires the attribute form (<binCount val="5"/>). OfficeCLI writes the Excel-compatible form via a raw unknown element; the SDK validator then complains. See ChartExBuilder.cs:793801 for the rationale. Files open and render correctly in Excel.


Inspect the Generated File

officecli query charts-extended.xlsx chart
officecli get charts-extended.xlsx "/1-Waterfall & Funnel/chart[1]"
officecli view charts-extended.xlsx outline