spreadsheets
Skill1 starsChanged 48 days agoApache-2.0View on GitHub
Build Excel (XLSX) workbooks with openpyxl and edit existing ones through headless LibreOffice Calc — live formulas, number formats, layout — recalculated and re-inspected before delivery.
- Installs packages
13 other projects use a version of this.
Adopted by
Most recently taken up by
- codewhale-hq/codewhale-plugin-marketplacetheir own version, first seen Nov 8, 2026
- PaulRBerg/dot-agentstheir own version, first seen Nov 6, 2026
- PaulRBerg/agent-skillstheir own version, first seen Oct 24, 2026
- 0mlkrizzz655335v/claude-skills-zhtheir own version, first seen Oct 15, 2026
- Geruyang/skillstheir own version, first seen Oct 15, 2026
- nimadorostkar/Claude-Skills-collectiontheir own version, first seen Oct 13, 2026
Used with
Projects with it also use docx and frontend-design.
Other files people use alongside this one.
Files found in the same public projects as a version of this one, more often than they turn up anywhere else. Each project counts once, large collections count for less, and this file's own repository is left out.
AnthropicSkilldocx
Comprehensive document creation, editing, and analysis with support for tracked changes, comments, formatting preservation, and text extraction. When Claude needs to work with professional documents (.docx files) for: (1) Creating new documents, (2) Modifying or editing content, (3) Working with tracked changes, (4) Adding comments, or any other document tasks
Also in 4 projects that use this
BlockSkillfrontend-design
Create distinctive, production-grade frontend interfaces with high design quality. Use this skill when the user asks to build web components, pages, or applications. Generates creative, polished code that avoids generic AI aesthetics.
Also in 4 projects that use this
Other versions13 projects use a version of this.
Word for word · 0
None found.
Edited · 0
None found.
Wrote their own version · 13
- OpenBMB/PilotDeck★ 5ksame name
- PaulRBerg/agent-skills★ 104same name
- nimadorostkar/Claude-Skills-collection★ 33same name
- Last-emo-boy/oai-skills★ 8same name
- PaulRBerg/dot-agents★ 6same name
- codewhale-hq/codewhale-plugin-marketplace★ 5same name
- wfukatsu/slide-forge★ 5same name
- AgentbaseHQ/skills★ 4same name
- 0mlkrizzz655335v/claude-skills-zh★ 2same name
- Geruyang/skills★ 2same name
3 more not listed
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
In this repository8 other files it gives its agents.
- AGENTS.mdAGENTS.md
- docs-site/AGENTS.mdAGENTS.md
- CLAUDE.mdCLAUDE.md
- docs-site/CLAUDE.mdCLAUDE.md
- chartsSkill
- pdf-documentsSkill
- presentationsSkill
- word-documentsSkill
The file
We split this skill into the rules it gives an agent
4 rules. 0 are common, 2 are distinctive, and 2 are very specific to this project.
0
Common
Most of the 12 edited versions we read keep these.
2
Distinctive
This author's own choices. Worth a look.
2
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Very specific: line 32
Read-only inspection is fine and expected: load_workbook(path, read_only=True) or data_only=True, with no .save() anywhere near it.
- Distinctive: line 60
Use the bundled Calc driver, which opens the file in a real spreadsheet engine and saves it back through that engine's own filter — the …
- Very specific: line 75
Run it with python3: the UNO bridge binds to the system interpreter.
- Distinctive: line 152
Check that every expected sheet exists, headers and sample rows look right, and the thumbnails show a readable layout.
“Common” is measured: kept by at least 6 in 10 of the 12 edited versions of this file we could read. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Spreadsheets
Produce XLSX deliverables with openpyxl, and edit workbooks that already exist with LibreOffice Calc. Follow every section below before declaring a workbook done.
Never round-trip an existing workbook with openpyxl
openpyxl writes new workbooks. It never touches a file that already exists — not to change one number, not for a "quick value edit".
load_workbook(path) followed by .save(path) does not edit the file; it
rebuilds it from the parts openpyxl models, and everything else is gone. In
practice that means silently losing:
- formula results the engine computed — openpyxl drops the cached values, so every formula reads as empty until someone opens the file in Excel
- named ranges, pivot tables and their caches
- charts, images, and shapes
- conditional formatting and data validation
- macros, custom styles, and sheet protection
None of this raises an error. The file saves, looks plausible in an inspection script, and hands the user a gutted copy of their own workbook.
Read-only inspection is fine and expected: load_workbook(path,
read_only=True) or data_only=True, with no .save() anywhere near it. The
bundled analyze_xlsx.py does exactly this.
Installing the library
Install the pinned dependency with its own exec call — commands have a
bounded wall clock, and one pip invocation per package stays inside it:
python3 -m pip install --user openpyxl==3.1.5Installs work only when this chat's network policy allows package managers, and they persist for the rest of the conversation. If an install is refused by policy, do not retry: tell the user to enable the package-manager network policy for this chat, and offer the closest format you can produce without the library (CSV) — only with their knowledge, never as a silent substitution. If a dependency cannot be installed at all, say so plainly instead of quietly delivering a lesser format.
Creating a new workbook
A workbook built from scratch is openpyxl's job, with the formula and layout rules below. Nothing in this section changes because of the edit path.
Editing a workbook that already exists
Use the bundled Calc driver, which opens the file in a real spreadsheet engine and saves it back through that engine's own filter — the edit lands in place and everything the file already carried survives:
python3 .tidebreak/exec-scripts/calc_uno.py inspect input/model.xlsx
python3 .tidebreak/exec-scripts/calc_uno.py get-cell input/model.xlsx Summary B7
python3 .tidebreak/exec-scripts/calc_uno.py set-cell input/model.xlsx Summary B7 '=SUM(B2:B6)'
python3 .tidebreak/exec-scripts/calc_uno.py list-named-ranges input/model.xlsx
python3 .tidebreak/exec-scripts/calc_uno.py set-named-range input/model.xlsx Revenue '$Data.$B$2:$B$13'set-cell treats a leading = as a formula and anything else as a number
when it parses as one, text otherwise. Each write recalculates and saves, so
run one set-cell per change rather than batching edits you cannot inspect.
Run it with python3: the UNO bridge binds to the system interpreter.
This needs the LibreOffice that ships in the sandbox document image. Outside that sandbox the script exits saying so — that is the end of the edit path, not a cue to fall back to openpyxl. Tell the user the workbook cannot be edited in this environment and what they would get instead (for example a new workbook built from scratch, which is not the same file).
Formulas: the hard rule
Write live formulas, never precomputed values, in any cell that represents
a calculation. A total cell gets =SUM(B2:B13), not the number you
computed in Python. A spreadsheet with baked-in values silently goes stale
the moment the user edits an input, which defeats the reason they asked for
a spreadsheet.
openpyxl writes formulas but does not calculate them — the file carries the formula text and Excel computes it on open. Two consequences:
- You cannot read a formula's result back by reopening the file with openpyxl — there is no cached value there to read. Compute the expected value in Python for your own checking, or let the recalculation step below evaluate the workbook properly.
- Any calculated value the user must see in the conversation should also be stated in chat, since they may not open the workbook immediately.
Layout conventions
- Give columns real number formats: currency
#,##0.00, percentages0.0%, datesyyyy-mm-dd— viacell.number_format. Never leave money as bare floats. - Size columns to their content with
worksheet.column_dimensions["A"].width; unreadably narrow columns are a defect. - Freeze the header row (
worksheet.freeze_panes = "A2") on any sheet the user will scroll. - Bold the header row and keep one table per sheet; split unrelated data
into multiple named sheets (
workbook.create_sheet("Assumptions")) instead of stacking tables.
Saving deliverables
Save the finished workbook in output/ — files there are published to the
user as durable outputs. Writing the same filename again publishes a new
version of the same output, so keep the filename stable when revising and
change it only when the user asks for a distinct workbook. Outputs above
the 16 MiB ceiling are refused: keep workbooks lean (no embedded raw data
dumps that a summary sheet serves better), and if the data genuinely cannot
fit, tell the user and deliver a trimmed workbook plus the raw data as CSV.
Validation before declaring done
Two passes, in this order, after every create or edit.
1. Recalculate. Formulas you wrote are unproven until an engine evaluates them:
python3 .tidebreak/exec-scripts/xlsx_recalc.py output/<file>.xlsxIt opens the workbook in Calc, forces a full recalculation, saves the
computed results back, then reports per sheet any cells holding #REF!,
#DIV/0!, #VALUE!, #NAME?, #N/A, #NUM! or #NULL!, plus numbers
that were written as text and so drop out of the sums above them. Finding
problems is a report, not a failure — fix the offending cells and rerun
until the report is clean. Like the editor, this needs the sandbox
LibreOffice; when it is unavailable, say the formulas could not be verified
rather than declaring them correct.
2. Inspect visually. Re-read the saved file with the bundled analyzer:
python3 .tidebreak/exec-scripts/analyze_xlsx.py output/<file>.xlsxIt prints each sheet's dimensions and sample rows and writes sheet
thumbnails into preview/ (at most 3 images are returned per exec call).
Check that every expected sheet exists, headers and sample rows look right,
and the thumbnails show a readable layout. Only declare the workbook done
after both passes are clean.
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

