Skip to content
Back to skills

Girth Xlsx Recovery

ASecurity

Use when an Excel workbook has missing cells (e.g. "???") that must be recovered from totals, shares, YoY changes, CAGR or cross-sheet relationships and saved as a new xlsx.

  • 4 stars
  • 0 votes
  • 0 copies
  • 0 views
  • Added November 11, 2026
ai-agents

Security analysis

A100/100

Scanned November 11, 2026

npx -y skills add mohessaid/girth --skill girth-xlsx-recovery --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Girth Xlsx Recovery?

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

Security grade badge for Girth Xlsx Recovery
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/mohessaid-girth-xlsx-recovery/badge)](https://www.skillsdirectory.com/skills/mohessaid-girth-xlsx-recovery)

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: girth-xlsx-recovery
description: Use when an Excel workbook has missing cells (e.g. "???") that must be recovered from totals, shares, YoY changes, CAGR or cross-sheet relationships and saved as a new xlsx.
metadata:
  girth:
    sources:
      - path-or-repo: skillsbench/tasks/xlsx-recover-data/environment/skills/data-reconciliation
        sections: [Core Principles, Recovery Strategy, Chain Dependencies, Common Patterns in Budget Data]
      - path-or-repo: skillsbench/tasks/xlsx-recover-data/environment/skills/xlsx
        sections: [Preserve Existing Templates (when updating templates), Editing existing Excel files, Working with openpyxl]
    crafted_for: Recover "???" values in nasa_budget_incomplete.xlsx using cross-sheet relationships and save nasa_budget_recovered.xlsx
    created: 2026-10-15
    last_used: 2026-10-15
---
## Recovery formulas <!-- src: data-reconciliation#core-principles -->
- Sum: `Missing = Total - Σ(known)` (rows and columns)
- YoY forward: `Current = Previous × (1 + YoY/100)`; backward: `Previous = Current / (1 + YoY/100)`
- Share: `Part = Total × share/100`; inverse `Total = Part / (share/100)`
- CAGR: `((End/Start)^(1/years) - 1) × 100`; `End = Start × (1+CAGR/100)^years`; `Start = End / (1+CAGR/100)^years`

## Strategy <!-- src: data-reconciliation#recovery-strategy, data-reconciliation#chain-dependencies -->
1. Identify constraints between sheets (totals, shares, YoY, CAGR).
2. Find cells solvable now; solve in dependency order (a value recovered in one sheet may unlock a YoY/share cell in another). Map dependencies before starting; iterate until no "???" remain.
3. Validate: row/column totals match, shares consistent, YoY recalculates correctly.

## Patterns <!-- src: data-reconciliation#common-patterns-in-budget-data -->
| Constraint | Formula | Use when |
|---|---|---|
| Sum to total | Total - Σ(known) | one component missing |
| YoY forward/backward | Old×(1+%/100) / New/(1+%/100) | know one year + change |
| Share | Total × share% | know total + % |
| CAGR | ((End/Start)^(1/n)-1)×100 | multi-year growth |

## Editing the workbook <!-- src: xlsx#preserve-existing-templates-when-updating-templates, xlsx#editing-existing-excel-files, xlsx#working-with-openpyxl -->
- Match existing format and conventions exactly; never restyle.
- Use `openpyxl.load_workbook(path)` (cells 1-based), loop `wb.sheetnames`, write with `wb.save(new_path)`.
- Never open with `data_only=True` and save: formulas are permanently lost. Use it only to read values.
- Replace each "???" with a computed numeric value (not a string); save under the requested new filename, leaving the input untouched.
- After saving, reload and confirm no "???" remain in any sheet.

## Record
After each deliverable, run the taste context's `made` command with its defining choices.

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.

View all in ai-agents →

Comments

Loading comments…

Newsletter

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