Skip to content
Back to skills

Excel Spreadsheets

ASecurity

Create, modify, and manage Excel spreadsheets.

  • 194 stars
  • 0 votes
  • 0 copies
  • 1 view
  • Added June 6, 2026
ai-agentspython

Security analysis

A100/100

Scanned June 6, 2026

npx -y skills add aws-samples/sample-strands-agent-with-agentcore --skill excel-spreadsheets --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Excel Spreadsheets?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Excel Spreadsheets
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/aws-samples-excel-spreadsheets/badge)](https://www.skillsdirectory.com/skills/aws-samples-excel-spreadsheets)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
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.

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.