agentbull/ankole/xlsx

Claude Code and agent skill by agentbull/ankole

Trust tier 2
  • community
LLM review pending
Source check pending

Checking that the SKILL.md file is still in the repository.

Use this skill for local .xlsx, .xls, .csv, or .tsv files as input or output. This skill edits and validates local workbooks. Lark cloud sheets and tokens belong to lark-office-suite.

Install

npx vskill@latest install agentbull/ankole/xlsx

SKILL.md

OfficeCLI XLSX Skill

For visual styling, use design-md when the user requests the internal design system or VIS, skip it when they opt out or choose another style instead, and treat it as optional when no style source is specified.

Setup

The Worker image build installs OfficeCLI and checks its version. Run officecli --version and officecli help xlsx. If both commands succeed, continue with the installed CLI. Version numbers in upstream references and known-issue notes are not runtime requirements. If either command fails, report the command and error as the runtime blocker. Worker image maintenance happens outside the Job.

Playbooks

A Playbook carries the extra rules for one kind of workbook. Before you plan the workbook, list the Playbooks and read every one that matches the request:

bash
bun /repo/app/library/agent-plugins/office/tools/list_playbooks.ts xlsx

Each line gives the Playbook name, its absolute path, and the condition that selects it. A Playbook inherits every rule in this skill and adds to it, so read this skill first and keep both. When no Playbook matches, build from this skill alone.

⚠️ Help-First Rule

This skill teaches what good xlsx looks like, not every command flag. When a property name, enum value, or alias is uncertain, consult help BEFORE guessing.

bash
officecli help xlsx # List all xlsx elements
officecli help xlsx <element> # Full element schema (e.g. pivottable, chart, cf)
officecli help xlsx <verb> <element> # Verb-scoped (e.g. add chart, set cell)
officecli help xlsx <element> --json # Machine-readable schema

Help reflects the installed CLI version. When this skill and help disagree, help is authoritative.

officecli help xlsx ... covers schema elements only. Use a top-level command's own help for its syntax, such as officecli import --help, officecli batch --help, or officecli open --help. In 1.0.144, officecli help xlsx import is invalid because import is a command, not an xlsx element.

Shell & Execution Discipline

Shell quoting (zsh / bash). Excel paths contain [], and number formats contain $. Both are shell metacharacters. Rules:

  • ALWAYS quote element paths: "/Sheet1/row[1]", not /Sheet1/row[1].
  • Use single quotes for any prop value containing $: numFmt='$#,##0'.
  • For formulas with cross-sheet ! references, use batch with a <<'EOF' heredoc (see Known Issues).
  • \n and \t in a prop value ARE interpreted by the CLI — \n is a real in-cell line break (pair with --prop wrapText=true), \t a tab. Double them (\\n) for a literal backslash-n (rarely wanted). ($ is the shell layer above — single-quote it.)

Incremental execution. Run commands one at a time and read each exit code. officecli mutates the file on every call; a 50-command script that fails at command 3 will cascade silently. One command → check output → continue.

Requirements for Outputs

Before reaching for a command, know what a good xlsx looks like. These are the deliverable standards every workbook MUST meet.

All Excel files

Zero formula errors. Every delivered workbook MUST have ZERO #REF!, #DIV/0!, #VALUE!, #NAME?, #N/A. No exceptions — guard denominators with IFERROR or IF(x=0,...).

Formulas, not hardcoded values. If a number can be computed from other cells, it is a formula. Hardcoding 5000 where =SUM(B2:B9) belongs breaks the contract that the workbook stays live when inputs change. This is the single most important rule in this skill.

Professional font. Use one consistent, professional font across the workbook (Arial / Calibri / Times New Roman). Don't mix four fonts because one sheet came from CSV.

Explicit widths. There is no auto-fit. Any column the user will read MUST have width set — default 8.43 chars clips everything. Sensible starts: labels 20-25, numbers 12-15, dates 12, short codes 8-10.

Preserve existing templates. When editing a file that already has a look, match it. Existing conventions override these guidelines.

Visual delivery floor (applies to EVERY workbook)

Before you declare done, run officecli view "$FILE" html -o "${FILE%.xlsx}.html" and Read the explicit HTML output file to confirm all of these:

  • No `###` in any cell. ### means a column is too narrow for its widest value. Every column the user reads needs an explicit width. ### in a delivered file is unfinished work, never "a small visual nit".
  • No truncated titles. Sheet titles, section headers, long labels must fit. Widen the column or apply wrapText=true on the cell.
  • No placeholder tokens rendered as data. $fy$24, {var}, <TODO>, xxxx must never appear in a cell, chart title, series name, or legend. These are build-time tokens that escaped replacement.
  • Pie / doughnut slices have distinct fill colors. If the slices render same-colored, switch to bar / column or set colors=... explicitly.
  • No empty trailing pages / empty chart anchors. anchor=D2:J18 over empty source cells looks like a broken chart.

If any of the above fails, STOP and fix before declaring done.

Print layout. Any sheet the user may print or send as a board pack needs page setup. Default portrait + no fit-to-page splits wide tables and charts mid-way. Pick the fit mode by sheet shape:

bash
# Summary / chart / dashboard sheet (small, up to approximately 40 rows): fit to a single page.
officecli set "$FILE" "/Summary" --prop orientation=landscape --prop fitToPage=true
# Tall data table: fit the width to one page and let the height paginate.
officecli set "$FILE" "/Data" --prop orientation=landscape --prop fitToPage=1x0

fitToPage=true is 1x1, so use it only when the sheet is already short. 1x0 means one page wide with unlimited pages tall. Apply a print layout when a sheet holds a chart, has more than eight columns, or the user requests a print, board, or investor deliverable.

Financial models only — skip this section if you are building a template, tracker, CSV import, or operational sheet

Scope: budgets, forecasts, 3-statement models, valuation, any $-heavy analytical workbook. A customer-support tracker or onboarding template does not need this section.

Color coding — industry standard. Five core colors used as a language, not decoration. A reviewer should tell what a cell IS by color alone — before reading the formula.

ColorRoleExample
Blue text 0000FFHardcoded inputs, scenario variablesfont.color=0000FF
Black text 000000ALL formulas and calculationsdefault
Green text 008000Cross-sheet links inside this workbookfont.color=008000
Red text FF0000Links to external files / workbooksfont.color=FF0000
Yellow fill FFFF00Key assumptions needing reviewfill=FFFF00

A reviewer should tell what a cell IS just by its color — before reading the formula. This is a communication contract, not a cosmetic preference.

Number formatting — standards, not preferences.

  • Years are text, not numbers. Format 2026 not 2,026 — use numFmt="@" or set type=string.
  • Currency carries its unit in the header (Revenue ($mm)), not in every cell.
  • Zeros display as `-`, not 0. Use $#,##0;($#,##0);"-".
  • Percentages default to one decimal: 0.0%.
  • Negatives use parentheses: (1,234) not -1,234.
  • Valuation multiples use 0.0x format (EV/EBITDA, P/E, etc.).

Assumptions live in cells, not inside formulas. =B5*(1+$B$6) is correct; =B5*1.05 is a bug. Document each blue hardcoded input with an adjacent source note in the next cell or a cell comment:

Source: Company 10-K, FY2024, Page 45, Revenue Note
Source: Bloomberg, 2026-05-02, AAPL US Equity
Source: Management guidance, Q2 2026 earnings call

Any hardcoded number without a source is an undocumented assumption — a reviewer cannot audit it.

Common Workflow

Six steps. Every non-trivial build follows this shape.

  1. Use one resident phase. Run ordinary edits through one open ... close phase. save flushes to disk and keeps the resident warm; close flushes and releases it. Do not run CSV or TSV import inside that phase. In 1.0.144 the top-level import command bypasses the resident, and an import-only handler can report success without retaining the worksheet changes. Use the non-resident batch recipe below, prove that the imported cells exist, and only then open a resident for later edits. For many cells, use batch: 50 ops per block are recommended; pure value-set payloads have been tested above 80 ops. Run cross-sheet formula batches non-resident in one heredoc (see Known Issues).
  2. Create or load. officecli create "$FILE" (new) or officecli view "$FILE" outline (existing — get the lay of the land first).
  3. Build incrementally. One command, read the output, continue. After any structural op (new sheet, chart, named range, pivot), run get on it to confirm shape before stacking more on top.
  4. Format. Column widths, number formats, freeze panes, tab colors, header fills. Formatting is not optional polish — per "Requirements for Outputs" it is part of the deliverable.
  5. Save, then reckon with the cache. officecli save <file> writes to disk. Newly-added formulas ship without cached values; when a human opens the file in a spreadsheet app, the app recalculates and populates them. But your downstream `INDEX/MATCH`, `SUMPRODUCT`, or any formula that references an upstream formula will cache whatever the upstream cached at write-time — often `0` or a stale value — and that cached lie survives into non-recalculating readers. After any multi-formula build involving array formulas (SUMPRODUCT, SUMIFS with dynamic criteria) or cross-sheet chains, re-touch every downstream cell (run set again with the same formula) so the engine recomputes its cache from the freshly-cached upstream. ⚠️ Re-touch on cross-sheet chains via resident is unreliable (see Batch / resident caveats) — prefer non-resident set for the re-touch pass. Then officecli get a few downstream cells and eyeball that their cachedValue= is plausible. validate is safe with a resident open and itself flushes pending edits to disk (same as docx / pptx).
  6. QA — assume there are problems. See the QA section. You are not done when your last command exited 0; you are done after one fix-and-verify cycle finds zero new issues.

Quick Start

Minimal viable xlsx: 3 months of revenue + a total formula + column widths + a currency format. Adapt, don't copy-paste — your file, your data.

bash
officecli create "$FILE"
officecli open "$FILE"
officecli set "$FILE" /Sheet1/A1 --prop value=Month --prop bold=true
officecli set "$FILE" /Sheet1/B1 --prop value=Revenue --prop bold=true
officecli set "$FILE" /Sheet1/A2 --prop value=Jan
officecli set "$FILE" /Sheet1/A3 --prop value=Feb
officecli set "$FILE" /Sheet1/A4 --prop value=Mar
officecli set "$FILE" /Sheet1/B2 --prop value=42000 --prop numFmt='$#,##0'
officecli set "$FILE" /Sheet1/B3 --prop value=45000 --prop numFmt='$#,##0'
officecli set "$FILE" /Sheet1/B4 --prop value=48000 --prop numFmt='$#,##0'
officecli set "$FILE" /Sheet1/A5 --prop value=Total --prop bold=true
officecli set "$FILE" /Sheet1/B5 --prop formula="SUM(B2:B4)" --prop bold=true --prop numFmt='$#,##0'
officecli set "$FILE" "/Sheet1/col[A]" --prop width=12
officecli set "$FILE" "/Sheet1/col[B]" --prop width=15
officecli close "$FILE"
officecli validate "$FILE"

Verified: validate returns no errors found, B5 resolves to 135000. This is the shape of every build: open → set cells/formulas → format → close → validate.

CSV / bulk import

This is the start of the file. Read the full SKILL.md on GitHub.

Security

  • Security scanPassed, 100 of 100Pattern checks on the skill's files.
  • Model reviewNot runA model review is scheduled for the next rescan.

Quality evaluation

  • Task evaluationNot runNo evaluation yet. Run one in Skill Studio.

Source

Popularity

Repository stars
67
Repository forks
12
7-day trend score
21

Stars and forks are for the whole GitHub repository, not this skill alone. Not refreshed yet.

Works with

Any agent vskill installs to: 56 targets in all. These 39 have a page on this site.

  • Claude Code
  • Cursor
  • GitHub Copilot
  • Windsurf
  • Codex
  • Gemini CLI
  • Cline
  • Amp
  • Roo Code
  • Goose
  • Continue
  • Kilo Code
  • Junie
  • Trae
  • OpenHands
  • Qwen Code
  • AI Agent
  • Tabnine Chat
  • Sourcegraph Cody
  • Amazon Q
  • Firebase Genkit
  • Sweep
  • Devin
  • Phind
  • Mentat
  • Claude Desktop
  • Aider
  • GPT Pilot
  • Plandex
  • bolt.new
  • v0
  • Replit Agent
  • Anse
  • TypingMind
  • BetterChatGPT
  • LibreChat
  • Warp AI
  • Pieces
  • Fig AI
Embed badge
vskill VERIFIED badge
[![vskill VERIFIED](https://verified-skill.com/api/v1/skills/agentbull/ankole/xlsx/badge)](https://verified-skill.com/skills/agentbull/ankole/xlsx)

Something wrong with this skill or its page? Tell us.