excel-spreadsheets/SKILL.md
Generate world-class, professionally designed Microsoft Excel spreadsheets and handle all Excel/spreadsheet workflows. Use when: generating .xlsx files from apps or scripts (openpyxl, xlsxwriter, PhpSpreadsheet, pandas), importing or parsing...
npx skillsauth add peterbamuhigire/skills-web-dev excel-spreadsheetsInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
excel-spreadsheets or would be better handled by a more specific companion skill.references only as needed.SKILL.md first, then load only the referenced deep-dive files that are necessary for the task.references/ directory for deep detail after reading the core workflow below.Excel done right looks like a financial analyst and a graphic designer collaborated on it. Done wrong, it's a wall of unformatted data nobody trusts. This skill covers both the code that generates Excel files and the design standards that make them world-class.
Reference files (read when needed):
references/design-standards.md — layout, colour palettes, typography, table structure, conditional formatting, print setupreferences/formulas-functions.md — XLOOKUP, dynamic arrays, LET, LAMBDA, SUMIFS, MAXIFS/MINIFS, essential formula patternsreferences/programmatic-generation.md — openpyxl, xlsxwriter, PhpSpreadsheet, pandas — code patterns for generating professional Excel from appsreferences/charts-pivot.md — chart types, professional chart formatting, PivotTables, slicers, dashboardsreferences/financial-modeling.md — PMT, PV, FV, NPV, IRR; Goal Seek, Data Tables, Scenario Manager, Solver; modeling golden rules; formula debuggingreferences/python-automation.md — Excel–Python–Excel workflow, advanced read_excel(), 6-step export, pivot_table/merge/crosstab, email automation, =PY() function, xlwingsreferences/vba-macros.md — recording/running macros, VBA golden rules, common patterns, keyboard shortcuts referencereferences/quality-checklist.md — pre-delivery checklistSources: Microsoft Excel 365 Bible (Walkenbach/Alexander); Microsoft Excel Bible 2026; Ultimate Excel Formula & Function Reference Guide; Excel 2025 All-in-One; Excel 2019 Advanced Topics (George); Advanced Excel for Productivity (Urban); Automate Excel with Python (Wengler, 2026); Python in Excel Advanced (Van Der Post)
Every spreadsheet produced must pass: a data analyst and a designer would both be satisfied. Specifically:
Convert every data range to an Excel Table (Ctrl+T) immediately. Tables give you:
=Table1[Amount] instead of =$C$2:$C$100Programmatic: In openpyxl, xlsxwriter, and PhpSpreadsheet, always add a Table (ListObject) definition over data ranges. See references/programmatic-generation.md.
Never mix multiple unrelated datasets on one sheet. Use separate sheets with clear names. Sheet names: PascalCase or Title Case, max 20 characters, no spaces (use underscores if needed).
Merged cells break sorting, filtering, PivotTables, and programmatic reading. For visual centering of headers, use Center Across Selection instead (Format Cells → Alignment → Horizontal: Center Across Selection).
Read references/design-standards.md for full colour palettes and formatting specs.
Standard table anatomy:
Row 1: Sheet title / document header ← merged+centred, large font, brand colour
Row 2: Subtitle / date / filter info ← smaller, grey
Row 3: [blank spacer row]
Row 4: Table header row ← Excel Table header (bold, brand fill, white text)
Row 5+: Data rows ← banded, 11pt, left/right aligned by type
Last: Totals row ← bold, top border, SUM/AVERAGE via Table totals row
Column alignment rules:
| Data type | Format code | Example output |
|---|---|---|
| Currency (UGX/KES/TZS) | #,##0 | 1,250,000 |
| Currency with decimals | #,##0.00 | 1,250,000.00 |
| USD | "$"#,##0.00 | $1,250.00 |
| Percentage | 0.00% | 12.50% |
| Percentage (whole) | 0% | 13% |
| Date (display) | DD MMM YYYY | 05 Apr 2026 |
| Date (ISO sort) | YYYY-MM-DD | 2026-04-05 |
| Large numbers | #,##0.0,,"M" | 1.3M |
| Negative red | #,##0.00;[Red]-#,##0.00 | -500.00 (red) |
| Integer | #,##0 | 42,000 |
| Duration (hours) | [h]:mm | 37:30 |
Custom format anatomy: positive;negative;zero;text
Read references/formulas-functions.md for full formula patterns. Core rules:
Use structured references in Tables:
=SUMIFS(Sales[Amount], Sales[Region], [@Region], Sales[Status], "Paid")
XLOOKUP over VLOOKUP always:
=XLOOKUP([@ID], Products[ID], Products[Price], "Not found", 0)
Dynamic arrays for reports:
=FILTER(Sales[#All], (Sales[Region]="East")*(Sales[Month]=B2))
=SORT(UNIQUE(Sales[Category]))
=SEQUENCE(12, 1, DATE(2026,1,1), 30) ← 12 monthly dates
LET for complex formulas (readability + performance):
=LET(
data, FILTER(Sales[Amount], Sales[Status]="Paid"),
avg, AVERAGE(data),
IF(avg>100000, "Above target", "Below target")
)
Every user-input column must have data validation. Never let free-form text corrupt a data column.
Dropdown from a Table column:
=INDIRECT("Table1[Category]") or a named rangeDate range validation:
=TODAY()-365, =TODAY()+365Whole number range:
Apply to entire Table columns, not fixed ranges (so it auto-expands with the Table).
Standard patterns:
=[@Status]="Paid" → green; =[@Status]="Overdue" → red=COUNTIF(Table1[Email],[@Email])>1 → orange fillRead references/design-standards.md → Professional Finishing section.
Freeze panes: Always freeze the header row (and optionally the first column for wide tables). View → Freeze Panes → Freeze Top Row.
Print setup (every sheet intended for printing):
Workbook hygiene:
Read references/programmatic-generation.md for full code patterns per language/library.
Library selection:
| Use case | Library | Language | |---|---|---| | Full formatting + charts | openpyxl | Python | | Large data, max performance | xlsxwriter | Python | | PHP apps | PhpSpreadsheet | PHP | | Data analysis output | pandas + openpyxl | Python | | Node.js apps | exceljs | JavaScript |
Non-negotiable programmatic rules:
Table (add_table / addTableStyleInfo) over data — never just write raw rowsWhen reading Excel files in applications:
Always:
header=0 (first row is headers) unless the file has multi-row headersNever:
Python pattern:
import pandas as pd
df = pd.read_excel("file.xlsx", sheet_name="Sales", header=0)
df.columns = df.columns.str.strip() # remove whitespace from headers
df["Date"] = pd.to_datetime(df["Date"], dayfirst=True)
df["Amount"] = pd.to_numeric(df["Amount"], errors="coerce")
df = df.dropna(subset=["ID"]) # drop rows with no ID
Read references/financial-modeling.md for full formulas, examples, and What-If tools.
| Function | Use case | Key rule |
|---|---|---|
| =PMT(rate, nper, pv) | Monthly loan/mortgage payment | Rate and nper must match time unit (÷12 for monthly) |
| =PV(rate, nper, pmt) | Present value of an annuity | Cash inflows = positive, outflows = negative |
| =FV(rate, nper, pmt) | Future value of savings/investment | pmt is negative (cash going out) |
| =NPV(rate, cashflows) | Net present value | Add period-0 investment separately outside NPV() |
| =IRR(cashflows) | Internal rate of return | First value should be negative (initial outlay) |
What-If tools:
Read references/vba-macros.md for full VBA patterns and keyboard shortcuts.
Record a macro: View → Macros → Record Macro (or status bar button bottom-left)
Run a macro: Alt+F8 or assigned shortcut key
Edit a macro: Alt+F11 opens the VBA editor
Critical shortcuts:
Ctrl+Arrow — jump to end of data rangeF2 — edit mode with colour-coded cell referencesF4 — toggle $A$1 → A$1 → $A1 → A1 (absolute/relative)Ctrl+Shift+Enter — legacy array formula (prefer dynamic arrays)Alt+H+O+I — auto-fit column width| What to change | Where |
|---|---|
| Table colour palette | references/design-standards.md → Colour Palettes |
| Formula patterns | references/formulas-functions.md |
| openpyxl/xlsxwriter code | references/programmatic-generation.md |
| Chart types and formatting | references/charts-pivot.md |
| Financial functions & What-If | references/financial-modeling.md |
| Python automation & =PY() | references/python-automation.md |
| VBA macros & keyboard shortcuts | references/vba-macros.md |
| Pre-delivery checks | references/quality-checklist.md |
data-ai
Use when adding AI-powered analytics to a SaaS platform — semantic search over business data, natural language queries, trend detection, anomaly alerts, and AI-generated insights for dashboards. Covers embeddings, NL2SQL, and per-tenant analytics...
data-ai
Design AI-powered analytics dashboards — what metrics to show, how to display AI predictions and confidence, drill-down patterns, KPI cards, trend visualisation, AI Insights panels, export design, and role-based dashboard variants. Invoke when...
development
Use when designing, building, reviewing, or upgrading production software systems that must be secure, performant, maintainable, scalable, and user-centered. Apply before writing specs, code, architecture, APIs, databases, mobile apps, SaaS platforms, or ERP systems.
development
Professional web app UI using commercial templates (Tabler/Bootstrap 5) with strong frontend design direction when needed. Use for CRUD interfaces, dashboards, admin panels with SweetAlert2, DataTables, Flatpickr. Clone seeder-page.php, use...