Sheet create
Skill NovateStudioGit/novate-studio-skills/knowledge-ops/sheet-create
Build a working native Google Sheet from a structured spec — formulas evaluate live, no Copy-to dance. Uses CSV→Drive auto-convert (the only reliable path; XLSX/Apps Script/Composio all fail in subtle ways). Triggered by `/sheet-create` or natural language like "build me a sheet for X", "make a Google Sheet that does Y", "create a planner/tracker/calculator sheet", "spin up a sheet with these formulas". NOT `/make-pdf` (markdown→PDF), NOT `/json-canvas` (Obsidian Canvas), NOT `/notion-tracker` (Notion-side trackers).From its SKILL.md
npx -y skills add NovateStudioGit/novate-studio-skills --skill sheet-createAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
One thing to look at
- 0 stars0 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
SKILL.md
5.4 KB, ~1.3k tokens by cl100k_base, as published. Nobody here has run it
/sheet-create — build a working Google Sheet from a spec
A Sheet-as-deliverable workflow that doesn't waste 3 hours on broken delivery paths. Engine: scripts/sheet_create.py (stdlib only) emits a CSV with formula text, then uploads it to Drive via the Drive MCP with contentMimeType: "text/csv". Drive auto-converts CSV uploads to a native Google Sheet at conversion time, and formulas evaluate at that conversion — so a =ROUND(C10*C11,0) in the CSV is a live, computing formula in the resulting Sheet.
The iron rule (why this skill exists)
Only one delivery path works. Four others were tried 2026-05-30 and all failed in subtle ways:
| Path | Why it fails |
|---|---|
openpyxl-built .xlsx | Writes formula expressions without cached values; Sheets viewer doesn't auto-recalc on open → cells appear blank |
Composio googlesheets connector | Auth UI flaky on their side |
| Apps Script | OAuth-gated, editor errored for Will |
| Cross-file Cmd+C/V from a working sheet | Drops formulas / breaks refs on cross-spreadsheet paste |
The working path: Python emits CSV (with formula text properly quoted) → Drive MCP create_file with contentMimeType: "text/csv" → Drive auto-converts to a native Google Sheet → formulas live.
When to use
Will wants a working Google Sheet deliverable from a structured spec — planners, financial models, calendars, dashboards, COGS trackers, channel-mix calculators, ops sheets — anything where formulas must compute live and the spec is mechanizable.
Hard-won mechanics baked into the script
- CSV formula escaping — formulas with commas (
INDEX/MATCH,ROUND(x,0),IF(...)) MUST be CSV-quoted or they split across cells. Script usescsv.writerwithQUOTE_MINIMAL, which quotes any field containing a comma. - Single tab + in-tab refs only — no cross-tab
Assumptions!E6refs (they break under Copy-to / tab-reorder). Lay out inputs/outputs in cols A–C and assumptions in cols E–I of the same tab. The spec is a flat{cell: value_or_formula}dict — one tab by design. - CSV preserves no formatting — currency, percent, fills, dropdowns, conditional formatting, column widths, merges. None of it. The script EMITS a follow-up checklist (
format_notesfrom the spec) for the post-upload manual touches. - Numeric vs string vs formula — formulas start with
=(stay as-is). Numbers stay numeric. Strings are written verbatim and CSV-quoted if they contain commas/quotes/newlines. - Sparse grid — spec only lists populated cells; the script fills in the gaps with blank cells out to
max(row, col).
How to invoke
Conversational mode
Will describes what he wants: "build me a creative planner with spend tier + offer modifier + format mix". Draft a spec (YAML), show it to him, confirm, then upload.
Direct mode
Will passes a YAML or Python-dict spec at a path. Run it.
Spec format
title: "ExampleBrand — Meta Creative Planner"
parent_folder_id: "YOUR_DRIVE_FOLDER_ID" # optional
cells:
B2: "ExampleBrand — Meta Creative Planner"
F2: "ASSUMPTIONS (edit to tune the model)"
B4: "INPUTS"
C5: 25000
C6: "Aggressive"
C10: "=INDEX(F5:F8, MATCH(C6, E5:E8, 0))"
C12: "=ROUND(C10*C11, 0)"
E5: "Modest"
E6: "Standard"
E7: "Aggressive"
E8: "Hero"
F5: 0.8
F6: 1.0
F7: 1.4
F8: 2.0
format_notes:
- "Format C5 as Currency (AUD, 0 decimals)"
- "Format C12:C13 as Number (0 decimals)"
- "Add data-validation dropdown on C6, source = E5:E8"
- "Bold B2 and F2, font 14pt"
The flow
1 — Build/confirm the spec
For conversational invocation, draft the spec from Will's description and show it before uploading. For direct invocation, load the YAML.
2 — Dry-run + print the CSV (default safety)
python3 ~/.claude/skills/sheet-create/scripts/sheet_create.py \
--spec ~/Desktop/GLOBAL/AllSkills/sheet-create/examples/creative_planner.yaml \
--dry-run --print-csv
Prints the CSV that would be uploaded. Eyeball it — every formula should be quoted, every cell in the right spot, no commas split across cells.
3 — Upload via the Drive MCP
Read the CSV emit (or call the script with --emit-csv to get the string), then call:
mcp__claude_ai_Google_Drive__create_file(
name=<title>,
contentMimeType="text/csv",
textContent=<csv_string>,
parentId=<parent_folder_id> # optional
)
Drive responds with a file id + URL — the file is now a native Google Sheet.
4 — Hand the URL + the manual-touches checklist to Will
The Sheet is live and computing. The format_notes checklist is the short list of post-upload manual touches (currency formats, dropdowns, fills, column widths) — print these inline so Will can knock them out in <2 min.
Report to Will
After a live run: file URL, title, parent_folder_id it landed in, count of cells written, and the format_notes checklist as a copy-pasteable to-do list.
What ships with it: 3 files
14.5 KB alongside SKILL.md, 2 of them executable
examples/
- creative_planner.yaml2.1 KB
scripts/
- csv_writer.pyruns4.0 KB
- sheet_create.pyruns8.5 KB