Tooluck logoTooluck
SKILL.md

xlsx-parsing

Agent skill frombenchflow-ai/skillsbench

Read Microsoft Excel (.xlsx) files robustly with `openpyxl` (or `pandas`). Covers multi-sheet workbooks, header rows, empty cells, merged cells, comma-separated list cells, and converting a sheet to a list-of-dicts the rest of your code can consume. Use when a task input or reference document is an `.xlsx` file rather than JSON/CSV.

How to install xlsx-parsing

install xlsx-parsing
# install the skillsbench pack with the skills CLI
npx skills add benchflow-ai/skillsbench

# or add only this skill to Claude Code: copy the folder

tasks-extra/nda-playbook-review/environment/skills/xlsx-parsing/

# into

~/.claude/skills/xlsx-parsing/ (all projects)

.claude/skills/xlsx-parsing/ (one project)

tasks-extra/nda-playbook-review/environment/skills/xlsx-parsing/SKILL.md

Apache-2.0Full file
1# xlsx-parsing
2
3Excel workbooks are the lingua franca of operational documents that nobody bothered to put in a database — playbooks, rate cards, deviation policies, finance models, SLAs. They show up in tasks with three properties that trip up naive readers:
4
51. **Multiple sheets**, only one of which is the data you actually want.
62. **Sparse cells** — a row that uses a column may sit next to a row that doesn't, leaving `None` cells. Empty is meaningful (the rule does not apply), not an error.
73. **Composite cells** — a single cell that contains a comma-separated list, a JSON blob, or a sentence rather than an atomic value.
8
9Treat the workbook as a *typed table* with declared columns, not a free-form spreadsheet. Read every sheet you need, normalise it to `list[dict[str, Any]]`, then operate on that.
10
11## Reading with `openpyxl` (pure Python, no compiled dependencies)
12
13```python
14import openpyxl
15
16wb = openpyxl.load_workbook("workbook.xlsx", data_only=True, read_only=True)
17print(wb.sheetnames) # e.g., ['Metadata', 'Definitions', 'Rules']
18
19ws = wb["Rules"]
20rows = ws.iter_rows(values_only=True)
21header = [str(c).strip() if c else "" for c in next(rows)]
22records = [dict(zip(header, row)) for row in rows if any(cell is not None for cell in row)]
23```
24
25Notes:
26- `data_only=True` returns the cached value of formula cells instead of the formula expression. Without this you may get strings like `"=A1+B2"`.
27…

Excerpt shown under the repository's Apache-2.0 license.

More skills in skillsbench

Keep exploring

Similar skill repositories

thedotmack /

claude-mem
116k

Persistent Context Across Sessions for Every Agent – Captures everything your agent does during sessions, compresses it with AI, and injects relevant context back into future sessions. Works with Claude Code, OpenClaw, Codex, Gemini, Hermes, Copilot, OpenCode + More

CCCXGHGM+135 skills

Newsletter

Join the Community

Subscribe to our newsletter for the latest news and updates