| name | xlsx |
| description | Spreadsheet creation guidance for Doable's spreadsheet-builder MCP App. Adapted from the Anthropic xlsx skill โ focuses on real data, hierarchical column structure, formulas (never hardcoded sums), and standards-compliant Office Open XML output via exceljs. |
Spreadsheet design guide
Adapted for Doable's spreadsheet-builder MCP App. The actual file
is rendered server-side with exceljs.
Hard requirements
Use formulas, never hardcoded calculations
- Totals:
=SUM(B2:B10) โ never compute the number yourself.
- Percent share:
=B2/$B$11 โ anchor the denominator with $.
- Growth:
=(C2-B2)/B2.
- Lookups:
=VLOOKUP(A2, Assumptions!A:B, 2, FALSE) โ split data and assumptions
into separate sheets when relevant.
Zero formula errors
- No
#REF!, #DIV/0!, #VALUE!, #NAME?, #N/A.
- Verify: sums match a manual spot-check, ranges include all data rows,
no division by an unset cell.
Real data, not placeholders
- Real names, real numbers, real categories.
- 8โ40 rows is the sweet spot. Don't pad with
"Item 5", "Item 6".
Color/format conventions
When the topic is a financial model, default to:
| Role | Convention |
|---|
| Hardcoded inputs | Plain numbers (engine renders blue is optional) |
| Formulas | Plain numbers (engine renders black) |
| Currency | format: "currency" โ renders $#,##0.00 |
| Percent | format: "percent" โ 0.18 in the cell renders as 18.0% |
| Years | format: "text" โ keeps 2024 from being treated as a number |
| Dates | format: "date" โ ISO string in cell, renders yyyy-mm-dd |
The engine handles a styled header row (dark fill, white bold text)
and zebra-striped data rows automatically โ no need to specify per cell.
Choosing a kind
| kind | When to use | Typical structure |
|---|
data | Pure tabular dataset, no totals | Header + rows |
budget | Financial plan / costs | Categories ร periods + totals row + variance |
tracker | TODO / project tracker | Item, owner, status, due, priority, notes |
schedule | Calendar / agenda | Date, time, attendees, topic, duration |
report | KPI dashboard + detail | Summary sheet + per-section sheets |
comparison | Decision matrix | Options ร criteria + score + total |
Structure rules
- ONE topic per sheet. Use multiple sheets when the data is genuinely
multi-faceted (Inputs, Calculations, Outputs).
- Sheet 1 = the most important / summary view.
- Add a separate
Assumptions sheet for inputs that drive multiple
formulas โ let users tweak a single cell to flow through everything.
- Always set
freezeHeader: true so the header row sticks while
scrolling.
- Set sensible column widths: 10โ14 for numbers, 18โ28 for free text,
30+ for note/description fields.
What NOT to do
- โ Sum in JavaScript and put the number in the cell. Use
=SUM(...).
- โ Use
'2024 or other text tricks for years โ set format: "text" on the column.
- โ Use percent string
"18%" โ put 0.18 in the cell with format: "percent".
- โ Mix numbers and strings in the same numeric column.
- โ Create one giant sheet when 2โ3 cleanly separated sheets would
read better.
- โ Use sheet names with
[ ] : * ? / \ โ the engine strips them but
it indicates poor naming.