Sheet happens
Skill Felixx1502/sheet-happens
Map any Excel financial model (.xlsx/.xlsm) into a single self-contained interactive HTML dependency graph with three zoom levels (sheets → functional blocks → line items), data-flow arrows, click-through formula navigation, and a built-in audit (hardcoded constants, error cells, circular references, unmapped refs). ALWAYS trigger when the user wants to: understand/visualize how an Excel model works, map model structure or dependencies, trace precedents/dependents across sheets, audit a financial model for hardcodes, "model map", "model x-ray", "dependency graph of my spreadsheet", or asks how sheets/tabs in a workbook link together. Input is an Excel file; output is one HTML file that opens offline in any browser.From its SKILL.md
npx -y skills add Felixx1502/sheet-happensAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
One thing to look at
- 0 stars0 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
SKILL.md
3.4 KB, 671 tokens by cl100k_base, as published. Nobody here has run it
sheet-happens
Turn an Excel financial model into an interactive dependency map.
Workflow
-
Locate the model file (.xlsx or .xlsm). Confirm with the user if multiple candidates exist.
-
Run the pipeline (pure Python; needs
lxml, plusopenpyxlonly for tests/demo):python map_model.py "MODEL.xlsx" -o "MODEL - Model Map.html" --title "Client model"Useful flags:
--anonymize— strips all labels/formulas, pseudonymises sheet names. Use whenever the output may be shared outside the model's owner.--blocks-override blocks.json— pin block boundaries per sheet ({"Sheet": [[1, "Revenue"], [40, "COGS"]]}) when auto-detection misses the model's real structure.--max-blocks N/--min-block-rows N— tune auto-detection.
Sandbox tips: if a stale bytecode cache interferes, set
PYTHONPYCACHEPREFIX=/tmp/pyc. Very large workbooks (100MB+) parse in seconds — the extractor switches to text-scan mode for oversized sheets automatically — but keep shell timeouts in mind. -
Read the run summary printed by the CLI (block/link counts, hardcode rows, error cells, circular groups, unresolved names). Report the audit headlines to the user alongside the file.
-
Review block quality: open the map's Blocks view mentally via the data — if auto-detected blocks look wrong for key sheets (generic names, giant blocks), write a
blocks_override.jsonfor those sheets from their row labels and re-run. One iteration is usually enough. -
Deliver the HTML. Always tell the user:
- the map embeds labels and formulas from the model → same confidentiality
as the model itself; use
--anonymizefor anything shared publicly; - known accuracy limits (in the map's About panel): dynamic refs (INDIRECT/OFFSET) aren't traceable, item-level range links point to the range's head row, row-level "circular groups" are often legitimate roll-forwards.
- the map embeds labels and formulas from the model → same confidentiality
as the model itself; use
What the output contains
Single HTML file, offline, no upload anywhere: sheet-level flow graph laid out in calculation order → auto-detected functional blocks → row/item drill-down with per-formula navigation; search, weight filters, upstream/downstream tracing; Audit panel (hardcodes, error cells, cycles, unmapped external/table refs, defined-name health).
Repo layout
map_model.py (CLI) · xlmap/ (refs, extract, blocks, graph, render) ·
template/app.html (UI) · assets/cytoscape.min.js (MIT, vendored) ·
tests/test_refs.py (parser unit tests) · tests/make_demo.py (synthetic
DemoCo model) · demo/ (generated demo map).
What ships with it: 18 files
881.5 KB alongside SKILL.md, 10 of them executable
assets/
- cytoscape.min.jsruns364.6 KB
demo/
- DemoCo_map.html416.2 KB
- DemoCo_model.xlsx10.1 KB
examples/
template/
- app.html36.4 KB
tests/
- make_demo.pyruns5.3 KB
- test_refs.pyruns3.7 KB
xlmap/
- blocks.pyruns3.1 KB
- extract.pyruns12.8 KB
- graph.pyruns10.2 KB
- __init__.pyruns0 B
- refs.pyruns6.7 KB
- render.pyruns3.0 KB
- .gitignore181 B
- LICENSE1.0 KB
- map_model.pyruns3.3 KB
- NOTICE284 B
- README.md4.4 KB