How Pivot Tables Work in Excel with OfficeCLI: Complete Guide to Programmatic Properties

OfficeCLI manipulates Excel pivot tables by directly editing Open XML PivotTableDefinition elements without rendering cells, exposing over 20 programmable properties via the PivotTableHelper class.

Excel pivot tables in OfficeCLI are treated as metadata rather than computed data. The CLI stores the pivot cache (row, column, and value definitions) and the pivot table definition as Open XML parts, leaving the actual rendering to Excel or LibreOffice when the file is opened. This architecture enables rapid, UI-free batch operations across workbooks.

How OfficeCLI Represents Pivot Tables

Unlike normal spreadsheet data, pivot tables are not contained in SheetData rows. In ExcelHandler.View.cs【/cache/repos/github.com/iOfficeAI/OfficeCLI/main/src/officecli/Handlers/Excel/ExcelHandler.View.cs#L19-L26】, the view command explicitly surfaces pivot table counts because they exist as separate PivotTablePart elements in the Open XML package.

The core abstraction is the PivotTableDefinition XML element within each PivotTablePart. OfficeCLI never materializes the visible cells—you are editing the blueprint that Excel interprets.

The PivotTableHelper.Set.cs Implementation

All programmatic manipulation flows through PivotTableHelper.SetPivotTableProperties in src/officecli/Core/PivotTableHelper.Set.cs. This method:

  1. Accepts a dictionary of CLI key-value pairs
  2. Normalizes aliases (e.g., rowrows, columngrandtotalscolgrandtotals)【/cache/repos/github.com/iOfficeAI/OfficeCLI/main/src/officecli/Core/PivotTableHelper.Set.cs#L15-L18】
  3. Routes each property to the appropriate XML attribute or child element

Complete List of Programmable Properties

Identity and Source Properties

CLI Key XML Target Implementation
name <pivotTableDefinition><name> Validated by ValidatePivotName【/cache/repos/github.com/iOfficeAI/OfficeCLI/main/src/officecli/Core/PivotTableHelper.Set.cs#L4-L10】
source / src PivotCacheDefinition/CacheSource Triggers RefreshPivotCacheFromSource to rebuild the cache【/cache/repos/github.com/iOfficeAI/OfficeCLI/main/src/officecli/Core/PivotTableHelper.Set.cs#L11-L20】

Visual Styling Properties

CLI Key Controls XML Target
style Pivot style name (e.g., PivotStyleMedium9) <pivotTableStyleInfo><name>【/cache/repos/github.com/iOfficeAI/OfficeCLI/main/src/officecli/Core/PivotTableHelper.Set.cs#L31-L42】
showRowStripes Alternating row colors <pivotTableStyleInfo> boolean
showColStripes Alternating column colors <pivotTableStyleInfo> boolean
showRowHeaders Row header visibility <pivotTableStyleInfo> boolean
showColHeaders Column header visibility <pivotTableStyleInfo> boolean
showLastColumn Emphasis on last column <pivotTableStyleInfo> boolean

Applied via ApplyPivotStyleInfoProps【/cache/repos/github.com/iOfficeAI/OfficeCLI/main/src/officecli/Core/PivotTableHelper.Set.cs#L43-L55】.

Field Area Assignments

CLI Key Purpose Implementation
rows / row Fields on Rows axis Rebuilt via RebuildFieldAreas
cols / columns / column Fields on Columns axis Populated in fieldAreaProps
values / value Fields in Data area 【/cache/repos/github.com/iOfficeAI/OfficeCLI/main/src/officecli/Core/PivotTableHelper.Set.cs#L60-L66】
filters / filter Fields in Filters area

Aggregation and Calculation

CLI Key Function
aggregate Aggregation function: sum, count, average, max, min, etc.
showDataAs Display calculation: % of Grand Total, % of Column, Difference From, etc.

Stored in DataField elements【/cache/repos/github.com/iOfficeAI/OfficeCLI/main/src/officecli/Core/PivotTableHelper.Set.cs#L67-L76】.

Sorting and Ordering

  • sort: Sets field sort order (ascending/descending)
  • Uses thread-static _axisSortMode scope
  • Forces rebuild even when no area changes occur【/cache/repos/github.com/iOfficeAI/OfficeCLI/main/src/officecli/Core/PivotTableHelper.Set.cs#L77-L89】

Grand Totals Configuration

CLI Key Behavior
grandTotals Master toggle for all totals
rowGrandTotals / rowgrandtotals Row totals visibility
colGrandTotals / colgrandtotals / columnGrandTotals / columngrandtotals Column totals visibility

Managed by PushGrandTotalsOptions scope, reflected in RowGrandTotals and ColumnGrandTotals attributes【/cache/repos/github.com/iOfficeAI/OfficeCLI/main/src/officecli/Core/PivotTableHelper.Set.cs#L90-L99】.

Layout and Structure Properties

CLI Key Values Description
layout compact, outline, tabular Pivot layout mode; sticky state seeded from existing definition【/cache/repos/github.com/iOfficeAI/OfficeCLI/main/src/officecli/Core/PivotTableHelper.Set.cs#L54-L71】
repeatItemLabels true / false Repeat item labels on each row【/cache/repos/github.com/iOfficeAI/OfficeCLI/main/src/officecli/Core/PivotTableHelper.Set.cs#L30-L33】
insertBlankRow true / false Insert blank row between groups【/cache/repos/github.com/iOfficeAI/OfficeCLI/main/src/officecli/Core/PivotTableHelper.Set.cs#L33-L35】
grandTotalCaption string Custom caption for grand totals【/cache/repos/github.com/iOfficeAI/OfficeCLI/main/src/officecli/Core/PivotTableHelper.Set.cs#L35-L37】

Practical CLI Examples

List Sheets and Detect Pivot Tables

officecli view excel workbook.xlsx

Output includes pivot table counts per sheet via ExcelHandler.View.cs.

Update Source Range and Rename

officecli set excel /Sheet1/pivottable[1] \
    source="Sheet1!A1:D100" \
    name="SalesByRegion"

Apply Styling and Layout

officecli set excel /Sheet1/pivottable[1] \
    layout=tabular \
    style=PivotStyleMedium9 \
    showRowStripes=true \
    showColHeaders=false

Reconfigure Field Areas

officecli set excel /Sheet1/pivottable[1] \
    rows=Region \
    cols=Product \
    values=Revenue \
    aggregate=sum

Control Totals and Sorting

officecli set excel /Sheet1/pivottable[1] \
    grandTotals=false \
    sort=Revenue:desc

Key Source Files

Summary

  • OfficeCLI pivot tables are Open XML definitions, not rendered cells—Excel regenerates the display on open
  • 20+ properties are programmable through PivotTableHelper.SetPivotTableProperties
  • Alias normalization allows flexible CLI syntax (row/rows, columngrandtotals/colgrandtotals)
  • Source refreshing, field reassignment, and styling changes all operate directly on PivotTableDefinition XML
  • Batch automation is enabled by combining multiple property sets in a single command

Frequently Asked Questions

How does OfficeCLI handle pivot table data without Excel installed?

OfficeCLI stores the pivot cache (source data range and field definitions) and the pivot table definition as Open XML parts. It never computes aggregated values—when you open the file in Excel or LibreOffice, the application renders the table from these definitions. The CLI's role is editing the blueprint, not executing the calculations.

Can I change which fields appear in rows, columns, and values?

Yes. Use the rows, cols / columns, values, and filters keys. The RebuildFieldAreas method in PivotTableHelper.Set.cs reconstructs the field area assignments from your specification. You can combine multiple area changes in one command.

What happens when I update the source property?

Setting source or src triggers RefreshPivotCacheFromSource, which rebuilds the pivot cache from the new range reference. This ensures the field list reflects the current source data structure. The cache and definition are then saved; Excel will regenerate the visible pivot table on next open.

Why does the sort property force a rebuild even without other changes?

The sort property uses a thread-static _axisSortMode scope that signals a structural modification. This ensures sort state is captured in the XML even when field areas remain unchanged, preserving your sort intent across saves.

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:

Share the following with your agent to get started:
curl -s "https://instagit.com/install.md"

Works with
Claude Codex Cursor VS Code OpenClaw Any MCP Client

Maintain an open-source project? Get it listed too →