Excel Spreadsheets (profy-xlsx)
Create, edit, and analyse spreadsheets. In direct opposition to “let the model compute the number and paste it in”, the governing constraint here is that the deliverable must be a live spreadsheet: formulas stay in the cells, so changing a source value updates everything downstream.Activation
profy-xlsx is user_selectable: false — automatically available, nothing to tick. It does not appear in the plugin panel because it has no decision for you to make.
contracts declares only skills: ["skills/"] and no tools. The expert is not calling some “generate Excel” tool; it runs Python (openpyxl / pandas) via bash in the sandbox, and the skill document governs how it does so.
The trigger is that a spreadsheet file is the primary input or output: .xlsx, .xlsm, .csv, .tsv. If the final deliverable is a Word document, an HTML report, or a standalone script, this path is not taken even when tabular data is involved along the way.
Quick start
First principle: formulas, not hardcoded values
This is the most repeated rule in the skill and it is worth understanding why.Mandatory step: recalculate and validate
A freshly written workbook stores formulas as text with empty cached values. Delivered as-is, the recipient opens it to blanks or stale numbers. So one step is non-optional:scripts/office/soffice.py) and returns JSON:
The five error types that must be zero
The delivery bar is zero formula errors, not “mostly computes”.
Financial model conventions
For financial models the skill applies industry-standard conventions so that anyone who has seen a financial model can read it immediately.Colour coding
The point of this palette is that you can tell at a glance which numbers are safe to edit and which are derived. Overwriting a black cell breaks the model, and colour is the cheapest possible guard rail against that.
Number formatting
Formula construction
- Centralise assumptions: growth rates, margins, multiples all live in dedicated assumption cells
- Reference, do not embed: write
=B5*(1+$B$6), never=B5*1.05 - Keep projection formulas consistent across all periods, otherwise one year quietly computes differently
- Document every hardcode with
Source: [System/Document], [Date], [Specific Reference], [URL], e.g.Source: Company 10-K, FY2024, Page 45, Revenue Note - Check for off-by-one range errors and unintended circular references before delivering
Editing existing files: the template wins
The reasoning is concrete: you do not know what downstream depends on that format. A sheet parsed by a downstream script on column position breaks entirely the moment you “helpfully” normalise the column order.Tool selection
The standard workflow is: choose tool → create or load → modify → save → recalculate → verify and fix.
Boundaries and failure modes
- Recalculation depends on LibreOffice. It is preinstalled in the sandbox; in a local Desktop environment without it,
recalc.pyfails and formulas keep no cached values. - Macros in
.xlsmare not executed. File structure can be read and written, but macro logic does not participate in calculation. - Charts come from openpyxl and are stylistically limited. Complex visualisation is better served by the visualization capability producing web charts.
- Very large sheets hit memory limits. Beyond a few hundred thousand rows, aggregate with pandas first and write the result, rather than loading everything into openpyxl.
Troubleshooting
Verify your output
- Open the file and change any input cell — downstream numbers should move. If they do not, something is hardcoded.
- Search the whole workbook for
#; none of the five error types should appear. - For financial models, check the colours again: blue should appear only in the input block, black should cover every calculation.
Related
Office documents overview
How the four document capabilities differ and when to use each
Data visualization
The alternative path when you need interactive charts
Verified 2026-08-11. Sources:
services/agent-runtime/src/plugins/builtin/xlsx/plugin.json, skills/SKILL.md, skills/scripts/recalc.py, skills/scripts/office/soffice.py.
