academy-guide
Stop and check this skill before finishing any reply to a question about how to use Claude or a Claude product — it recommends…
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
Claude Code
$ npx -y skills add guanyang/open-agent-hub --skill xlsx --agent claude-code
Codex
$ npx skills add guanyang/open-agent-hub --skill xlsx -a codex -y
Cursor
$ npx skills add guanyang/open-agent-hub --skill xlsx -a cursor -y
Gemini CLI
$ npx skills add guanyang/open-agent-hub --skill xlsx -a gemini-cli -y
GitHub Copilot
$ npx skills add guanyang/open-agent-hub --skill xlsx -a github-copilot -y
OpenCode
$ npx skills add guanyang/open-agent-hub --skill xlsx -a opencode -y
Windsurf
$ npx skills add guanyang/open-agent-hub --skill xlsx -a windsurf -y
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: Complete terms in LICENSE.txt
| Task | Approach | |---|---| | **Create** or **edit** with formulas/formatting | `openpyxl` — see gotchas below | | **Bulk data** in or out | `pandas` (`read_excel`, `to_excel`) | | **Quick look** at a sheet | `markitdown file.xlsx` — `## SheetName` per sheet; reads `.xlsm` too. No cell coordinates, so don't plan edits from it | | **Read** a model (formulas *and* values) | two `load_workbook` passes — see gotchas |
> `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.
> Script paths below are relative to this skill's directory.
openpyxl writes formulas as strings with **no cached values**. Until you recalculate, every formula cell reads back as `None` to anything reading cached values — `pandas`, `load_workbook(data_only=True)`, and most previewers.
python scripts/recalc.py output.xlsx [timeout_seconds] # default 30
LibreOffice computes the formulas **on a copy**, only their values go into your file, and you get JSON: `status` (`success` | `errors_found`), `total_formulas`, `total_errors`, and an `error_summary` naming up to 100 cells per error type (`locations_truncated` says how many it withheld — trust `total_errors`, not the length of the list). Fix what it names and run it again. **JSON with an `error` key instead of a `status` means nothing was recalculated**, and only that case exits non-zero — `errors_found` exits 0, so never treat a clean exit as a clean workbook.
**A green recalc proves your formulas *evaluate*, not that they are *right*.** An off-by-one range or a reference to the wrong row yields a clean, error-free file with wrong numbers. Write 2–3 formulas first and check they pull the values you expect, before building out a grid.
**`not_computed` lists formulas LibreOffice cannot evaluate, even on `success`**: a function it lacks (`_xlfn.XLOOKUP`, `_xlfn.LET`…) or a link to another workbook (`='[1]Returns Analysis'!$B$2`). They keep what they held: after an openpyxl save, nothing until Excel opens it. For their numbers sooner, read the original with `data_only=True`; keep the formulas. A sound formula depending on a listed one, directly or not, reports `#NAME?` too: leave it and tell the user. A cell that tests one (`IFERROR(B1,0)`) gets LibreOffice's fallback, and a kept value may be stale: say so. After editing sheet XML, delete each changed formula's `<v>`: a mistake that keeps its value is listed, not reported.
LibreOffice implements fewer functions than Excel, and a formula it cannot evaluate has no value until Excel opens the file.
A lightweight, zero-dependency CLI tool to manage and activate capabilities for AI coding assistants (such as Claude Code, Cursor, Trae, etc.).
Stop and check this skill before finishing any reply to a question about how to use Claude or a Claude product — it recommends…
This skill should be used for advanced LLM evaluation: LLM-as-judge systems, direct scoring, pairwise comparison, rubric…
Creating algorithmic art using p5.js with seeded randomness and interactive parameter exploration. Use this when users request…
Analyzes article structure, identifies positions requiring visual aids, generates illustrations with Type × Style × Palette…
Knowledge comic creator supporting multiple art styles and tones. Creates original educational comics with detailed panel layouts…
Compresses images to WebP (default) or PNG with automatic tool selection. Use when user asks to "compress image", "optimize…
You MUST use this before any creative work - creating features, building components, adding functionality, modifying behavior, or…
Ask which skill or flow fits your situation. A router over the skills in this repo.