XLSX creation, editing, and analysis

Use this skill any time a spreadsheet file is the primary input or output.

You say
Install this skill Read the source first Free Written by anthropics · unverified publisher
Context cost
2.5k tokensestimated from the bundle, loaded when it triggers
Bundle
2 files · 10.1 kBtext throughout, nothing executable
Licence
Proprietary. LICENSE.txt has complete termsfree to use
Last change
no release on file
Servers it uses
Noneruns standalone

What it does

Use this skill any time a spreadsheet file is the primary input or output. This means any task where the user wants to: open, read, edit, or fix an existing .xlsx, .xlsm, .xltx, .csv, or .tsv file (e.g., adding columns, computing formulas, formatting, charting, cleaning messy data); create a new spreadsheet from scratch or from other data sources; or convert between tabular file formats. Trigger especially when the user references a spreadsheet file by name or path — even casually (like \"the xlsx in my downloads\") — and wants something done to it or produced from it.

Installed, it changes the agent in these ways.

What this skill changes about the agent is not written down here yet. The listing was collected from its source, and the description is in its own SKILL.md.

Workflow

Runs a procedure end to end.

data science

The skill itself

This is the whole product. A skill is instructions the model reads, so there is nothing behind the listing you cannot see first — the front matter loads with every session, and the body below it loads when the skill triggers.

SKILL.md8.6 kB · 100 lines
--- name: xlsx description: "Use this skill any time a spreadsheet file is the primary input or output. This means any task where the user wants to: open, read, edit, or fix an existing .xlsx, .xlsm, .xltx, .csv, or .tsv file (e.g., adding columns, computing formulas, formatting, charting, cleaning messy data); create a new spreadsheet from scratch or from other data sources; or convert between tabular file formats. Trigger especially when the user references a spreadsheet file by name or path — even casually (like \"the xlsx in my downloads\") — and wants something done to it or produced from it. Also trigger for cleaning or restructuring messy tabular data files (malformed rows, misplaced headers, junk data) into proper spreadsheets. The deliverable must be a spreadsheet file. Do NOT trigger when the primary deliverable is a Word document, HTML report, standalone Python script, database pipeline, or Google Sheets API integration, even if tabular data is involved." license: Proprietary. LICENSE.txt has complete terms ---
7# XLSX creation, editing, and analysis
8
9| Task | Approach |
10|---|---|
11| **Create** or **edit** with formulas/formatting | openpyxl — see gotchas below |
12| **Bulk data** in or out | pandas (read_excel, to_excel) |
13| **Quick look** at a sheet | markitdown file.xlsx## SheetName per sheet; reads .xlsm too. No cell coordinates, so don't plan edits from it |
14| **Read** a model (formulas *and* values) | two load_workbook passes — see gotchas |
15
16> openpyxl, pandas, and markitdown are preinstalled — do not run pip install first; write the script and import directly. Only if an import fails (or the markitdown command is missing): pip install the missing package.
17
18> Script paths below are relative to this skill's directory.
19
20## Requirements for every output
21
22- **Professional font** (Arial, Times New Roman) throughout, unless the user says otherwise.
23- **Zero formula errors.** Never ship while recalc.py reports errors_found. If you think an error predates you, prove it: load the *original* with data_only=True and look at that cell. An error you introduced looks exactly like one you inherited.
24- **Use formulas, never hardcoded results.** Write sheet['B10'] = '=SUM(B2:B9)', not the Python-computed total. The sheet must recalculate when its inputs change.
25- **Follow the user's spec literally.** Exact tab names, exact column headers, and the formula they spelled out. A redesign that computes something else fails, however elegant.
26- **Document every assumption and hardcoded number** where the reader will see it — a cell comment, or an adjacent cell at a table's end. Cite a real source when one exists (Source: Company 10-K, FY2024, Page 45, Revenue Note, [SEC EDGAR URL]); when the number came from the user, say so plainly.
27- **A workbook *you create* for someone to fill in** needs a short legend naming which cells to edit, and one example row of realistic values showing the expected format. Never add such a row to a file you were asked to edit.
28- **Editing an existing file: match its conventions exactly.** They override every guideline here. Find its designated input cells first — a distinct font color, fill, or shading marks them — write only there, and leave every existing formula untouched.
29
30## Recalculate (mandatory whenever the file contains formulas)
31
32openpyxl writes formulas as strings with **no cached values**. Until you recalculate, every
33formula cell reads back as None to anything reading cached values — pandas,
34load_workbook(data_only=True), and most previewers.
35
36```bash
37python scripts/recalc.py output.xlsx [timeout_seconds] # default 30
38```
39
40LibreOffice computes every formula, the file is **rewritten in place**, and you get JSON:
41status (success | errors_found), total_formulas, total_errors, and an
42error_summary naming up to 100 cells per error type (locations_truncated says how many it
43withheld — trust total_errors, not the length of the list). Fix what it names and run it
44again. **JSON with an error key instead of a status means nothing was recalculated**, and
45only that case exits non-zero — errors_found exits 0, so never treat a clean exit as a clean
46workbook.
47
48**A green recalc proves your formulas *evaluate*, not that they are *right*.** An off-by-one
49range or a reference to the wrong row yields a clean, error-free file with wrong numbers.
50Write 2–3 formulas first and check they pull the values you expect, before building out a grid.
51
52**A workbook that links to another file loses those links** if you re-save it with openpyxl and
53then recalculate. Such a formula reads ='[1]Returns Analysis'!$B$2 — the [1] is an index
54into the workbook's external-reference list, naming a *separate file on disk*, not a sheet.
55That file is rarely present here, so the cell's cached value is the only thing holding its
56data. openpyxl strips that value on save; LibreOffice then has to resolve the reference for
57real, fails, writes #NAME?, and deletes every link. recalc.py refuses to run in that state
58— copy those cells' values out of the original before you save over them (--force overrides,
59and accepts the loss).
60
61## Choosing formulas that survive verification
62
63LibreOffice implements fewer functions than Excel, and one it cannot evaluate becomes a
64literal #NAME? baked into the file you deliver.
65
66- **Prefer Excel-2007-era functions** — SUMIFS, INDEX, MATCH, IFERROR, SUMPRODUCT — which need no prefix.
67- **Six post-2007 functions work, but only with an _xlfn. prefix**, because openpyxl writes your formula into the XML verbatim and Excel stores post-2007 names prefixed (its UI hides the prefix): _xlfn.TEXTJOIN, _xlfn.CONCAT, _xlfn.IFS, _xlfn.SWITCH, _xlfn.MAXIFS, _xlfn.MINIFS. Written bare, each yields #NAME?.
68- **Never use XLOOKUP, XMATCH, SORT, FILTER, UNIQUE, or SEQUENCE.** The runtime's LibreOffice cannot evaluate them under *any* prefix. Newer builds do evaluate them, but they are spilling array functions and an openpyxl-written file has no spill metadata, so only the top-left cell of the range gets a value — and recalc.py reports total_errors: 0 on the truncated result. Use INDEX/MATCH for lookups, and sort, filter, and de-duplicate in Python before writing the cells.
69- A formula LibreOffice could not parse is written back **lowercased** — a quick tell beside a #NAME?.
70
71## openpyxl gotchas
72
73- **Reading a model takes two loads.** data_only=True yields cached values with the formulas gone; the default yields formula strings with no values. One pass cannot give you both.
74- **data_only=True is destructive if you save.** That workbook has no formulas left, so saving replaces every one with a literal — permanently.
75- **data_only=True on a file openpyxl just wrote returns None everywhere** — run recalc.py first. (A formula whose result is "" also reads back as None.)
76- **Merged cells: write the top-left anchor only.** Every other cell in the range is a MergedCell whose .value is read-only.
77- **.xlsm loses its macros unless you pass keep_vba=True** to load_workbook.
78- **A sheet name containing a space must be quoted** in a cross-sheet reference: ='Assumptions Inputs'!$B$5. Unquoted, it evaluates to #VALUE!.
79
80## Financial models
81
82Unless the user says otherwise, or the existing file already does something else.
83
84**Color:** blue text (0,0,255) for hardcoded inputs and scenario levers · black for formulas ·
85green (0,128,0) for links to another sheet · red (255,0,0) for links to another file ·
86yellow fill (255,255,0) for key assumptions and cells the user should fill in.
87
88**Numbers:** currency $#,##0, with the unit named in the header (Revenue ($mm)) · zeros
89render as -, including in percentages ($#,##0;($#,##0);-) · negatives in parentheses ·
90percentages 0.0%, **stored as fractions** (0.15 renders 15.0%; storing 15 renders
911500.0%) · valuation multiples 0.0x · years as text ("2024", never 2,024).
92
93**Structure:** every assumption in its own labeled cell, referenced by the formulas that use it
94(=B5*(1+$B$6), never =B5*1.05) · formulas consistent across every projection period, since a
95lone edited cell mid-row is the commonest silent error · guard denominators that can be zero.
96
97## Dependencies
98
99openpyxl, pandas, markitdown (pip, preinstalled — install only if an import fails or the command is missing) · LibreOffice (soffice, auto-configured for sandboxed environments via scripts/office/soffice.py)
100
In the file
SKILL.md1,312 words
Files2
LicenceProprietary. LICENSE.txt has complete terms
Why you can read it

Nothing in a skill executes. The client loads the text and the model follows it, so a skill can be audited the way a runbook is — by reading it.

What it costs in context

Skills are not billed by the call. They are paid for in context: every token the instructions occupy is a token your code, your diff and your conversation cannot use. Here is what this one takes and when it takes it.

≈260
always loaded
The name and description, so the model knows the skill exists and when to reach for it.
2,265
on trigger
The instruction body and 1 supporting file, read only when the skill fires.
1.3%
of a 200k window
Ten skills this size would take about 13% of the window before you open a file.
050k100k150k200k context window

2.5k tokens, estimated from the bundle at four bytes to the token, held for the rest of the session once it triggers. Middling. Fine to keep on in a project where you use it weekly, worth unloading in one where you never do.

Servers bill, skills cost

A server charges by the month. A skill charges once per session, in context, and then keeps charging it for as long as the session lives.

Before and after

The same question, put to the same model twice: once as it comes, and once with these instructions loaded.

No worked example has been published for this skill yet.

Adoption
Installsnone yet
Ratingno reviews yet

The procedure it runs

The procedure has not been published here. It is in the skill’s own SKILL.md, which its author has not sent to the marketplace yet.

Prose, not code

These steps are written for a model to follow, not executed by a runtime. It can still be told to skip one, and it will say so when it does.

Servers it uses

None. This skill calls no MCP servers at all.

Everything it needs is in the instructions, so it works in a project with nothing connected — the model reads the file and changes how it works with what it can already reach.

It writes no files and reaches no network. All it changes is how the model reasons and writes.

What it asks for
Writes filesno
Network accessno

Read from the allowed-tools line of this skill’s own SKILL.md. A skill grants no permissions of its own — it can only ask for tools your client already has.

What it will not do

Every skill is narrow, and the useful ones say where they stop. These are the jobs this one is the wrong tool for.

What this skill is not for has not been published here. Nothing is implied by that: it is a section the author has not filled in.

What is in the bundle

2 files, 10.1 kB on disk. A bundle is text throughout: the instructions the model reads, plus the templates it fills in.

  • LICENSE.txt1.5 kB
  • SKILL.md8.6 kB
What is not in it

No dependencies and nothing executable: a skill is text the agent reads, so the bundle is 2 files you can review in full before installing. The Proprietary. LICENSE.txt has complete terms licence covers the templates and examples as well as the instructions.

Install

Installing copies the bundle into your project. Nothing runs at install time — the files sit on disk until the model reads them.

# XLSX creation, editing, and analysis · 2.5k tokens when loaded npx mcprush@latest skill add anthropics/xlsx-creation-editing-and-analysis

Writes to .claude/skills/xlsx-creation-editing-and-analysis/ in the current project. Add --global to put it in your home directory instead, for every project.

Which clients pick it up on their own

A skill is a folder of text. A client with a skills folder reads it without being told; everywhere else the same text works, it is just handed to the model rather than found.

Claude Code.claude/skills/
Claude Desktop
ChatGPT
Cursor.cursor/skills/
VS Code.github/skills/
Codex CLI.agents/skills/
Gemini CLI.gemini/skills/
Grok.grok/skills/
Zed.agents/skills/
Windsurf.windsurf/skills/
Agent SDK.claude/skills/
HTTP / API
This release
Versionnot versioned
Publishedno release date on file
PriceFree
Referenceanthropics/xlsx-creation-editing-and-analysis

Versions

Its author publishes no version number, so there is nothing here to pin to: what you install is the folder as it stands today. Instructions change more often than APIs do — a skill can be rewritten entirely without anything it depends on moving.

v
  • No earlier releases have been published to the marketplace.
Pinning

Nothing to pin to: this skill carries no version number of its own. What you install is what the folder holds on the day you install it.

Reviews

no reviews yet · no installs yet

Nobody has reviewed this skill yet. The rating is the mean of the reviews written here, so there is none until somebody writes the first.

Who can post

Only accounts that have had the skill installed for fourteen days, so a review is written after living with it rather than after reading it. Publishers may reply once.

Publisher
Servers0
Claim this skill