excel-spreadsheets
Create, modify, and manage Excel spreadsheets.
What this skill does
# Excel Spreadsheets
## When to Use
| Tool | Use When |
|------|----------|
| `create_excel_spreadsheet` | User asks to create/generate a NEW spreadsheet |
| `modify_excel_spreadsheet` | User asks to edit/update an EXISTING spreadsheet |
| `list_my_excel_spreadsheets` | User asks what spreadsheets are available |
| `read_excel_spreadsheet` | User wants to download or read spreadsheet contents |
| `preview_excel_sheets` | Check actual sheet appearance when editing |
## Workflow
1. Before modifying: call `preview_excel_sheets` to check current layout.
2. After creation/modification: call `preview_excel_sheets` to verify.
3. Run tools **sequentially** (never parallel) to prevent file race conditions.
## Professional Formatting
- **Font**: Arial for all cells unless an existing template specifies otherwise.
- **Negative numbers**: parentheses format `(1,234)` — not minus `-1,234`.
- **Currency**: `$#,##0` format. Specify units in headers (e.g., "Revenue ($mm)").
- **Percentages**: `0.0%` (one decimal place).
- **Years**: format as text (`"2024"` not `"2,024"`).
- **Zeros**: display as `"-"` using a custom number format.
```python
# Example: professional number formatting
from openpyxl.styles import numbers
ws['B2'].number_format = '$#,##0' # Currency
ws['C2'].number_format = '0.0%' # Percentage
ws['D2'].number_format = '#,##0;(#,##0)' # Negative in parentheses
ws['E2'].number_format = '@' # Year as text
ws['F2'].number_format = '#,##0;(#,##0);"-"' # Zeros as dash
```
## Financial Model Color Coding
When building financial models, apply these conventions:
| Color | Hex | Usage |
|-------|-----|-------|
| Blue text | `0000FF` | Hardcoded inputs and assumptions |
| Black text | `000000` | All formulas and calculations |
| Green text | `008000` | Links pulling from other worksheets |
| Yellow background | `FFFF00` | Key assumptions needing attention |
```python
from openpyxl.styles import Font, PatternFill
ws['B2'].font = Font(name='Arial', color='0000FF') # Blue: input
ws['B3'].font = Font(name='Arial', color='000000') # Black: formula
ws['B4'].font = Font(name='Arial', color='008000') # Green: cross-sheet link
ws['B5'].fill = PatternFill('solid', fgColor='FFFF00') # Yellow bg: key assumption
```
## Images
```python
from openpyxl.drawing.image import Image
ws.add_image(Image('file.png'), 'E1')
```
## Code Rules
- Workbook is pre-initialized as `wb = Workbook()`, active sheet as `ws = wb.active` (create), or loaded as `wb` (modify). Do NOT include `Workbook()` or `wb.save()`.
- Available libraries: openpyxl, matplotlib, pandas, numpy (seaborn NOT available)
- ALWAYS use Excel formulas, NEVER hardcode calculated values.
- Wrong: `ws['B10'] = total`
- Right: `ws['B10'] = '=SUM(B2:B9)'`
- Place assumptions in separate cells, reference them in formulas (e.g., `=B5*(1+$B$6)` not `=B5*1.05`).
- Avoid circular references.
- Filenames: letters, numbers, hyphens only.
---
## Tool Reference
### create_excel_spreadsheet
Create a new Excel spreadsheet using openpyxl code.
| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `python_code` | str | Yes | Python code using openpyxl (see Code Rules above) |
| `spreadsheet_name` | str | Yes | Filename without extension (letters, numbers, hyphens only) |
Example tool_input:
```json
{
"python_code": "ws.title = 'Sales'\nws['A1'] = 'Quarter'\nws['B1'] = 'Revenue'\nfor i, (q, r) in enumerate(zip(['Q1','Q2','Q3','Q4'], [100,150,130,180]), start=2):\n ws[f'A{i}'] = q\n ws[f'B{i}'] = r",
"spreadsheet_name": "quarterly-sales"
}
```
**WARNING**: Parameter is `spreadsheet_name`, NOT `filename` or `name`.
### modify_excel_spreadsheet
Modify an existing spreadsheet and save with a new name.
| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `source_name` | str | Yes | Existing spreadsheet name (without .xlsx) |
| `output_name` | str | Yes | New output name (MUST differ from source) |
| `python_code` | str | Yes | Python code to modify the spreadsheet |
Example tool_input:
```json
{
"source_name": "quarterly-sales",
"output_name": "quarterly-sales-v2",
"python_code": "ws = wb.active\nws['B6'] = '=SUM(B2:B5)'"
}
```
### list_my_excel_spreadsheets
List all spreadsheets in workspace. No parameters needed.
### read_excel_spreadsheet
Retrieve a specific spreadsheet for download.
| Parameter | Type | Required |
|-----------|------|----------|
| `spreadsheet_name` | str | Yes |
### preview_excel_sheets
Get sheet screenshots for visual inspection before editing.
| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `spreadsheet_name` | str | Yes | Spreadsheet name without extension |
| `sheet_names` | list[str] | Yes | Sheet names to preview (empty list `[]` for all sheets) |
## UI Guidance (from tools-config)
**Sequential Execution Required:** Run modification tools sequentially, never in parallel (prevents race conditions on S3 file read/write).
**When to Use:**
- create_excel_spreadsheet: User asks to create/generate a NEW Excel spreadsheet
- modify_excel_spreadsheet: User asks to edit/modify/update an EXISTING spreadsheet
- list_my_excel_spreadsheets: User asks what spreadsheets are available
- read_excel_spreadsheet: User wants to download or read spreadsheet contents
- preview_excel_sheets: Check actual sheet appearance when editing
**Before Modifying:** Always use preview_excel_sheets first to see the current layout.
**CRITICAL — Formulas, Not Hardcoded Values:**
- ALWAYS use Excel formulas. NEVER calculate in Python and hardcode the result.
- Wrong: `ws['B10'] = total`. Right: `ws['B10'] = '=SUM(B2:B9)'`
- Place assumptions in separate cells, reference them in formulas (e.g., =B5*(1+$B$6) not =B5*1.05)
- Formulas are auto-recalculated via LibreOffice after save.
- Avoid circular references.
**Professional Formatting:**
- Font: Arial for all cells unless existing template specifies otherwise
- Negative numbers: parentheses format (1,234) not minus -1,234
- Currency: $#,##0 format; specify units in headers ("Revenue ($mm)")
- Percentages: 0.0% (one decimal)
- Years: format as text ("2024" not "2,024")
- Zeros: display as "-" using custom number format
**Financial Model Color Coding (when applicable):**
- Blue text (0,0,255): Hardcoded inputs and assumptions
- Black text (0,0,0): All formulas and calculations
- Green text (0,128,0): Links pulling from other worksheets
- Yellow background (255,255,0): Key assumptions needing attention
**Filenames:** Letters, numbers, hyphens only (e.g., "Q4-sales.xlsx")
**Available Libraries:** openpyxl, matplotlib, pandas, numpy (seaborn NOT available)
**Images:** `from openpyxl.drawing.image import Image; ws.add_image(Image('file.png'), 'E1')`
**QA:** Always use preview_excel_sheets after creation to verify appearance.
Related in General
modeling-omnistudio-epc-catalog
IncludedSalesforce Industries CME EPC product-modeling skill for Product2-based catalog creation. Use when creating EPC products, configuring product attributes, building offer bundles with Product Child Items, or reviewing EPC DataPack JSON metadata for product catalog changes. TRIGGER when: user creates or updates Product2 EPC records, AttributeAssignment payloads, AttributeMetadata/AttributeDefaultValues, Offer bundles, or ProductChildItem relationships. DO NOT TRIGGER when: designing OmniScripts/FlexCards/Integration Procedures (use building-omnistudio-omniscript, building-omnistudio-flexcard, or building-omnistudio-integration-procedure), implementing Apex business logic (use generating-apex), or troubleshooting deployment pipelines (use deploying-metadata).
relationship-science-coach
IncludedUse this skill for direct, practical adult relationship coaching: couples conflict, repair, trust, marriage, dating, flirting, attachment patterns, emotional connection, sex, desire differences, eroticism, kink negotiation, affection, love languages, breakups, and long-term passion. Draw on Gottman, EFT and Hold Me Tight, attachment science, modern sex research, Perel, Nagoski, Kerner, Schnarch, Love and Stosny, and flexible love-language tools. Be concrete and low-hedge. Redirect only for imminent danger, abuse, coercive control, minors, non-consent, self-harm, stalking, or medical/legal/psychiatric decisions.
building-sf-integrations
IncludedSalesforce integration architecture and runtime plumbing with 120-point scoring. Use this skill to set up Named Credentials, External Credentials, External Services, REST/SOAP callout patterns, Platform Events, and Change Data Capture. TRIGGER when: user sets up Named Credentials, External Services, REST/SOAP callouts, Platform Events, CDC, or touches .namedCredential-meta.xml files. DO NOT TRIGGER when: Connected App/OAuth config (use configuring-connected-apps), Apex-only logic (use generating-apex), or data import/export (use handling-sf-data).
venue-templates
IncludedAccess comprehensive LaTeX templates, formatting requirements, and submission guidelines for major scientific publication venues (Nature, Science, PLOS, IEEE, ACM), academic conferences (NeurIPS, ICML, CVPR, CHI), research posters, and grant proposals (NSF, NIH, DOE, DARPA). This skill should be used when preparing manuscripts for journal submission, conference papers, research posters, or grant proposals and need venue-specific formatting requirements and templates.
let-fate-decide
IncludedDraws the 12 Houses of the Zodiac Tarot spread to inject entropy into planning when prompts are vague, ambiguous, or casually delegated. Interprets the spread to guide next steps. Use when the user says 'let fate decide', 'YOLO', 'whatever', 'idk', or other nonchalant phrases, makes Yu-Gi-Oh references, or when you are about to arbitrarily pick between multiple reasonable approaches. Prefer over ask-questions-if-underspecified when the user's tone is casual or playful rather than precision-seeking.
net-ops
IncludedCross-platform network troubleshooting (Windows, macOS, Linux) via local or remote shell. Use for: DNS broken, can't resolve hostnames, nslookup/dig works but apps fail, NRPT, WFP, scutil, /etc/resolver, systemd-resolved, /etc/resolv.conf, NetworkManager, VPN DNS leak residue (ProtonVPN/Mullvad/WireGuard/AnyConnect), AV/firewall blocking DNS or DoH, Tailscale DNS interaction, intermittent connectivity, remote diagnostics over SSH.