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

501 lines
21 KiB
Bash
Executable File
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.
#!/bin/bash
# Bar (Horizontal) Charts Showcase — generates charts-bar.xlsx exercising the
# full xlsx bar/barStacked/barPercentStacked/bar3d chart family.
#
# CLI twin of charts-bar.py (officecli Python SDK). Both produce an equivalent
# charts-bar.xlsx.
#
# 8 sheets (Sheet1 data + 7 chart sheets), 28 charts total.
#
# Usage: ./charts-bar.sh
FILE="$(dirname "$0")/charts-bar.xlsx"
rm -f "$FILE"
# Forward-compat tolerance: this showcase deliberately exercises a few props the
# chart handler doesn't consume yet (e.g. point{N}.color → exit 2
# unsupported_property) and a few values it rejects on some chart types (e.g.
# axisposition=nextTo). officecli warns but still creates the element; we log the
# warning and press on rather than aborting, so the whole 28-chart showcase
# runs — matching the SDK twin, whose doc.batch() doesn't abort on these either.
officecli() {
command officecli "$@" || echo " (officecli exit $? — continuing; prop unsupported on this chart type)"
}
officecli create "$FILE"
officecli open "$FILE"
# ==========================================================================
# Source data — shared across all charts
# ==========================================================================
echo "--- Populating source data ---"
officecli set "$FILE" /Sheet1/A1 --prop text=Department --prop bold=true
officecli set "$FILE" /Sheet1/B1 --prop text=Q1 --prop bold=true
officecli set "$FILE" /Sheet1/C1 --prop text=Q2 --prop bold=true
officecli set "$FILE" /Sheet1/D1 --prop text=Q3 --prop bold=true
officecli set "$FILE" /Sheet1/E1 --prop text=Q4 --prop bold=true
officecli set "$FILE" /Sheet1/A2 --prop text=Engineering
officecli set "$FILE" /Sheet1/B2 --prop text=185
officecli set "$FILE" /Sheet1/C2 --prop text=195
officecli set "$FILE" /Sheet1/D2 --prop text=210
officecli set "$FILE" /Sheet1/E2 --prop text=228
officecli set "$FILE" /Sheet1/A3 --prop text=Marketing
officecli set "$FILE" /Sheet1/B3 --prop text=120
officecli set "$FILE" /Sheet1/C3 --prop text=135
officecli set "$FILE" /Sheet1/D3 --prop text=142
officecli set "$FILE" /Sheet1/E3 --prop text=158
officecli set "$FILE" /Sheet1/A4 --prop text=Sales
officecli set "$FILE" /Sheet1/B4 --prop text=210
officecli set "$FILE" /Sheet1/C4 --prop text=225
officecli set "$FILE" /Sheet1/D4 --prop text=240
officecli set "$FILE" /Sheet1/E4 --prop text=260
officecli set "$FILE" /Sheet1/A5 --prop text=Support
officecli set "$FILE" /Sheet1/B5 --prop text=95
officecli set "$FILE" /Sheet1/C5 --prop text=105
officecli set "$FILE" /Sheet1/D5 --prop text=112
officecli set "$FILE" /Sheet1/E5 --prop text=118
officecli set "$FILE" /Sheet1/A6 --prop text=Finance
officecli set "$FILE" /Sheet1/B6 --prop text=78
officecli set "$FILE" /Sheet1/C6 --prop text=82
officecli set "$FILE" /Sheet1/D6 --prop text=88
officecli set "$FILE" /Sheet1/E6 --prop text=92
officecli set "$FILE" /Sheet1/A7 --prop text=HR
officecli set "$FILE" /Sheet1/B7 --prop text=62
officecli set "$FILE" /Sheet1/C7 --prop text=68
officecli set "$FILE" /Sheet1/D7 --prop text=72
officecli set "$FILE" /Sheet1/E7 --prop text=78
officecli set "$FILE" /Sheet1/A8 --prop text=Legal
officecli set "$FILE" /Sheet1/B8 --prop text=55
officecli set "$FILE" /Sheet1/C8 --prop text=58
officecli set "$FILE" /Sheet1/D8 --prop text=62
officecli set "$FILE" /Sheet1/E8 --prop text=68
officecli set "$FILE" /Sheet1/A9 --prop text=Operations
officecli set "$FILE" /Sheet1/B9 --prop text=140
officecli set "$FILE" /Sheet1/C9 --prop text=152
officecli set "$FILE" /Sheet1/D9 --prop text=165
officecli set "$FILE" /Sheet1/E9 --prop text=178
# ==========================================================================
# Sheet: 1-Bar Fundamentals
# ==========================================================================
echo "--- 1-Bar Fundamentals ---"
officecli add "$FILE" / --type sheet --prop name="1-Bar Fundamentals"
# Chart 1: Basic bar chart with dataRange, axis titles, and gridlines
# Features: chartType=bar, dataRange, catTitle, axisTitle, axisfont, gridlines
officecli add "$FILE" "/1-Bar Fundamentals" --type chart \
--prop chartType=bar \
--prop title="Department Performance — Q1" \
--prop dataRange=Sheet1!A1:B9 \
--prop x=0 --prop y=0 --prop width=12 --prop height=18 \
--prop catTitle=Department --prop axisTitle=Score \
--prop axisfont=9:333333:Arial \
--prop gridlines=D9D9D9:0.5:dot
# Chart 2: Inline series with custom colors, gap width, and data labels
# Features: inline series, colors per category, gapwidth, dataLabels=outsideEnd
officecli add "$FILE" "/1-Bar Fundamentals" --type chart \
--prop chartType=bar \
--prop title="Survey Results" \
--prop series1=Satisfaction:85,72,91,68,78 \
--prop categories=Product,Service,Delivery,Price,Overall \
--prop colors=4472C4,ED7D31,70AD47,FFC000,5B9BD5 \
--prop x=13 --prop y=0 --prop width=12 --prop height=18 \
--prop gapwidth=80 \
--prop dataLabels=outsideEnd
# Chart 3: Stacked bar with overlap and series outline
# Features: barStacked, overlap=0, series.outline (white separator)
officecli add "$FILE" "/1-Bar Fundamentals" --type chart \
--prop chartType=barStacked \
--prop title="Quarterly Headcount by Dept" \
--prop series1=Q1:30,18,25,12 \
--prop series2=Q2:35,20,28,14 \
--prop series3=Q3:38,22,30,16 \
--prop categories=Engineering,Marketing,Sales,Support \
--prop colors=2E75B6,70AD47,FFC000 \
--prop x=0 --prop y=19 --prop width=12 --prop height=18 \
--prop overlap=0 \
--prop series.outline=FFFFFF-0.5
# Chart 4: data= shorthand with legend=bottom
# Features: data= shorthand (inline multi-series), legend=bottom
officecli add "$FILE" "/1-Bar Fundamentals" --type chart \
--prop chartType=bar \
--prop title="Training Hours by Team" \
--prop "data=Technical:45,38,52;Soft Skills:20,28,18;Compliance:12,15,10" \
--prop categories=Engineering,Sales,Support \
--prop colors=4472C4,ED7D31,70AD47 \
--prop x=13 --prop y=19 --prop width=12 --prop height=18 \
--prop legend=bottom
# ==========================================================================
# Sheet: 2-Bar Variants
# ==========================================================================
echo "--- 2-Bar Variants ---"
officecli add "$FILE" / --type sheet --prop name="2-Bar Variants"
# Chart 1: barStacked with tight gap width
# Features: barStacked, gapwidth=50 (tight bars)
officecli add "$FILE" "/2-Bar Variants" --type chart \
--prop chartType=barStacked \
--prop title="Budget Allocation" \
--prop series1=Salaries:120,80,95,60 \
--prop series2=Operations:45,35,40,25 \
--prop series3=Marketing:30,50,20,15 \
--prop categories=Engineering,Sales,Support,HR \
--prop colors=1F4E79,2E75B6,9DC3E6 \
--prop x=0 --prop y=0 --prop width=12 --prop height=18 \
--prop gapwidth=50 \
--prop legend=bottom
# Chart 2: barPercentStacked with axis number format and reference line
# Features: barPercentStacked, axisNumFmt=0%, referenceLine with label and dash
officecli add "$FILE" "/2-Bar Variants" --type chart \
--prop chartType=barPercentStacked \
--prop title="Task Completion Ratio" \
--prop series1=Done:75,60,90,45,80 \
--prop "series2=In Progress:15,25,5,30,12" \
--prop series3=Blocked:10,15,5,25,8 \
--prop categories=Backend,Frontend,QA,Design,DevOps \
--prop colors=70AD47,FFC000,C00000 \
--prop x=13 --prop y=0 --prop width=12 --prop height=18 \
--prop axisNumFmt=0% \
--prop referenceLine=0.5:FF0000:Target:dash \
--prop legend=bottom
# Chart 3: bar3d with perspective and style
# Features: bar3d, view3d (rotX,rotY,perspective), style=3
officecli add "$FILE" "/2-Bar Variants" --type chart \
--prop chartType=bar3d \
--prop title="3D Revenue by Region" \
--prop series1=Revenue:340,280,310,195 \
--prop categories=North,South,East,West \
--prop colors=4472C4,ED7D31,70AD47,FFC000 \
--prop x=0 --prop y=19 --prop width=12 --prop height=18 \
--prop view3d=10,30,20 \
--prop style=3 \
--prop legend=right
# Chart 4: bar3d with cylinder shape
# Features: bar3d shape=cylinder, multi-series 3D bars
officecli add "$FILE" "/2-Bar Variants" --type chart \
--prop chartType=bar3d \
--prop title="Cylinder — Project Milestones" \
--prop series1=Completed:8,12,6,10,15 \
--prop series2=Remaining:4,3,6,5,2 \
--prop categories=Alpha,Beta,Gamma,Delta,Epsilon \
--prop colors=2E75B6,BDD7EE \
--prop x=13 --prop y=19 --prop width=12 --prop height=18 \
--prop shape=cylinder \
--prop gapwidth=60 \
--prop legend=bottom
# ==========================================================================
# Sheet: 3-Bar Styling
# ==========================================================================
echo "--- 3-Bar Styling ---"
officecli add "$FILE" / --type sheet --prop name="3-Bar Styling"
# Chart 1: Title styling (font, size, color, bold)
# Features: title.font, title.size, title.color, title.bold
officecli add "$FILE" "/3-Bar Styling" --type chart \
--prop chartType=bar \
--prop title="Styled Title Demo" \
--prop series1=Score:88,76,92,65,84 \
--prop categories=Dept A,Dept B,Dept C,Dept D,Dept E \
--prop colors=4472C4 \
--prop x=0 --prop y=0 --prop width=12 --prop height=18 \
--prop title.font=Georgia --prop title.size=16 \
--prop title.color=1F4E79 --prop title.bold=true \
--prop gapwidth=100
# Chart 2: Series shadow and outline effects
# Features: series.shadow (color-blur-angle-dist-opacity), series.outline
officecli add "$FILE" "/3-Bar Styling" --type chart \
--prop chartType=bar \
--prop title="Shadow & Outline" \
--prop series1=2024:165,142,180,128 \
--prop series2=2025:185,158,195,140 \
--prop categories=Engineering,Marketing,Sales,Support \
--prop colors=2E75B6,ED7D31 \
--prop x=13 --prop y=0 --prop width=12 --prop height=18 \
--prop series.shadow=000000-4-315-2-30 \
--prop series.outline=1F4E79-1 \
--prop legend=bottom
# Chart 3: Per-series gradients
# Features: gradients (per-bar gradient fills, angle=0 for horizontal), labelFont (size:color:bold)
officecli add "$FILE" "/3-Bar Styling" --type chart \
--prop chartType=bar \
--prop title="Gradient Bars" \
--prop series1=Revenue:320,275,410,190,245 \
--prop categories=North,South,East,West,Central \
--prop x=0 --prop y=19 --prop width=12 --prop height=18 \
--prop "gradients=1F4E79-5B9BD5:0;C55A11-F4B183:0;548235-A9D18E:0;7F6000-FFD966:0;843C0B-DDA15E:0" \
--prop dataLabels=outsideEnd \
--prop labelFont=9:333333:true
# Chart 4: Plot fill gradient, chart fill, transparency, rounded corners
# Features: plotFill gradient, chartFill, transparency, roundedCorners
officecli add "$FILE" "/3-Bar Styling" --type chart \
--prop chartType=bar \
--prop title="Styled Background" \
--prop dataRange=Sheet1!A1:C9 \
--prop x=13 --prop y=19 --prop width=12 --prop height=18 \
--prop colors=5B9BD5,ED7D31 \
--prop plotFill=F0F4F8-D6E4F0:90 \
--prop chartFill=FFFFFF \
--prop transparency=20 \
--prop roundedCorners=true \
--prop legend=right
# ==========================================================================
# Sheet: 4-Axis & Labels
# ==========================================================================
echo "--- 4-Axis & Labels ---"
officecli add "$FILE" / --type sheet --prop name="4-Axis & Labels"
# Chart 1: Custom axis min/max, majorUnit, and gridlines styling
# Features: axisMin, axisMax, majorUnit, gridlines styling, minorGridlines, axisLine, catAxisLine
officecli add "$FILE" "/4-Axis & Labels" --type chart \
--prop chartType=bar \
--prop title="Axis Scale (50250)" \
--prop dataRange=Sheet1!A1:B9 \
--prop x=0 --prop y=0 --prop width=12 --prop height=18 \
--prop axisMin=50 --prop axisMax=250 --prop majorUnit=50 \
--prop gridlines=D0D0D0:0.5:solid \
--prop minorGridlines=EEEEEE:0.3:dot \
--prop axisLine=C00000:1.5:solid \
--prop catAxisLine=2E75B6:1.5:solid
# Chart 2: Log scale, axis reverse, and display units
# Features: logBase=10, axisReverse=true, dispUnits=thousands
officecli add "$FILE" "/4-Axis & Labels" --type chart \
--prop chartType=bar \
--prop title="Log Scale & Reverse" \
--prop "series1=Users:10,100,1000,5000,25000,100000" \
--prop "categories=Tier 1,Tier 2,Tier 3,Tier 4,Tier 5,Tier 6" \
--prop colors=2E75B6 \
--prop x=13 --prop y=0 --prop width=12 --prop height=18 \
--prop logBase=10 \
--prop axisReverse=true \
--prop dispUnits=thousands \
--prop gridlines=E0E0E0:0.5:dash
# Chart 3: Data labels with labelFont, numFmt, separator
# Features: dataLabels, labelFont, dataLabels.numFmt, dataLabels.separator
officecli add "$FILE" "/4-Axis & Labels" --type chart \
--prop chartType=bar \
--prop title="Labeled Metrics" \
--prop series1=FY2025:148,92,215,178,125 \
--prop categories=Revenue,Costs,Gross,EBITDA,Net Income \
--prop colors=4472C4 \
--prop x=0 --prop y=19 --prop width=12 --prop height=18 \
--prop dataLabels=outsideEnd \
--prop labelFont=10:1F4E79:true \
--prop dataLabels.numFmt=#,##0 \
--prop "dataLabels.separator=: "
# Chart 4: Per-point label delete/text and per-point color
# Features: dataLabel{N}.delete, dataLabel{N}.text, point{N}.color
officecli add "$FILE" "/4-Axis & Labels" --type chart \
--prop chartType=bar \
--prop title="Highlight Winner" \
--prop series1=Score:72,85,68,95,78 \
--prop categories=Team A,Team B,Team C,Team D,Team E \
--prop colors=9DC3E6 \
--prop x=13 --prop y=19 --prop width=12 --prop height=18 \
--prop dataLabels=true --prop labelPos=outsideEnd \
--prop dataLabel1.delete=true --prop dataLabel3.delete=true \
--prop dataLabel5.delete=true \
--prop dataLabel4.text="Winner!" \
--prop point4.color=C00000 \
--prop point2.color=2E75B6 \
--prop gapwidth=70
# ==========================================================================
# Sheet: 5-Legend & Layout
# ==========================================================================
echo "--- 5-Legend & Layout ---"
officecli add "$FILE" / --type sheet --prop name="5-Legend & Layout"
# Chart 1: Legend positions (right)
# Features: legend=right (4-series bar with legend on right)
officecli add "$FILE" "/5-Legend & Layout" --type chart \
--prop chartType=bar \
--prop title="Legend: Right" \
--prop dataRange=Sheet1!A1:E9 \
--prop x=0 --prop y=0 --prop width=12 --prop height=18 \
--prop colors=4472C4,ED7D31,70AD47,FFC000 \
--prop legend=right
# Chart 2: Legend font styling and overlay
# Features: legendfont (size:color:fontname), legend.overlay=true
officecli add "$FILE" "/5-Legend & Layout" --type chart \
--prop chartType=bar \
--prop title="Legend: Font & Overlay" \
--prop dataRange=Sheet1!A1:E9 \
--prop x=13 --prop y=0 --prop width=12 --prop height=18 \
--prop colors=1F4E79,2E75B6,5B9BD5,9DC3E6 \
--prop legend=top \
--prop legend.overlay=true \
--prop legendfont=10:1F4E79:Calibri
# Chart 3: Manual layout — plotArea.x/y/w/h, title.x/y, legend.x/y/w/h
# Features: plotArea.x/y/w/h, title.x/y, legend.x/y/w/h (manual layout)
officecli add "$FILE" "/5-Legend & Layout" --type chart \
--prop chartType=bar \
--prop title="Manual Layout" \
--prop dataRange=Sheet1!A1:C9 \
--prop x=0 --prop y=19 --prop width=12 --prop height=18 \
--prop colors=2E75B6,70AD47 \
--prop plotArea.x=0.25 --prop plotArea.y=0.15 \
--prop plotArea.w=0.70 --prop plotArea.h=0.60 \
--prop title.x=0.20 --prop title.y=0.02 \
--prop legend.x=0.25 --prop legend.y=0.82 \
--prop legend.w=0.50 --prop legend.h=0.10 \
--prop title.font=Arial --prop title.size=13 \
--prop title.bold=true
# Chart 4: Secondary axis with chart/plot area borders
# Features: secondaryAxis=2, chartArea.border, plotArea.border
officecli add "$FILE" "/5-Legend & Layout" --type chart \
--prop chartType=bar \
--prop title="Dual Axis: Revenue vs Margin" \
--prop "series1=Revenue:340,280,410,195,310" \
--prop "series2=Margin %:22,18,28,15,25" \
--prop categories=North,South,East,West,Central \
--prop colors=2E75B6,C00000 \
--prop x=13 --prop y=19 --prop width=12 --prop height=18 \
--prop secondaryAxis=2 \
--prop chartArea.border=D0D0D0:1:solid \
--prop plotArea.border=E0E0E0:0.5:dot \
--prop legend=bottom
# ==========================================================================
# Sheet: 6-Advanced
# ==========================================================================
echo "--- 6-Advanced ---"
officecli add "$FILE" / --type sheet --prop name="6-Advanced"
# Chart 1: Reference line with label
# Features: referenceLine (value:color:label:dash style)
officecli add "$FILE" "/6-Advanced" --type chart \
--prop chartType=bar \
--prop title="vs Company Average" \
--prop series1=Score:82,74,91,68,87,72 \
--prop categories=Engineering,Marketing,Sales,Support,Finance,HR \
--prop colors=4472C4 \
--prop x=0 --prop y=0 --prop width=12 --prop height=18 \
--prop referenceLine=79:FF0000:Average:dash \
--prop gapwidth=80 \
--prop gridlines=E0E0E0:0.5:solid
# Chart 2: Conditional coloring (colorRule)
# Features: colorRule (threshold:belowColor:aboveColor), referenceLine=0 (zero baseline)
officecli add "$FILE" "/6-Advanced" --type chart \
--prop chartType=bar \
--prop title="Profit/Loss by Division" \
--prop "series1=P&L:120,85,-45,160,-80,95,-20,140" \
--prop categories=Div A,Div B,Div C,Div D,Div E,Div F,Div G,Div H \
--prop colors=2E75B6 \
--prop x=13 --prop y=0 --prop width=12 --prop height=18 \
--prop colorRule=0:C00000:70AD47 \
--prop referenceLine=0:888888:1:solid \
--prop dataLabels=outsideEnd \
--prop labelFont=9:333333:false
# Chart 3: Title glow, title shadow, series shadow
# Features: title.glow (color-radius-opacity), title.shadow, series.shadow on bar charts
officecli add "$FILE" "/6-Advanced" --type chart \
--prop chartType=bar \
--prop title="Glow & Shadow Effects" \
--prop series1=East:185,195,210,228 \
--prop series2=West:140,152,165,178 \
--prop categories=Q1,Q2,Q3,Q4 \
--prop colors=4472C4,ED7D31 \
--prop x=0 --prop y=19 --prop width=12 --prop height=18 \
--prop title.glow=4472C4-8-60 \
--prop title.shadow=000000-3-315-2-40 \
--prop title.font=Calibri --prop title.size=16 \
--prop title.bold=true --prop title.color=1F4E79 \
--prop series.shadow=000000-3-315-1-30 \
--prop plotFill=F0F4F8 --prop chartFill=FFFFFF \
--prop legend=bottom
# Chart 4: Error bars and data table
# Features: errBars=percent:10, dataTable=true, legend=none
officecli add "$FILE" "/6-Advanced" --type chart \
--prop chartType=bar \
--prop title="With Error Bars & Data Table" \
--prop dataRange=Sheet1!A1:E9 \
--prop x=13 --prop y=19 --prop width=12 --prop height=18 \
--prop colors=2E75B6,ED7D31,70AD47,FFC000 \
--prop errBars=percent:10 \
--prop dataTable=true \
--prop legend=none \
--prop plotFill=FAFAFA
# ==========================================================================
# Sheet: 7-Axis Controls
# ==========================================================================
echo "--- 7-Axis Controls ---"
officecli add "$FILE" / --type sheet --prop name="7-Axis Controls"
# Chart 1: crosses, crossBetween, valAxisVisible
# Features: crosses=autoZero, crossBetween=between, valAxisVisible=true/false
officecli add "$FILE" "/7-Axis Controls" --type chart \
--prop chartType=bar \
--prop title="Axis Cross Controls" \
--prop series1=Sales:120,80,-30,150 \
--prop categories=Q1,Q2,Q3,Q4 \
--prop x=0 --prop y=0 --prop width=12 --prop height=18 \
--prop crosses=autoZero \
--prop crossBetween=between \
--prop valAxisVisible=true
# Chart 2: labelrotation, labeloffset, ticklabelskip
# Features: labelrotation=45, labeloffset=100, ticklabelskip=2
officecli add "$FILE" "/7-Axis Controls" --type chart \
--prop chartType=column \
--prop title="Tick-label Rotation, Offset & Skip" \
--prop series1=Units:45,30,20,55,40,25,60 \
--prop categories=January,February,March,April,May,June,July \
--prop x=13 --prop y=0 --prop width=12 --prop height=18 \
--prop labelrotation=45 \
--prop labeloffset=100 \
--prop ticklabelskip=2
# Chart 3: axisposition, serlines (stacked bar)
# Features: axisposition=nextTo (alias for tickLabelPos), serlines=true
officecli add "$FILE" "/7-Axis Controls" --type chart \
--prop chartType=barStacked \
--prop title="Stacked — axisposition + serlines" \
--prop series1=Online:55,48,60,70 \
--prop series2=Retail:30,40,35,25 \
--prop categories=Q1,Q2,Q3,Q4 \
--prop colors=4472C4,ED7D31 \
--prop x=0 --prop y=19 --prop width=12 --prop height=18 \
--prop axisposition=nextTo \
--prop serlines=true
# Chart 4: markercolor on line/scatter (chart-level fanout)
# Features: markercolor=FF0000 (chart-level fan-out to every series marker)
officecli add "$FILE" "/7-Axis Controls" --type chart \
--prop chartType=line \
--prop title="Line — markercolor" \
--prop series1=Sales:120,145,132,160 \
--prop series2=Costs:80,95,88,110 \
--prop categories=Q1,Q2,Q3,Q4 \
--prop colors=4472C4,ED7D31 \
--prop x=13 --prop y=19 --prop width=12 --prop height=18 \
--prop marker=circle --prop markerSize=8 \
--prop markercolor=FF0000 \
--prop lineWidth=2
officecli close "$FILE"
officecli validate "$FILE"
echo "Generated: $FILE"