Excel Spreadsheets Skill
Acknowledgement: Shared by Peter Bamuhigire, techguypeter.com, +256 784 464178.
Required Inputs
| Input |
Required |
Use |
| Decision, audience, and deliverable |
yes |
Bound the business outcome |
| Source evidence, constraints, and owner |
yes |
Ground recommendations and accountability |
| Approved budget, customer data, or production artefacts |
conditional |
Support high-impact execution |
Capability and permission contract
Default to read-only analysis and drafting. Do not publish, send, price, promise, alter customer records, commit budget, or modify production artefacts without explicit authority and a named approver. Minimise confidential data, preserve provenance, and keep reversible copies.
Degraded mode
If evidence, stakeholder decisions, specialist tooling, or authoritative commercial data are unavailable, deliver a labelled draft, checklist, or decision memo. State what was not verified and do not claim approval, publication, financial accuracy, or customer acceptance.
Decision rules
| Condition |
Action |
Stop condition |
| Output creates a commercial, customer, or delivery commitment |
Obtain named approval before release |
Authority or terms are unclear |
| Evidence supports a reversible draft |
Produce it with assumptions and owner |
Required evidence conflicts |
| Tooling or data is incomplete |
Specify validation |
A final executable artefact is expected |
Domain Anti-Patterns
- Inventing customer evidence, prices, benchmarks, or approvals. Fix: cite the source or mark the gap.
- Publishing or sending a draft without authority. Fix: retain draft status and name the approver.
- Hiding assumptions inside polished prose. Fix: expose them beside each affected decision.
- Polishing presentation while the decision remains unclear. Fix: resolve audience, owner, and acceptance criteria.
- Treating unavailable tooling as passed validation. Fix: record the unassessed check.
Use When
- 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...
Evidence Produced
| Category |
Artifact |
Format |
Example |
| Release evidence |
Generated Excel workbook |
Branded .xlsx artefact compliant with the excel-spreadsheets design standard |
docs/output/dashboard-2026-04-16.xlsx |
References
- Use the
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 setup
references/formulas-functions.md — XLOOKUP, dynamic arrays, LET, LAMBDA, SUMIFS, MAXIFS/MINIFS, essential formula patterns
references/programmatic-generation.md — openpyxl, xlsxwriter, PhpSpreadsheet, pandas — code patterns for generating professional Excel from apps
references/charts-pivot.md — chart types, professional chart formatting, PivotTables, slicers, dashboards
references/financial-modeling.md — PMT, PV, FV, NPV, IRR; Goal Seek, Data Tables, Scenario Manager, Solver; modeling golden rules; formula debugging
references/finance-accounting-workbooks.md — bookkeeping ledgers, trial balance, AR/AP aging, bank reconciliation, fixed assets, budgets, cost accounting, statement checks, and finance dashboards
references/python-automation.md — Excel–Python–Excel workflow, advanced read_excel(), 6-step export, pivot_table/merge/crosstab, email automation, =PY() function, xlwings
references/vba-macros.md — recording/running macros, VBA golden rules, common patterns, keyboard shortcuts reference
references/quality-checklist.md — pre-delivery checklist
Sources: 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)
The Standard
Every spreadsheet produced must pass: a data analyst and a designer would both be satisfied. Specifically:
- Data lives in a properly structured Excel Table — never raw ranges
- Every number has an intentional format (currency, %, dates — never General)
- Visual hierarchy is clear: header rows are distinct, data rows are readable
- Formulas are correct, efficient, and use structured references where possible
- The file opens correctly on any machine, in any regional locale
Core Architecture Rules
Rule 1 — Always use Excel Tables
Convert every data range to an Excel Table (Ctrl+T) immediately. Tables give you:
- Structured references:
=Table1[Amount] instead of =$C$2:$C$100
- Auto-expansion when new rows are added
- Built-in filter arrows
- Automatic banded rows
- Named reference for programmatic access
Programmatic: In openpyxl, xlsxwriter, and PhpSpreadsheet, always add a Table (ListObject) definition over data ranges. See references/programmatic-generation.md.
Rule 2 — One table per sheet, one topic per sheet
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).
Rule 3 — Separate data from presentation
- Data sheets — raw data in Tables, no decorative formatting, no merged cells
- Report/Dashboard sheets — formulas pulling from data sheets, full formatting treatment
- Configuration sheets (hidden) — lookup lists, parameters, constants
Rule 4 — Never merge cells in data ranges
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).
Excel Table Design
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:
- Text columns → left-aligned
- Number/currency columns → right-aligned
- Date columns → right-aligned or centred
- Status/category columns → centred
- Header row → match column alignment (not always centred)
Number Formats (critical — never leave as General)
| 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
Essential Formulas
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)
The last example generates dates 30 days apart, not calendar-month dates.
For monthly schedules, use a calendar-aware formula and verify February,
month-end and year-boundary results in the target spreadsheet application.
LET for complex formulas (readability + performance):
=LET(
data, FILTER(Sales[Amount], Sales[Status]="Paid"),
avg, AVERAGE(data),
IF(avg>100000, "Above target", "Below target")
)
Data Validation
Every user-input column must have data validation. Never let free-form text corrupt a data column.
Dropdown from a Table column:
- Source:
=INDIRECT("Table1[Category]") or a named range
- Input message: "Select a category from the list"
- Error alert: Stop — "Invalid entry. Please select from the list."
Date range validation:
- Allow: Date, Between,
=TODAY()-365, =TODAY()+365
Whole number range:
- Allow: Whole number, Between, 0, 1000000
Conditional Formatting
Apply to entire Table columns, not fixed ranges (so it auto-expands with the Table).
Standard patterns:
- Heat map (numeric): 3-colour scale, low=white, mid=yellow, high=brand colour
- Above/below average: Green fill for above, red fill for below
- Status column: Formula-based —
=[@Status]="Paid" → green; =[@Status]="Overdue" → red
- Data bars: For ranking/comparison columns — no border, solid fill, brand colour
- Duplicate detection:
=COUNTIF(Table1[Email],[@Email])>1 → orange fill
Professional Finishing
Read 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):
- Page Layout → Page Setup:
- Orientation: Landscape for wide tables
- Scale to fit: 1 page wide, auto tall
- Print titles: Row 1 (and Table header row) to repeat on every page
- Margins: Narrow (0.64 cm) for data tables; Normal for reports
- Header: Document name left, date centre, page number right
- Footer: "Page &P of &N" centred, confidential notice if needed
Workbook hygiene:
- Delete all unused sheets (Sheet1, Sheet2, Sheet3)
- Name every sheet clearly
- Set the first sheet as the active sheet on open
- Remove all #REF!, #VALUE!, #NAME? errors before delivery
Programmatic Generation
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:
- Always define a
Table (add_table / addTableStyleInfo) over data — never just write raw rows
- Always set column widths — auto-width from content, with min 8 and max 60 characters
- Always apply number formats to numeric columns — never leave as default
- Always freeze the header row
- Always set a tab colour per sheet for multi-sheet workbooks
- Always use a professional table style (TableStyleMedium2 or equivalent)
Import / Parsing Patterns
When reading Excel files in applications:
Always:
- Read with
header=0 (first row is headers) unless the file has multi-row headers
- Strip whitespace from string columns after reading
- Validate expected columns exist before processing — fail early with clear error messages
- Parse date columns explicitly (don't rely on auto-detection)
- Handle merged header cells by forward-filling merged values
Never:
- Assume column order — always reference by column name, not index
- Assume data starts at row 1 — check for title rows above the table
- Trust data types — validate and coerce explicitly
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
Financial Functions Quick Reference
Read references/financial-modeling.md for full formulas, examples, and What-If tools. Read references/finance-accounting-workbooks.md when the workbook is a ledger, trial balance, aging report, reconciliation, financial model, budget, forecast, cost model, or finance dashboard.
| 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:
- Goal Seek — find the input that achieves a target output (Data → What-If Analysis → Goal Seek)
- Scenario Manager — store and compare named sets of input values (Base/Optimistic/Pessimistic)
- Data Tables — calculate output across a range of input values (1-variable or 2-variable)
- Solver — optimise across multiple variables with constraints (requires Solver add-in)
VBA Macros
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 range
F2 — edit mode with colour-coded cell references
F4 — 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
Customisation Quick Reference
| 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 |
| Finance/accounting workbooks |
references/finance-accounting-workbooks.md |
| Python automation & =PY() |
references/python-automation.md |
| VBA macros & keyboard shortcuts |
references/vba-macros.md |
| Pre-delivery checks |
references/quality-checklist.md |
Quality Standards
Workbook acceptance requires formula, source, error-state, protection, accessibility, and rendered-layout checks at the intended application boundary.
Outputs
| Artefact |
Consumer |
Acceptance condition |
| Validated workbook and QA note |
Analyst or operational owner |
Formulas recalculate, source ranges are traceable, error states are handled, and visual checks cover the intended spreadsheet application |
1---2name: excel-spreadsheets3description: Use when generating or validating professional Excel workbooks, formulas, imports, charts, formatting, macros, or spreadsheet deliverables.4---56# Excel Spreadsheets Skill7Acknowledgement: Shared by Peter Bamuhigire, techguypeter.com, +256 784 464178.8910## Required Inputs1112| Input | Required | Use |13|---|---|---|14| Decision, audience, and deliverable | yes | Bound the business outcome |15| Source evidence, constraints, and owner | yes | Ground recommendations and accountability |16| Approved budget, customer data, or production artefacts | conditional | Support high-impact execution |1718## Capability and permission contract1920Default to read-only analysis and drafting. Do not publish, send, price, promise, alter customer records, commit budget, or modify production artefacts without explicit authority and a named approver. Minimise confidential data, preserve provenance, and keep reversible copies.2122## Degraded mode2324If evidence, stakeholder decisions, specialist tooling, or authoritative commercial data are unavailable, deliver a labelled draft, checklist, or decision memo. State what was not verified and do not claim approval, publication, financial accuracy, or customer acceptance.2526## Decision rules2728| Condition | Action | Stop condition |29|---|---|---|30| Output creates a commercial, customer, or delivery commitment | Obtain named approval before release | Authority or terms are unclear |31| Evidence supports a reversible draft | Produce it with assumptions and owner | Required evidence conflicts |32| Tooling or data is incomplete | Specify validation | A final executable artefact is expected |3334## Domain Anti-Patterns3536- Inventing customer evidence, prices, benchmarks, or approvals. Fix: cite the source or mark the gap.37- Publishing or sending a draft without authority. Fix: retain draft status and name the approver.38- Hiding assumptions inside polished prose. Fix: expose them beside each affected decision.39- Polishing presentation while the decision remains unclear. Fix: resolve audience, owner, and acceptance criteria.40- Treating unavailable tooling as passed validation. Fix: record the unassessed check.414243<!-- dual-compat-start -->44## Use When4546- 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...4748## Evidence Produced4950| Category | Artifact | Format | Example |51|----------|----------|--------|---------|52| Release evidence | Generated Excel workbook | Branded .xlsx artefact compliant with the excel-spreadsheets design standard | `docs/output/dashboard-2026-04-16.xlsx` |5354## References5556- Use the `references/` directory for deep detail after reading the core workflow below.57<!-- dual-compat-end -->58Excel 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.5960**Reference files (read when needed):**61- `references/design-standards.md` — layout, colour palettes, typography, table structure, conditional formatting, print setup62- `references/formulas-functions.md` — XLOOKUP, dynamic arrays, LET, LAMBDA, SUMIFS, MAXIFS/MINIFS, essential formula patterns63- `references/programmatic-generation.md` — openpyxl, xlsxwriter, PhpSpreadsheet, pandas — code patterns for generating professional Excel from apps64- `references/charts-pivot.md` — chart types, professional chart formatting, PivotTables, slicers, dashboards65- `references/financial-modeling.md` — PMT, PV, FV, NPV, IRR; Goal Seek, Data Tables, Scenario Manager, Solver; modeling golden rules; formula debugging66- `references/finance-accounting-workbooks.md` — bookkeeping ledgers, trial balance, AR/AP aging, bank reconciliation, fixed assets, budgets, cost accounting, statement checks, and finance dashboards67- `references/python-automation.md` — Excel–Python–Excel workflow, advanced read_excel(), 6-step export, pivot_table/merge/crosstab, email automation, =PY() function, xlwings68- `references/vba-macros.md` — recording/running macros, VBA golden rules, common patterns, keyboard shortcuts reference69- `references/quality-checklist.md` — pre-delivery checklist7071*Sources: 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)*7273---7475## The Standard7677Every spreadsheet produced must pass: **a data analyst and a designer would both be satisfied.** Specifically:78791. Data lives in a properly structured **Excel Table** — never raw ranges802. Every number has an intentional format (currency, %, dates — never General)813. Visual hierarchy is clear: header rows are distinct, data rows are readable824. Formulas are correct, efficient, and use structured references where possible835. The file opens correctly on any machine, in any regional locale8485---8687## Core Architecture Rules8889### Rule 1 — Always use Excel Tables9091Convert every data range to an Excel Table (`Ctrl+T`) immediately. Tables give you:92- Structured references: `=Table1[Amount]` instead of `=$C$2:$C$100`93- Auto-expansion when new rows are added94- Built-in filter arrows95- Automatic banded rows96- Named reference for programmatic access9798**Programmatic:** In openpyxl, xlsxwriter, and PhpSpreadsheet, always add a `Table` (ListObject) definition over data ranges. See `references/programmatic-generation.md`.99100### Rule 2 — One table per sheet, one topic per sheet101102Never 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).103104### Rule 3 — Separate data from presentation105106- **Data sheets** — raw data in Tables, no decorative formatting, no merged cells107- **Report/Dashboard sheets** — formulas pulling from data sheets, full formatting treatment108- **Configuration sheets** (hidden) — lookup lists, parameters, constants109110### Rule 4 — Never merge cells in data ranges111112Merged 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).113114---115116## Excel Table Design117118Read `references/design-standards.md` for full colour palettes and formatting specs.119120**Standard table anatomy:**121122```123Row 1: Sheet title / document header ← merged+centred, large font, brand colour124Row 2: Subtitle / date / filter info ← smaller, grey125Row 3: [blank spacer row]126Row 4: Table header row ← Excel Table header (bold, brand fill, white text)127Row 5+: Data rows ← banded, 11pt, left/right aligned by type128Last: Totals row ← bold, top border, SUM/AVERAGE via Table totals row129```130131**Column alignment rules:**132- Text columns → left-aligned133- Number/currency columns → right-aligned134- Date columns → right-aligned or centred135- Status/category columns → centred136- Header row → match column alignment (not always centred)137138---139140## Number Formats (critical — never leave as General)141142| Data type | Format code | Example output |143|---|---|---|144| Currency (UGX/KES/TZS) | `#,##0` | 1,250,000 |145| Currency with decimals | `#,##0.00` | 1,250,000.00 |146| USD | `"$"#,##0.00` | $1,250.00 |147| Percentage | `0.00%` | 12.50% |148| Percentage (whole) | `0%` | 13% |149| Date (display) | `DD MMM YYYY` | 05 Apr 2026 |150| Date (ISO sort) | `YYYY-MM-DD` | 2026-04-05 |151| Large numbers | `#,##0.0,,"M"` | 1.3M |152| Negative red | `#,##0.00;[Red]-#,##0.00` | -500.00 (red) |153| Integer | `#,##0` | 42,000 |154| Duration (hours) | `[h]:mm` | 37:30 |155156**Custom format anatomy:** `positive;negative;zero;text`157158---159160## Essential Formulas161162Read `references/formulas-functions.md` for full formula patterns. Core rules:163164**Use structured references in Tables:**165```excel166=SUMIFS(Sales[Amount], Sales[Region], [@Region], Sales[Status], "Paid")167```168169**XLOOKUP over VLOOKUP always:**170```excel171=XLOOKUP([@ID], Products[ID], Products[Price], "Not found", 0)172```173174**Dynamic arrays for reports:**175```excel176=FILTER(Sales[#All], (Sales[Region]="East")*(Sales[Month]=B2))177=SORT(UNIQUE(Sales[Category]))178=SEQUENCE(12, 1, DATE(2026,1,1), 30)179```180181The last example generates dates 30 days apart, not calendar-month dates.182For monthly schedules, use a calendar-aware formula and verify February,183month-end and year-boundary results in the target spreadsheet application.184185**LET for complex formulas (readability + performance):**186```excel187=LET(188 data, FILTER(Sales[Amount], Sales[Status]="Paid"),189 avg, AVERAGE(data),190 IF(avg>100000, "Above target", "Below target")191)192```193194---195196## Data Validation197198Every user-input column must have data validation. Never let free-form text corrupt a data column.199200**Dropdown from a Table column:**201- Source: `=INDIRECT("Table1[Category]")` or a named range202- Input message: "Select a category from the list"203- Error alert: Stop — "Invalid entry. Please select from the list."204205**Date range validation:**206- Allow: Date, Between, `=TODAY()-365`, `=TODAY()+365`207208**Whole number range:**209- Allow: Whole number, Between, 0, 1000000210211---212213## Conditional Formatting214215Apply to entire Table columns, not fixed ranges (so it auto-expands with the Table).216217**Standard patterns:**218- **Heat map (numeric):** 3-colour scale, low=white, mid=yellow, high=brand colour219- **Above/below average:** Green fill for above, red fill for below220- **Status column:** Formula-based — `=[@Status]="Paid"` → green; `=[@Status]="Overdue"` → red221- **Data bars:** For ranking/comparison columns — no border, solid fill, brand colour222- **Duplicate detection:** `=COUNTIF(Table1[Email],[@Email])>1` → orange fill223224---225226## Professional Finishing227228Read `references/design-standards.md` → Professional Finishing section.229230**Freeze panes:** Always freeze the header row (and optionally the first column for wide tables). View → Freeze Panes → Freeze Top Row.231232**Print setup (every sheet intended for printing):**233- Page Layout → Page Setup:234 - Orientation: Landscape for wide tables235 - Scale to fit: 1 page wide, auto tall236 - Print titles: Row 1 (and Table header row) to repeat on every page237 - Margins: Narrow (0.64 cm) for data tables; Normal for reports238 - Header: Document name left, date centre, page number right239 - Footer: "Page &P of &N" centred, confidential notice if needed240241**Workbook hygiene:**242- Delete all unused sheets (Sheet1, Sheet2, Sheet3)243- Name every sheet clearly244- Set the first sheet as the active sheet on open245- Remove all #REF!, #VALUE!, #NAME? errors before delivery246247---248249## Programmatic Generation250251Read `references/programmatic-generation.md` for full code patterns per language/library.252253**Library selection:**254255| Use case | Library | Language |256|---|---|---|257| Full formatting + charts | openpyxl | Python |258| Large data, max performance | xlsxwriter | Python |259| PHP apps | PhpSpreadsheet | PHP |260| Data analysis output | pandas + openpyxl | Python |261| Node.js apps | exceljs | JavaScript |262263**Non-negotiable programmatic rules:**2641. Always define a `Table` (add_table / addTableStyleInfo) over data — never just write raw rows2652. Always set column widths — auto-width from content, with min 8 and max 60 characters2663. Always apply number formats to numeric columns — never leave as default2674. Always freeze the header row2685. Always set a tab colour per sheet for multi-sheet workbooks2696. Always use a professional table style (TableStyleMedium2 or equivalent)270271---272273## Import / Parsing Patterns274275When reading Excel files in applications:276277**Always:**278- Read with `header=0` (first row is headers) unless the file has multi-row headers279- Strip whitespace from string columns after reading280- Validate expected columns exist before processing — fail early with clear error messages281- Parse date columns explicitly (don't rely on auto-detection)282- Handle merged header cells by forward-filling merged values283284**Never:**285- Assume column order — always reference by column name, not index286- Assume data starts at row 1 — check for title rows above the table287- Trust data types — validate and coerce explicitly288289**Python pattern:**290```python291import pandas as pd292293df = pd.read_excel("file.xlsx", sheet_name="Sales", header=0)294df.columns = df.columns.str.strip() # remove whitespace from headers295df["Date"] = pd.to_datetime(df["Date"], dayfirst=True)296df["Amount"] = pd.to_numeric(df["Amount"], errors="coerce")297df = df.dropna(subset=["ID"]) # drop rows with no ID298```299300---301302## Financial Functions Quick Reference303304Read `references/financial-modeling.md` for full formulas, examples, and What-If tools. Read `references/finance-accounting-workbooks.md` when the workbook is a ledger, trial balance, aging report, reconciliation, financial model, budget, forecast, cost model, or finance dashboard.305306| Function | Use case | Key rule |307|---|---|---|308| `=PMT(rate, nper, pv)` | Monthly loan/mortgage payment | Rate and nper must match time unit (÷12 for monthly) |309| `=PV(rate, nper, pmt)` | Present value of an annuity | Cash inflows = positive, outflows = negative |310| `=FV(rate, nper, pmt)` | Future value of savings/investment | pmt is negative (cash going out) |311| `=NPV(rate, cashflows)` | Net present value | Add period-0 investment separately outside NPV() |312| `=IRR(cashflows)` | Internal rate of return | First value should be negative (initial outlay) |313314**What-If tools:**315- **Goal Seek** — find the input that achieves a target output (Data → What-If Analysis → Goal Seek)316- **Scenario Manager** — store and compare named sets of input values (Base/Optimistic/Pessimistic)317- **Data Tables** — calculate output across a range of input values (1-variable or 2-variable)318- **Solver** — optimise across multiple variables with constraints (requires Solver add-in)319320---321322## VBA Macros323324Read `references/vba-macros.md` for full VBA patterns and keyboard shortcuts.325326**Record a macro:** View → Macros → Record Macro (or status bar button bottom-left)327**Run a macro:** `Alt+F8` or assigned shortcut key328**Edit a macro:** `Alt+F11` opens the VBA editor329330**Critical shortcuts:**331- `Ctrl+Arrow` — jump to end of data range332- `F2` — edit mode with colour-coded cell references333- `F4` — toggle `$A$1` → `A$1` → `$A1` → `A1` (absolute/relative)334- `Ctrl+Shift+Enter` — legacy array formula (prefer dynamic arrays)335- `Alt+H+O+I` — auto-fit column width336337---338339## Customisation Quick Reference340341| What to change | Where |342|---|---|343| Table colour palette | `references/design-standards.md` → Colour Palettes |344| Formula patterns | `references/formulas-functions.md` |345| openpyxl/xlsxwriter code | `references/programmatic-generation.md` |346| Chart types and formatting | `references/charts-pivot.md` |347| Financial functions & What-If | `references/financial-modeling.md` |348| Finance/accounting workbooks | `references/finance-accounting-workbooks.md` |349| Python automation & =PY() | `references/python-automation.md` |350| VBA macros & keyboard shortcuts | `references/vba-macros.md` |351| Pre-delivery checks | `references/quality-checklist.md` |352## Quality Standards353354Workbook acceptance requires formula, source, error-state, protection, accessibility, and rendered-layout checks at the intended application boundary.355356## Outputs357358| Artefact | Consumer | Acceptance condition |359|---|---|---|360| Validated workbook and QA note | Analyst or operational owner | Formulas recalculate, source ranges are traceable, error states are handled, and visual checks cover the intended spreadsheet application |