Create, modify, and manage Excel spreadsheets.
Scanned 6/6/2026
Install via CLI
openskills install aws-samples/sample-strands-agent-with-agentcore---
name: excel-spreadsheets
description: Create, modify, and manage Excel spreadsheets.
---
# 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.
No comments yet. Be the first to comment!