Skip to main content
skill CX Codex

xlsx · appautomaton — Claude Code skill: build and fix Excel workbooks

A skill for creating, editing and recalculating Excel workbooks with live formulas, formatting and charts. Useful when the agent has to produce or modify a spreadsheet file.

Install into Claude Code · Skills CLI (Vercel) All methods and platforms ↓
npx skills add appautomaton/document-SKILLs --skill xlsx -a claude-code
Open on GitHub

What xlsx does

The skill covers what you cannot see from the code alone: a recalculation step that reports what is actually broken in a workbook, and the openpyxl and LibreOffice behaviours that quietly corrupt files.

It ships a recalc.py script. Run it by absolute path from the user's working directory so relative paths to their files keep working: uv run <skill>/scripts/recalc.py model.xlsx. It recalculates in LibreOffice, writes the values back and prints JSON. Exit status 0 means clean, 1 means problems, 2 means it could not run. Recalculation needs LibreOffice (soffice) installed.

For any workbook you deliver, use openpyxl: it keeps formulas, formatting, charts, data validation and comments. pandas is fine for analysis and bulk reads, but its writer keeps only values. Load .xlsm with keep_vba=True or the macros are gone on save. One more trap: data_only=True reads cached values, and saving a workbook opened that way replaces every formula with its last value for good. Worth checking your code before you open someone else's file that way.

What it helps with

  • build an Excel workbook with formulas instead of hardcoded numbers
  • recalculate a file and see which formulas error out
  • turn CSV or TSV data into a formatted sheet
  • read values and formulas out of an existing workbook
  • keep macros intact while editing an .xlsm file

Example prompts for the agent

  • build an xlsx workbook with monthly revenue and a total formula
  • recalculate model.xlsx and show me what broke
  • read the formulas in report.xlsx and explain how it is structured

How to install xlsx

1Skills CLI (Vercel)

npx skills add appautomaton/document-SKILLs --skill xlsx -a claude-code

2Manually: put the files in place

~/.claude/skills/xlsx/SKILL.md

Copy the whole skill folder; for one project use .claude/skills/xlsx/

Step by step, with commands for each platform: How to install skills in Claude Code: five ways

Questions about xlsx

How do I install xlsx in Claude?

Run npx skills add appautomaton/document-SKILLs --skill xlsx -a claude-code, then check ~/.claude/skills/xlsx/SKILL.md.

What does the xlsx skill do?

It lets the agent create, edit and analyze Excel workbooks, write formulas rather than static values, and recalculate the file through LibreOffice to catch errors before delivery.

What do I need for recalculation?

LibreOffice installed, since the script calls soffice. If the workbook links to other files, recalculation stops, because otherwise the linked values would be overwritten.

Source text

SKILL.md · MIT
---
name: xlsx
description: Create, edit, analyze, and recalculate Excel workbooks (.xlsx, .xlsm) with live formulas, formatting, and charts. Use when a task produces or modifies a spreadsheet file, turns CSV/TSV data into one, or needs values, formulas, or formatting read from one.
---

# Excel workbooks

You already know openpyxl and pandas. This skill adds what you can't see from the code: a recalculation step that reports what is actually wrong in the workbook, and the behaviours of openpyxl and LibreOffice that silently break files.

## Running scripts

`<skill>` is the directory containing this file. Run bundled scripts by absolute path from the user's working directory, so relative paths to their files keep working:

```bash
uv run <skill>/scripts/recalc.py model.xlsx
```

Run Python you write with its dependencies declared, either `uv run --with openpyxl script.py` or a PEP 723 header. Recalculation needs LibreOffice (`soffice`).

## Choosing a tool

- **openpyxl** for any workbook you deliver: formulas, formatting, charts, validation, comments. It keeps charts, images, comments, data validation and conditional formatting of files it loads. It drops what it does not model, such as shapes, text boxes, slicers and form controls, so check before editing a workbook that has them.
- **pandas** for analysis and bulk reads. Its writer keeps only values, so never use it to edit a workbook someone will keep working in.
- For `.xlsm`, load with `load_workbook(path, keep_vba=True)`, or the macros are lost on save.

## Formulas, not values

Anything derived belongs in the sheet as a formula, so the workbook stays correct when its inputs change. Compute in Python only what has no spreadsheet form, then write it as a labelled input.

```python
ws["B10"] = "=SUM(B2:B9)"          # not ws["B10"] = df["Sales"].sum()
ws["C5"] = "=(C4-C2)/C2"           # growth, from the cells it depends on
ws["D3"] = "=B3*(1+$B$1)"          # assumptions live in their own cells
```

## Checking the output

openpyxl writes formulas without values, so a file is not finished until it has been recalculated. Run this after every save that touched formulas, and fix what it reports before delivering:

```bash
uv run <skill>/scripts/recalc.py model.xlsx
```

It recalculates in LibreOffice, writes the values back into the file, and prints JSON. The exit status is 0 when clean, 1 when there are problems, and 2 when it could not run.

| Field | Meaning and fix |
|---|---|
| `errors` | Error values by type, e.g. `{"#DIV/0!": {"count": 3, "locations": ["Model!C7", …]}}`, with at most 50 locations per type. Fix the formulas at those cells. |
| `missing_prefix` | Newer functions written without the prefix the file format requires (see below). The file is left untouched, and each entry carries the corrected formula in `fix`. |
| `circular_references` | Groups of cells that depend on each other. LibreOffice shows these as `#VALUE!`, so fix the cycle first. |
| `uncalculated` | Formulas LibreOffice left without a value. Usually a function LibreOffice does not implement; the workbook may still work in Excel, but tell the user. |

Links to other workbooks make it stop, because recalculating would overwrite the linked values. Pass `--force` only if the user accepts that.

## Pitfalls that fail silently

- **Function prefixes.** Functions newer than Excel 2007 are stored with a prefix. Write `=_xlfn.XLOOKUP(…)`, `=_xlfn.TEXTJOIN(…)`, `=_xlfn.IFS(…)`, and `=_xlfn._xlws.FILTER(…)` and `=_xlfn._xlws.SORT(…)`. Without it, Excel and LibreOffice both show `#NAME?`. recalc catches these before they do damage. LibreOffice older than 24.8 (`soffice --version`) lacks XLOOKUP, XMATCH, FILTER, SORT, SORTBY, UNIQUE, SEQUENCE and LET, so recalc flags them even when prefixed; the workbook still computes in Excel, so tell the user rather than rewriting the formulas.
- **Inserting or deleting rows and columns.** `insert_rows`, `delete_rows`, `insert_cols` and `delete_cols` move cells but do not rewrite any formula that refers to them. `=SUM(B1:B4)` stays `=SUM(B1:B4)` after a row is inserted above it. Rewrite the affected formulas yourself, or lay out the sheet so nothing needs inserting.
- **`data_only=True`** reads cached values. Saving a workbook opened that way replaces every formula with its last value, permanently.
- **Dynamic arrays.** openpyxl cannot write spilling formulas. FILTER, SORT, UNIQUE and SEQUENCE land in one cell, and Excel prefixes them with `@`. Prefer formulas that return one value per cell.
- **Indexing.** Rows and columns are 1-based. Use `get_column_letter` and `column_index_from_string`; never count letters by hand past column Z.

## Charts

Use openpyxl's native charts (`openpyxl.chart`) for charts that belong in the workbook; they stay linked to the cells. Render matplotlib images only when the chart is going somewhere else.

## Existing workbooks and templates

Study the file before changing it, and match its fonts, fills, number formats, column widths and layout exactly. Its conventions override everything below.

## Financial models

Unless the user or the template says otherwise:

- **Font colour by role:** blue `0000FF` for hard-coded inputs, black for formulas, green `008000` for links to other sheets, red `FF0000` for links to other files. A yellow `FFFF00` fill marks key assumptions.
- **Number formats:**
  - Currency: `$#,##0;($#,##0);-`, with units in the header, e.g. "Revenue ($mm)".
  - Percentages: `0.0%`.
  - Multiples: `0.0x`.
  - Negatives: in parentheses.
  - Years: written as text, so "2026" never becomes "2,026".
- **Structure:** every assumption sits in its own labelled cell and is referenced, never typed into a formula. Each projection period uses the same formula as the one before it.
- **Sources:** give every hard-coded number a source in a cell comment or an adjacent cell, e.g. "Source: Company 10-K, FY2025, p. 45".

© appautomaton · MIT · appautomaton/document-SKILLs

Similar skills

Everything for Office documents →

xlsx by other authors comes first.

xlsx official anthropics Creates, reads, edits, and converts spreadsheet files. Use it when the requested deliverable is an Excel workbook or another tabular file. 187,223installs xlsx tfriedel Teaches agents to generate clean spreadsheets, keep formulas dynamic, and enforce financial modeling standards. CX Codex +1 2,500installs xlsx bobmatnyc A skill that shows the agent how to read, write and edit Excel files using openpyxl, pandas and the JavaScript xlsx library. CX Codex +1 588installs kimi-xlsx thvroyal A skill for spreadsheet work: builds .xlsx with openpyxl and pandas, checks formulas for errors, and creates pivot tables with charts. CX Codex +1 430installs xlsx-manipulation claude-office-skills A skill that builds and edits Excel files from code: creates .xlsx workbooks with openpyxl, adds formulas, formatting and charts. CX Codex +1 6,500installs agent-xlsx apetta The skill gives your agent a CLI for reading, searching and writing Excel data. Handy when a spreadsheet lands in the repo and nobody remembers its layout. CX Codex +1 766installs excel-automation daymade Generates styled Excel reports using openpyxl, extracts data from large xlsm models with stdlib zipfile, and drives Excel on macOS. Handy for financial modeling and rebuilding paper forms. CX Codex +1 1,500installs minimax-xlsx MiniMax-AI Skill to create, read, edit, and validate Excel files (.xlsx, .xlsm, .csv, .tsv) directly in code. Use it when you need to build a financial model, add calculated columns, or fix broken formulas while preserving formatting and macros. CX Codex +1 3,800installs xlsx-generator agent-skills This skill writes and edits XLSX files: fills placeholders in an existing template or builds a workbook from a JSON spec. CX Codex +1 393installs

From the same set3

Project sponsors

Companies that keep this analytics open
Gold sponsor

Impressions, clicks and code copies — open statistics. We keep the numbers public for the same reason NeBlask itself is public. Become a sponsor