How to Handle Chart Creation with Trendlines and Error Bars in Excel Using OfficeCLI
OfficeCLI enables command-line manipulation of Excel charts by parsing property specifications into OOXML objects, allowing you to add trendlines and error bars through simple --prop assignments without manually editing XML.
This guide demonstrates how to handle chart creation with trendlines and error bars in Excel using OfficeCLI, an open-source command-line interface maintained by iOfficeAI. The tool abstracts the complexity of the Open XML SDK by routing chart modification commands through specialized handlers that construct C.Trendline and C.ErrBars elements programmatically.
Architecture of Chart Handling in OfficeCLI
OfficeCLI treats an Excel chart as a ChartPart contained within a worksheet’s DrawingsPart. When you execute a set command targeting a chart path (e.g., /Sheet1/chart[1]), the request flows through a pipeline of specialized handlers and builders.
Path Resolution and ChartPart Extraction
The entry point in ExcelHandler.Set.cs uses regular expressions to identify chart-related paths:
// /SheetName/chart[N]/axis[@role=…] → SetChartAxisByPath
// /SheetName/chart[N] or /chart[N]/series[K] → SetChartByPath
When a path resolves to a chart, ExcelHandler.Set.Charts.cs extracts the ChartPart (or extended part) and forwards the property dictionary to the core chart helper for processing.
The Property Dispatch Pipeline
ChartHelper.SetChartProperties in ChartHelper.Setter.cs serves as the central dispatcher. It iterates over the supplied property dictionary and routes keys based on their prefixes:
- Trendline keys:
trendlineorseriesN.trendline - Error-bar keys:
errbarsorerrorbars
The dispatcher invokes ChartHelper.BuildTrendline and ChartHelper.ApplyTrendlineOptions (implemented in ChartHelper.SetterHelpers.cs lines 62-140) to construct the appropriate OOXML objects.
Adding Trendlines to Excel Charts
Trendlines in OfficeCLI are built by parsing specification strings and applying optional configuration parameters.
Supported Trendline Types and Specifications
BuildTrendline accepts spec strings that map to C.TrendlineValues enum values:
# Linear trendline
officecli set /Sheet1/chart[1] --prop series1.trendline=linear
# Polynomial with specific order (2-6)
officecli set /Sheet1/chart[1] --prop series1.trendline=poly:4
# Moving average with explicit period (minimum 2)
officecli set /Sheet1/chart[1] --prop series1.trendline=movingAvg:4
# Exponential with specific parameters
officecli set /Sheet1/chart[1] --prop series1.trendline=exp:2:1
The parser creates a new C.Trendline() object and injects auxiliary children such as <c:order> for polynomials or <c:period> for moving averages. If the period is omitted for moving averages, the code defaults to 2 (Excel’s standard default).
Configuring Trendline Options
ApplyTrendlineOptions mutates the C.Trendline node based on additional property keys:
| Property | OOXML Element | Constraint |
|---|---|---|
forward / forecastforward |
<c:forward> |
Double value for extrapolation |
backward / forecastbackward |
<c:backward> |
Double value for backward projection |
order |
<c:order> |
Clamped to 2-6 (polynomial only) |
period |
<c:period> |
Minimum 2 (throws exception if lower) |
intercept |
<c:intercept> |
Value for exponential/power trendlines |
displayrsquared / r2 |
<c:dispRSqr> |
Boolean to show R² value |
displayequation / eq |
<c:dispEq> |
Boolean to show regression equation |
name / label |
<c:trendlineLbl> |
Rich-text label display |
The implementation respects strict OOXML child ordering requirements: name → type → order → period → forward → backward → intercept → dispRSqr → dispEq → trendlineLbl.
Configuring Error Bars in Excel Charts
Error bar handling follows a parallel implementation pattern in ChartHelper.SetterHelpers.cs, constructing C.ErrBars objects and attaching them to series nodes.
Error Bar Directions and Types
The dispatcher recognizes errbars or errorbars keys to trigger error bar construction:
# Basic symmetric error bars
officecli set /Sheet1/chart[1] --prop series1.errbars=both
# Direction-only specification
officecli set /Sheet1/chart[1] --prop series1.errbars=plus
Valid directions map to <c:errDir> values: Both, Minus, or Plus.
Fixed Value vs. Percentage-Based Error Bars
Specify the error bar calculation method and magnitude using type-specific properties:
# Fixed value error bars (absolute units)
officecli set /Sheet1/chart[1] \
--prop series1.errbars=both \
--prop series1.errbars.plus=5 \
--prop series1.errbars.minus=5
# Percentage-based error bars
officecli set /Sheet1/chart[1] \
--prop series2.errbars=plus \
--prop series2.errbars.type=percent \
--prop series2.errbars.plus=10
The errbars.type property maps to <c:errBarType> values (FixedVal, Percent, StdDev, etc.), with validation ensuring numeric children exist where required by the OOXML schema.
Practical Command-Line Examples
Combine trendlines and error bars in single commands for efficient batch updates:
Linear trendline with equation display:
officecli set /Sheet1/chart[1] \
--prop series1.trendline=linear \
--prop series1.trendline.displayequation=true
Polynomial trendline with R-squared:
officecli set /Sheet1/chart[1] \
--prop series1.trendline=poly:3 \
--prop series1.trendline.displayrsquared=true
Combined trendline and symmetric error bars:
officecli set /Sheet1/chart[1] \
--prop series1.trendline=linear \
--prop series1.trendline.displayeq=true \
--prop series1.errbars=both \
--prop series1.errbars.plus=3 \
--prop series1.errbars.minus=3
Moving average with custom period:
officecli set /Sheet1/chart[1] --prop series2.trendline=movingAvg:5
Key Implementation Details and Validation
Understanding the internal validation rules prevents runtime exceptions when scripting chart modifications.
OOXML Child Ordering Constraints
The source code in ChartHelper.SetterHelpers.cs (lines 58-64) enforces the exact element sequence required by the Open XML validator. Altering the order of children within C.Trendline or C.ErrBars causes Excel to reject the file as corrupted. The builder functions automatically insert elements in the compliant sequence.
Extended Chart Support (ChartExBuilder)
For modern Excel chart types (funnel, pareto, treemap), the path resolves to an extended chart part (cx schema). ChartExBuilder.Setter.cs mirrors the same SetChartProperties logic, ensuring that trendline and error bar commands work identically across both legacy and contemporary chart implementations.
After processing all properties, ExcelHandler.Set.Charts.cs persists changes via:
ChartHelper.SetChartProperties(chartInfo.StandardPart, chartProps);
chartInfo.StandardPart.ChartSpace?.Save();
Summary
- OfficeCLI routes chart commands through
ExcelHandler.Set.Charts.csto construct OOXML objects programmatically. - Trendlines are specified via
seriesN.trendlineproperties, supporting linear, polynomial, exponential, and moving average types with automatic validation of periods and orders. - Error bars use
seriesN.errbarsproperties to createC.ErrBarselements with configurable directions (plus/minus/both) and calculation types (fixed, percent, standard deviation). - Validation enforces OOXML constraints, including minimum moving average periods of 2 and polynomial orders clamped to 2-6.
- Extended charts (funnel, pareto) utilize
ChartExBuilder.Setter.cswith identical command syntax.
Frequently Asked Questions
What file handles the routing of chart-related set commands in OfficeCLI?
ExcelHandler.Set.Charts.cs serves as the primary router, parsing chart paths (like /Sheet1/chart[1]) and extracting the ChartPart before delegating property processing to ChartHelper.SetChartProperties in ChartHelper.Setter.cs.
How does OfficeCLI validate trendline periods and polynomial orders?
The validation occurs in ChartHelper.SetterHelpers.cs. Polynomial orders are clamped to the 2-6 range as per the OOXML specification, while moving average periods throw an ArgumentException if set below 2, enforcing Excel’s minimum requirement.
Can I combine trendlines and error bars on the same series using OfficeCLI?
Yes. You can combine multiple --prop assignments in a single command, such as --prop series1.trendline=linear --prop series1.errbars=both, and the dispatcher will batch both modifications before saving the chart part.
What is the default period for moving average trendlines in OfficeCLI?
If you specify movingAvg without a period (e.g., series1.trendline=movingAvg), the code automatically injects a default period of 2, matching Excel’s native behavior for moving average trendlines.
Have a question about this repo?
These articles cover the highlights, but your codebase questions are specific. Give your agent direct access to the source. Share this with your agent to get started:
curl -s "https://instagit.com/install.md" Maintain an open-source project? Get it listed too →