$npx -y skills add ImGoodBai/goodable --skill xlsxComprehensive spreadsheet creation, editing, and analysis with support for formulas, formatting, data analysis, and visualization. When Claude needs to work with spreadsheets (.xlsx, .xlsm, .csv, .tsv, etc) for: (1) Creating new spreadsheets with formulas and formatting, (2) Read
| 1 | # Requirements for Outputs |
| 2 | |
| 3 | ## All Excel files |
| 4 | |
| 5 | ### Zero Formula Errors |
| 6 | - Every Excel model MUST be delivered with ZERO formula errors (#REF!, #DIV/0!, #VALUE!, #N/A, #NAME?) |
| 7 | |
| 8 | ### Preserve Existing Templates (when updating templates) |
| 9 | - Study and EXACTLY match existing format, style, and conventions when modifying files |
| 10 | - Never impose standardized formatting on files with established patterns |
| 11 | - Existing template conventions ALWAYS override these guidelines |
| 12 | |
| 13 | ## Financial models |
| 14 | |
| 15 | ### Color Coding Standards |
| 16 | Unless otherwise stated by the user or existing template |
| 17 | |
| 18 | #### Industry-Standard Color Conventions |
| 19 | - **Blue text (RGB: 0,0,255)**: Hardcoded inputs, and numbers users will change for scenarios |
| 20 | - **Black text (RGB: 0,0,0)**: ALL formulas and calculations |
| 21 | - **Green text (RGB: 0,128,0)**: Links pulling from other worksheets within same workbook |
| 22 | - **Red text (RGB: 255,0,0)**: External links to other files |
| 23 | - **Yellow background (RGB: 255,255,0)**: Key assumptions needing attention or cells that need to be updated |
| 24 | |
| 25 | ### Number Formatting Standards |
| 26 | |
| 27 | #### Required Format Rules |
| 28 | - **Years**: Format as text strings (e.g., "2024" not "2,024") |
| 29 | - **Currency**: Use $#,##0 format; ALWAYS specify units in headers ("Revenue ($mm)") |
| 30 | - **Zeros**: Use number formatting to make all zeros "-", including percentages (e.g., "$#,##0;($#,##0);-") |
| 31 | - **Percentages**: Default to 0.0% format (one decimal) |
| 32 | - **Multiples**: Format as 0.0x for valuation multiples (EV/EBITDA, P/E) |
| 33 | - **Negative numbers**: Use parentheses (123) not minus -123 |
| 34 | |
| 35 | ### Formula Construction Rules |
| 36 | |
| 37 | #### Assumptions Placement |
| 38 | - Place ALL assumptions (growth rates, margins, multiples, etc.) in separate assumption cells |
| 39 | - Use cell references instead of hardcoded values in formulas |
| 40 | - Example: Use =B5*(1+$B$6) instead of =B5*1.05 |
| 41 | |
| 42 | #### Formula Error Prevention |
| 43 | - Verify all cell references are correct |
| 44 | - Check for off-by-one errors in ranges |
| 45 | - Ensure consistent formulas across all projection periods |
| 46 | - Test with edge cases (zero values, negative numbers) |
| 47 | - Verify no unintended circular references |
| 48 | |
| 49 | #### Documentation Requirements for Hardcodes |
| 50 | - Comment or in cells beside (if end of table). Format: "Source: [System/Document], [Date], [Specific Reference], [URL if applicable]" |
| 51 | - Examples: |
| 52 | - "Source: Company 10-K, FY2024, Page 45, Revenue Note, [SEC EDGAR URL]" |
| 53 | - "Source: Company 10-Q, Q2 2025, Exhibit 99.1, [SEC EDGAR URL]" |
| 54 | - "Source: Bloomberg Terminal, 8/15/2025, AAPL US Equity" |
| 55 | - "Source: FactSet, 8/20/2025, Consensus Estimates Screen" |
| 56 | |
| 57 | # XLSX creation, editing, and analysis |
| 58 | |
| 59 | ## Overview |
| 60 | |
| 61 | A user may ask you to create, edit, or analyze the contents of an .xlsx file. You have different tools and workflows available for different tasks. |
| 62 | |
| 63 | ## Important Requirements |
| 64 | |
| 65 | **LibreOffice Required for Formula Recalculation**: You can assume LibreOffice is installed for recalculating formula values using the `recalc.py` script. The script automatically configures LibreOffice on first run |
| 66 | |
| 67 | ## Reading and analyzing data |
| 68 | |
| 69 | ### Data analysis with pandas |
| 70 | For data analysis, visualization, and basic operations, use **pandas** which provides powerful data manipulation capabilities: |
| 71 | |
| 72 | ```python |
| 73 | import pandas as pd |
| 74 | |
| 75 | # Read Excel |
| 76 | df = pd.read_excel('file.xlsx') # Default: first sheet |
| 77 | all_sheets = pd.read_excel('file.xlsx', sheet_name=None) # All sheets as dict |
| 78 | |
| 79 | # Analyze |
| 80 | df.head() # Preview data |
| 81 | df.info() # Column info |
| 82 | df.describe() # Statistics |
| 83 | |
| 84 | # Write Excel |
| 85 | df.to_excel('output.xlsx', index=False) |
| 86 | ``` |
| 87 | |
| 88 | ## Excel File Workflows |
| 89 | |
| 90 | ## CRITICAL: Use Formulas, Not Hardcoded Values |
| 91 | |
| 92 | **Always use Excel formulas instead of calculating values in Python and hardcoding them.** This ensures the spreadsheet remains dynamic and updateable. |
| 93 | |
| 94 | ### ❌ WRONG - Hardcoding Calculated Values |
| 95 | ```python |
| 96 | # Bad: Calculating in Python and hardcoding result |
| 97 | total = df['Sales'].sum() |
| 98 | sheet['B10'] = total # Hardcodes 5000 |
| 99 | |
| 100 | # Bad: Computing growth rate in Python |
| 101 | growth = (df.iloc[-1]['Revenue'] - df.iloc[0]['Revenue']) / df.iloc[0]['Revenue'] |
| 102 | sheet['C5'] = growth # Hardcodes 0.15 |
| 103 | |
| 104 | # Bad: Python calculation for average |
| 105 | avg = sum(values) / len(values) |
| 106 | sheet['D20'] = avg # Hardcodes 42.5 |
| 107 | ``` |
| 108 | |
| 109 | ### ✅ CORRECT - Using Excel Formulas |
| 110 | ```python |
| 111 | # Good: Let Excel calculate the sum |
| 112 | sheet['B10'] = '=SUM(B2:B9)' |
| 113 | |
| 114 | # Good: Growth rate as Excel formula |
| 115 | sheet['C5'] = '=(C4-C2)/C2' |
| 116 | |
| 117 | # Good: Average using Excel function |
| 118 | sheet['D20'] = '=AVERAGE(D2:D19)' |
| 119 | ``` |
| 120 | |
| 121 | This applies to ALL calcu |