agentsclimarketplace

Sheet create

Skill NovateStudioGit/novate-studio-skills/knowledge-ops/sheet-create

57 agent skills for Claude Code — creative production, paid growth, copywriting, ecommerce, email marketing & knowledge ops. By Novate Studio.

Install
npx -y skills add NovateStudioGit/novate-studio-skills --skill sheet-create

Assembled 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.

What its author says it does

Copied from the file, not written here

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).

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:

PathWhy it fails
openpyxl-built .xlsxWrites formula expressions without cached values; Sheets viewer doesn't auto-recalc on open → cells appear blank
Composio googlesheets connectorAuth UI flaky on their side
Apps ScriptOAuth-gated, editor errored for Will
Cross-file Cmd+C/V from a working sheetDrops 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

  1. CSV formula escaping — formulas with commas (INDEX/MATCH, ROUND(x,0), IF(...)) MUST be CSV-quoted or they split across cells. Script uses csv.writer with QUOTE_MINIMAL, which quotes any field containing a comma.
  2. Single tab + in-tab refs only — no cross-tab Assumptions!E6 refs (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.
  3. CSV preserves no formatting — currency, percent, fills, dropdowns, conditional formatting, column widths, merges. None of it. The script EMITS a follow-up checklist (format_notes from the spec) for the post-upload manual touches.
  4. 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.
  5. 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.

Keep looking

Skills are one crate of 328,083. Ordering is by how many stacks a row turns up in, so the top of any crate is what has actually been picked rather than what has the most stars.