Agent skill
xlsx
Read, edit, and create Excel and CSV spreadsheet files.
Filed under Analytics and reporting.
From GTMify/aigtm · 64 skill entries · 25 · pushed 2026-10-04
What it does when it runs
Read, edit, and create Excel and CSV spreadsheet files. Use any time a .xlsx, .xlsm, .csv, or .tsv file is the primary input or output — opening, editing, cleaning, computing, formatting, charting, or converting tabular data. Trigger especially when the user references a spreadsheet by name or path and wants something done to it or produced from it. Do NOT trigger when the deliverable is a Word doc, HTML report, or general script.
Automated analysis of the skill and the 2 files bundled beside it. A skill’s own description is written to be selected by an agent, so it describes the job and not the dependencies.
- Keys and connectors you must supply
- None found.
- Hosts it reaches
- No third-party host appears in the skill or its bundled files.
- Tool permissions it declares
- No
allowed-toolsin the frontmatter. It does act, so it runs under whatever permissions your session already grants. - Actions present in the files
- shell
Install it
View source on GitHub ↗git clone --depth 1 --filter=blob:none --sparse https://github.com/GTMify/aigtm.git /tmp/aigtm git -C /tmp/aigtm sparse-checkout set "skills/xlsx" mkdir -p ~/.claude/skills/xlsx cp -R "/tmp/aigtm/skills/xlsx/." ~/.claude/skills/xlsx/
Picked up without a restart. A project skill of the same name is shadowed by your personal one. For one repository only, swap ~/.claude/skills for .claude/skills. Claude Code docs ↗
The folder is the same in every client that implements the format — 46 of them — so if yours is not above, only the destination changes.
The skill
Source on GitHub ↗Reproduced in full from GTMify/aigtm/blob/1cb992d7589f85b8ffa07f13f2c60f2028ba39b4/skills/xlsx/SKILL.md, which is licensed MIT (repository). 659 words, 11 headings.
Spreadsheet Skill
Your Role
You are a spreadsheet operator who treats .xlsx and .csv files as the deliverable, not as data to convert into something else. You open, edit, compute, format, chart, and clean spreadsheets using Python's openpyxl for .xlsx and the standard csv module (or pandas) for .csv. You preserve formatting, formulas, and named ranges unless the user explicitly asks to change them.
When to use this skill
Trigger when:
- The user references a
.xlsx,.xlsm,.csv, or.tsvfile by name or path - The user wants to create a new spreadsheet from scratch or from other data
- The user wants to clean messy tabular data into a proper spreadsheet
- The user wants to add formulas, formatting, charts, or pivot tables
- The user asks to convert between tabular file formats
Do NOT trigger when:
- The primary deliverable is a Word document, HTML report, standalone Python script, or database pipeline
- The user wants Google Sheets API integration (different surface)
Required libraries
- openpyxl — read/write
.xlsx, formulas, formatting, charts, named ranges - pandas (optional) — heavy data manipulation, joins, pivots
- csv (stdlib) —
.csvand.tsvread/write
Install if missing: pip install openpyxl pandas.
Process
Step 1: Inspect Before Editing
If the user references an existing file, open it first and confirm:
- The actual sheet names (don't assume "Sheet1")
- The actual column headers (row 1 vs. row 3 — messy files often have headers offset)
- Whether the workbook has formulas, named ranges, frozen panes, or conditional formatting that must be preserved
- The data types per column (text vs. number vs. date — pandas will guess wrong on dates)
Step 2: Plan the Edit
Before writing code, state:
- Which sheet(s) you'll modify
- What gets added/changed/removed
- Whether existing formulas / formatting / named ranges are preserved
- The output path (overwrite vs. write a new file)
Step 3: Edit
Common patterns:
Read a sheet:
from openpyxl import load_workbook
wb = load_workbook("input.xlsx", data_only=False) # data_only=True returns cached values, False returns formulas
ws = wb["Sheet1"]
for row in ws.iter_rows(values_only=True):
print(row)
Add a column with a formula:
ws["E1"] = "Total"
for r in range(2, ws.max_row + 1):
ws[f"E{r}"] = f"=C{r}*D{r}"
Format a header row:
from openpyxl.styles import Font, PatternFill
header_font = Font(bold=True, color="FFFFFF")
header_fill = PatternFill("solid", fgColor="1F4E78")
for cell in ws[1]:
cell.font = header_font
cell.fill = header_fill
Auto-fit column widths (approximate):
for col in ws.columns:
max_len = max((len(str(c.value)) for c in col if c.value is not None), default=10)
ws.column_dimensions[col[0].column_letter].width = min(max_len + 2, 50)
Save:
wb.save("output.xlsx")
Step 4: Verify
Before declaring done:
- Open the output and read it back
- Confirm row counts match expectation
- Confirm formulas resolve (use
data_only=Trueon reload to check) - Confirm formatting applied as expected
Step 5: Hand Back
Tell the user:
- The path to the output file
- A summary of what changed (rows added, columns modified, formulas inserted)
- Anything you couldn't do or that the user should verify by eye
Guardrails
- Never overwrite without explicit confirmation. Default to writing a new file (e.g.,
input.cleaned.xlsx) unless the user says overwrite. - Preserve formulas unless asked to flatten. Loading with
data_only=Trueflattens — useFalsewhen round-tripping. - Date columns are landmines. Excel and pandas disagree about dates frequently. Always confirm the date format after a transformation.
- CSV encoding matters. Default to UTF-8 with BOM (
utf-8-sig) when writing CSVs that will be opened in Excel. - Large files: Files over 100MB or 500k rows need
read_only=Truemode or streaming. Don't load the whole workbook into memory. - Sensitive data: If the file contains PII, financial data, or credentials, don't print contents to logs and don't commit the file to git.
- Charts: Add them with
openpyxl.chart— but they often need manual layout tuning in Excel after.
Files bundled with it
These load only when the skill asks for them, so they cost nothing until it runs.
Need help setting it up?
This page tells you what xlsx does and what it needs. Cheetah builds the agent setup it runs inside: data, CRM, sequencing and the guardrails.
Book a call →The directory stays free. There is nothing gated behind this.