{"id":"5afb7b5b-45d7-4d6a-a44c-4c63587378a5","shortId":"FaFnwj","kind":"skill","title":"analyzing-spreadsheets","tagline":"Processes Excel spreadsheet files (.xlsx, .xlsm, .csv). Creates workbooks, builds formulas, preserves formatting, analyzes tabular data, and validates financial models with zero-formula-error delivery. Use when working with spreadsheet files or tabular data analysis. Do NOT use f","description":"# Requirements for Outputs\n\n## All Excel files\n\n### Zero Formula Errors\n- Every Excel model MUST be delivered with ZERO formula errors (#REF!, #DIV/0!, #VALUE!, #N/A, #NAME?)\n\n### Preserve Existing Templates (when updating templates)\n- Study and EXACTLY match existing format, style, and conventions when modifying files\n- Never impose standardized formatting on files with established patterns\n- Existing template conventions ALWAYS override these guidelines\n\n## Financial models\n\n### Color Coding Standards\nUnless otherwise stated by the user or existing template\n\n#### Industry-Standard Color Conventions\n- **Blue text (RGB: 0,0,255)**: Hardcoded inputs, and numbers users will change for scenarios\n- **Black text (RGB: 0,0,0)**: ALL formulas and calculations\n- **Green text (RGB: 0,128,0)**: Links pulling from other worksheets within same workbook\n- **Red text (RGB: 255,0,0)**: External links to other files\n- **Yellow background (RGB: 255,255,0)**: Key assumptions needing attention or cells that need to be updated\n\n### Number Formatting Standards\n\n#### Required Format Rules\n- **Years**: Format as text strings (e.g., \"2024\" not \"2,024\")\n- **Currency**: Use $#,##0 format; ALWAYS specify units in headers (\"Revenue ($mm)\")\n- **Zeros**: Use number formatting to make all zeros \"-\", including percentages (e.g., \"$#,##0;($#,##0);-\")\n- **Percentages**: Default to 0.0% format (one decimal)\n- **Multiples**: Format as 0.0x for valuation multiples (EV/EBITDA, P/E)\n- **Negative numbers**: Use parentheses (123) not minus -123\n\n### Formula Construction Rules\n\n#### Assumptions Placement\n- Place ALL assumptions (growth rates, margins, multiples, etc.) in separate assumption cells\n- Use cell references instead of hardcoded values in formulas\n- Example: Use =B5*(1+$B$6) instead of =B5*1.05\n\n#### Formula Error Prevention\n- Verify all cell references are correct\n- Check for off-by-one errors in ranges\n- Ensure consistent formulas across all projection periods\n- Test with edge cases (zero values, negative numbers)\n- Verify no unintended circular references\n\n#### Documentation Requirements for Hardcodes\n- Comment or in cells beside (if end of table). Format: \"Source: [System/Document], [Date], [Specific Reference], [URL if applicable]\"\n- Examples:\n  - \"Source: Company 10-K, FY2024, Page 45, Revenue Note, [SEC EDGAR URL]\"\n  - \"Source: Company 10-Q, Q2 2025, Exhibit 99.1, [SEC EDGAR URL]\"\n  - \"Source: Bloomberg Terminal, 8/15/2025, AAPL US Equity\"\n  - \"Source: FactSet, 8/20/2025, Consensus Estimates Screen\"\n\n# XLSX creation, editing, and analysis\n\n## Overview\n\nA 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.\n\n## Important Requirements\n\n**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\n\n## Reading and analyzing data\n\n### Data analysis with pandas\nFor data analysis, visualization, and basic operations, use **pandas** which provides powerful data manipulation capabilities:\n\n```python\nimport pandas as pd\n\n# Read Excel\ndf = pd.read_excel('file.xlsx')  # Default: first sheet\nall_sheets = pd.read_excel('file.xlsx', sheet_name=None)  # All sheets as dict\n\n# Analyze\ndf.head()      # Preview data\ndf.info()      # Column info\ndf.describe()  # Statistics\n\n# Write Excel\ndf.to_excel('output.xlsx', index=False)\n```\n\n## Excel File Workflows\n\n## CRITICAL: Use Formulas, Not Hardcoded Values\n\n**Always use Excel formulas instead of calculating values in Python and hardcoding them.** This ensures the spreadsheet remains dynamic and updateable.\n\n### ❌ WRONG - Hardcoding Calculated Values\n```python\n# Bad: Calculating in Python and hardcoding result\ntotal = df['Sales'].sum()\nsheet['B10'] = total  # Hardcodes 5000\n\n# Bad: Computing growth rate in Python\ngrowth = (df.iloc[-1]['Revenue'] - df.iloc[0]['Revenue']) / df.iloc[0]['Revenue']\nsheet['C5'] = growth  # Hardcodes 0.15\n\n# Bad: Python calculation for average\navg = sum(values) / len(values)\nsheet['D20'] = avg  # Hardcodes 42.5\n```\n\n### ✅ CORRECT - Using Excel Formulas\n```python\n# Good: Let Excel calculate the sum\nsheet['B10'] = '=SUM(B2:B9)'\n\n# Good: Growth rate as Excel formula\nsheet['C5'] = '=(C4-C2)/C2'\n\n# Good: Average using Excel function\nsheet['D20'] = '=AVERAGE(D2:D19)'\n```\n\nThis applies to ALL calculations - totals, percentages, ratios, differences, etc. The spreadsheet should be able to recalculate when source data changes.\n\n## Common Workflow\n1. **Choose tool**: pandas for data, openpyxl for formulas/formatting\n2. **Create/Load**: Create new workbook or load existing file\n3. **Modify**: Add/edit data, formulas, and formatting\n4. **Save**: Write to file\n5. **Recalculate formulas (MANDATORY IF USING FORMULAS)**: Use the recalc.py script\n   ```bash\n   python recalc.py output.xlsx\n   ```\n6. **Verify and fix any errors**: \n   - The script returns JSON with error details\n   - If `status` is `errors_found`, check `error_summary` for specific error types and locations\n   - Fix the identified errors and recalculate again\n   - Common errors to fix:\n     - `#REF!`: Invalid cell references\n     - `#DIV/0!`: Division by zero\n     - `#VALUE!`: Wrong data type in formula\n     - `#NAME?`: Unrecognized formula name\n\n### Creating new Excel files\n\n```python\n# Using openpyxl for formulas and formatting\nfrom openpyxl import Workbook\nfrom openpyxl.styles import Font, PatternFill, Alignment\n\nwb = Workbook()\nsheet = wb.active\n\n# Add data\nsheet['A1'] = 'Hello'\nsheet['B1'] = 'World'\nsheet.append(['Row', 'of', 'data'])\n\n# Add formula\nsheet['B2'] = '=SUM(A1:A10)'\n\n# Formatting\nsheet['A1'].font = Font(bold=True, color='FF0000')\nsheet['A1'].fill = PatternFill('solid', start_color='FFFF00')\nsheet['A1'].alignment = Alignment(horizontal='center')\n\n# Column width\nsheet.column_dimensions['A'].width = 20\n\nwb.save('output.xlsx')\n```\n\n### Editing existing Excel files\n\n```python\n# Using openpyxl to preserve formulas and formatting\nfrom openpyxl import load_workbook\n\n# Load existing file\nwb = load_workbook('existing.xlsx')\nsheet = wb.active  # or wb['SheetName'] for specific sheet\n\n# Working with multiple sheets\nfor sheet_name in wb.sheetnames:\n    sheet = wb[sheet_name]\n    print(f\"Sheet: {sheet_name}\")\n\n# Modify cells\nsheet['A1'] = 'New Value'\nsheet.insert_rows(2)  # Insert row at position 2\nsheet.delete_cols(3)  # Delete column 3\n\n# Add new sheet\nnew_sheet = wb.create_sheet('NewSheet')\nnew_sheet['A1'] = 'Data'\n\nwb.save('modified.xlsx')\n```\n\n## Recalculating formulas\n\nExcel files created or modified by openpyxl contain formulas as strings but not calculated values. Use the provided `recalc.py` script to recalculate formulas:\n\n```bash\npython recalc.py <excel_file> [timeout_seconds]\n```\n\nExample:\n```bash\npython recalc.py output.xlsx 30\n```\n\nThe script:\n- Automatically sets up LibreOffice macro on first run\n- Recalculates all formulas in all sheets\n- Scans ALL cells for Excel errors (#REF!, #DIV/0!, etc.)\n- Returns JSON with detailed error locations and counts\n- Works on both Linux and macOS\n\n## Formula Verification Checklist\n\nQuick checks to ensure formulas work correctly:\n\n### Essential Verification\n- [ ] **Test 2-3 sample references**: Verify they pull correct values before building full model\n- [ ] **Column mapping**: Confirm Excel columns match (e.g., column 64 = BL, not BK)\n- [ ] **Row offset**: Remember Excel rows are 1-indexed (DataFrame row 5 = Excel row 6)\n\n### Common Pitfalls\n- [ ] **NaN handling**: Check for null values with `pd.notna()`\n- [ ] **Far-right columns**: FY data often in columns 50+ \n- [ ] **Multiple matches**: Search all occurrences, not just first\n- [ ] **Division by zero**: Check denominators before using `/` in formulas (#DIV/0!)\n- [ ] **Wrong references**: Verify all cell references point to intended cells (#REF!)\n- [ ] **Cross-sheet references**: Use correct format (Sheet1!A1) for linking sheets\n\n### Formula Testing Strategy\n- [ ] **Start small**: Test formulas on 2-3 cells before applying broadly\n- [ ] **Verify dependencies**: Check all cells referenced in formulas exist\n- [ ] **Test edge cases**: Include zero, negative, and very large values\n\n### Interpreting recalc.py Output\nThe script returns JSON with error details:\n```json\n{\n  \"status\": \"success\",           // or \"errors_found\"\n  \"total_errors\": 0,              // Total error count\n  \"total_formulas\": 42,           // Number of formulas in file\n  \"error_summary\": {              // Only present if errors found\n    \"#REF!\": {\n      \"count\": 2,\n      \"locations\": [\"Sheet1!B5\", \"Sheet1!C10\"]\n    }\n  }\n}\n```\n\n## Best Practices\n\n### Library Selection\n- **pandas**: Best for data analysis, bulk operations, and simple data export\n- **openpyxl**: Best for complex formatting, formulas, and Excel-specific features\n\n### Working with openpyxl\n- Cell indices are 1-based (row=1, column=1 refers to cell A1)\n- Use `data_only=True` to read calculated values: `load_workbook('file.xlsx', data_only=True)`\n- **Warning**: If opened with `data_only=True` and saved, formulas are replaced with values and permanently lost\n- For large files: Use `read_only=True` for reading or `write_only=True` for writing\n- Formulas are preserved but not evaluated - use recalc.py to update values\n\n### Working with pandas\n- Specify data types to avoid inference issues: `pd.read_excel('file.xlsx', dtype={'id': str})`\n- For large files, read specific columns: `pd.read_excel('file.xlsx', usecols=['A', 'C', 'E'])`\n- Handle dates properly: `pd.read_excel('file.xlsx', parse_dates=['date_column'])`\n\n## Code Style Guidelines\n**IMPORTANT**: When generating Python code for Excel operations:\n- Write minimal, concise Python code without unnecessary comments\n- Avoid verbose variable names and redundant operations\n- Avoid unnecessary print statements\n\n**For Excel files themselves**:\n- Add comments to cells with complex formulas or important assumptions\n- Document data sources for hardcoded values\n- Include notes for key calculations and model sections","tags":["analyzing","spreadsheets","code","abyss","telagod","agent-skills","ai-agent","ai-assistant","ai-personality","blue-team","character-card","claude-code"],"capabilities":["skill","source-telagod","skill-analyzing-spreadsheets","topic-agent-skills","topic-ai-agent","topic-ai-assistant","topic-ai-personality","topic-blue-team","topic-character-card","topic-claude-code","topic-cli","topic-codex","topic-codex-cli","topic-configuration","topic-developer-tools"],"categories":["code-abyss"],"synonyms":[],"warnings":[],"endpointUrl":"https://skills.sh/telagod/code-abyss/analyzing-spreadsheets","protocol":"skill","transport":"skills-sh","auth":{"type":"none","details":{"cli":"npx skills add telagod/code-abyss","source_repo":"https://github.com/telagod/code-abyss","install_from":"skills.sh"}},"qualityScore":"0.555","qualityRationale":"deterministic score 0.56 from registry signals: · indexed on github topic:agent-skills · 211 github stars · SKILL.md body (10,094 chars)","verified":false,"liveness":"unknown","lastLivenessCheck":null,"agentReviews":{"count":0,"score_avg":null,"cost_usd_avg":null,"success_rate":null,"latency_p50_ms":null,"narrative_summary":null,"summary_updated_at":null},"enrichmentModel":"deterministic:skill-github:v1","enrichmentVersion":1,"enrichedAt":"2026-05-18T18:55:04.984Z","embedding":null,"createdAt":"2026-05-16T12:54:49.347Z","updatedAt":"2026-05-18T18:55:04.984Z","lastSeenAt":"2026-05-18T18:55:04.984Z","tsv":"'-1':571 '-123':252 '-3':1010,1118 '/c2':626 '0':124,125,139,140,141,149,151,164,165,176,206,226,227,574,577,1160 '0.0':231,238 '0.15':583 '024':203 '1':282,660,1040,1219,1222,1224 '1.05':288 '10':352,364 '123':249 '128':150 '2':202,669,895,900,1009,1117,1181 '20':834 '2024':200 '2025':367 '255':126,163,174,175 '3':678,903,906 '30':956 '4':685 '42':1166 '42.5':598 '45':356 '5':690,1044 '50':1067 '5000':562 '6':284,705,1047 '64':1030 '8/15/2025':376 '8/20/2025':382 '99.1':369 'a1':789,803,807,815,823,890,917,1105,1228 'a10':804 'aapl':377 'abl':651 'across':310 'add':786,798,907,1359 'add/edit':680 'align':781,824,825 'alway':98,208,521 'analysi':39,390,452,457,1195 'analyz':2,17,401,449,496 'analyzing-spreadsheet':1 'appli':638,1121 'applic':348 'ask':395 'assum':427 'assumpt':178,256,260,268,1368 'attent':180 'automat':441,959 'avail':414 'averag':588,628,634 'avg':589,596 'avoid':1293,1344,1351 'b':283 'b1':792 'b10':559,611 'b2':613,801 'b5':281,287,1184 'b9':614 'background':172 'bad':547,563,584 'base':1220 'bash':701,946,952 'basic':460 'besid':335 'best':1187,1192,1203 'bk':1033 'bl':1031 'black':136 'bloomberg':374 'blue':121 'bold':810 'broad':1122 'build':13,1019 'bulk':1196 'c':1313 'c10':1186 'c2':625 'c4':624 'c4-c2':623 'c5':580,622 'calcul':145,527,544,548,586,607,641,936,1235,1379 'capabl':469 'case':317,1134 'cell':182,269,271,294,334,745,888,975,1090,1095,1119,1127,1216,1227,1362 'center':827 'chang':133,657 'check':298,723,1000,1052,1079,1125 'checklist':998 'choos':661 'circular':325 'code':105,1325,1332,1340 'col':902 'color':104,119,812,820 'column':501,828,905,1022,1026,1029,1061,1066,1223,1307,1324 'comment':331,1343,1360 'common':658,739,1048 'compani':351,363 'complex':1205,1364 'comput':564 'concis':1338 'configur':442 'confirm':1024 'consensus':383 'consist':308 'construct':254 'contain':930 'content':403 'convent':82,97,120 'correct':297,599,1005,1016,1102 'count':989,1163,1180 'creat':11,398,671,761,925 'create/load':670 'creation':387 'critic':515 'cross':1098 'cross-sheet':1097 'csv':10 'currenc':204 'd19':636 'd2':635 'd20':595,633 'data':19,38,450,451,456,467,499,656,665,681,753,787,797,918,1063,1194,1200,1230,1240,1247,1290,1370 'datafram':1042 'date':343,1316,1322,1323 'decim':234 'default':229,481 'delet':904 'deliv':58 'deliveri':29 'denomin':1080 'depend':1124 'detail':717,985,1151 'df':477,555 'df.describe':503 'df.head':497 'df.iloc':570,573,576 'df.info':500 'df.to':507 'dict':495 'differ':410,416,645 'dimens':831 'div/0':64,747,980,1085 'divis':748,1076 'document':327,1369 'dtype':1299 'dynam':539 'e':1314 'e.g':199,225,1028 'edg':316,1133 'edgar':360,371 'edit':388,399,837 'end':337 'ensur':307,535,1002 'equiti':379 'error':28,52,62,290,304,710,716,721,724,728,735,740,978,986,1150,1156,1159,1162,1172,1177 'essenti':1006 'establish':93 'estim':384 'etc':265,646,981 'ev/ebitda':243 'evalu':1280 'everi':53 'exact':76 'exampl':279,349,951 'excel':5,48,54,476,479,487,506,508,512,523,601,606,619,630,763,839,923,977,1025,1037,1045,1210,1297,1309,1319,1334,1356 'excel-specif':1209 'exhibit':368 'exist':69,78,95,114,676,838,855,1131 'existing.xlsx':860 'export':1201 'extern':166 'f':43,883 'factset':381 'fals':511 'far':1059 'far-right':1058 'featur':1212 'ff0000':813 'ffff00':821 'file':7,35,49,85,91,170,407,513,677,689,764,840,856,924,1171,1262,1304,1357 'file.xlsx':480,488,1239,1298,1310,1320 'fill':816 'financi':22,102 'first':445,482,965,1075 'fix':708,732,742 'font':779,808,809 'format':16,79,89,189,192,195,207,218,232,236,340,684,771,805,848,1103,1206 'formula':14,27,51,61,143,253,278,289,309,423,433,517,524,602,620,682,692,696,756,759,769,799,846,922,931,945,969,996,1003,1084,1109,1115,1130,1165,1169,1207,1252,1275,1365 'formulas/formatting':668 'found':722,1157,1178 'full':1020 'function':631 'fy':1062 'fy2024':354 'generat':1330 'good':604,615,627 'green':146 'growth':261,565,569,581,616 'guidelin':101,1327 'handl':1051,1315 'hardcod':127,275,330,519,532,543,552,561,582,597,1373 'header':212 'hello':790 'horizont':826 'id':1300 'identifi':734 'import':418,471,774,778,851,1328,1367 'impos':87 'includ':223,1135,1375 'index':510,1041 'indic':1217 'industri':117 'industry-standard':116 'infer':1294 'info':502 'input':128 'insert':896 'instal':430 'instead':273,285,525 'intend':1094 'interpret':1142 'invalid':744 'issu':1295 'json':714,983,1148,1152 'k':353 'key':177,1378 'larg':1140,1261,1303 'len':592 'let':605 'librari':1189 'libreoffic':420,428,443,962 'link':152,167,1107 'linux':993 'load':675,852,854,858,1237 'locat':731,987,1182 'lost':1259 'maco':995 'macro':963 'make':220 'mandatori':693 'manipul':468 'map':1023 'margin':263 'match':77,1027,1069 'may':394 'minim':1337 'minus':251 'mm':214 'model':23,55,103,1021,1381 'modifi':84,679,887,927 'modified.xlsx':920 'multipl':235,242,264,871,1068 'must':56 'n/a':66 'name':67,490,757,760,875,881,886,1347 'nan':1050 'need':179,184 'negat':245,320,1137 'never':86 'new':672,762,891,908,910,915 'newsheet':914 'none':491 'note':358,1376 'null':1054 'number':130,188,217,246,321,1167 'occurr':1072 'off-by-on':300 'offset':1035 'often':1064 'one':233,303 'open':1245 'openpyxl':666,767,773,843,850,929,1202,1215 'openpyxl.styles':777 'oper':461,1197,1335,1350 'otherwis':108 'output':46,1144 'output.xlsx':509,704,836,955 'overrid':99 'overview':391 'p/e':244 'page':355 'panda':454,463,472,663,1191,1288 'parenthes':248 'pars':1321 'pattern':94 'patternfil':780,817 'pd':474 'pd.notna':1057 'pd.read':478,486,1296,1308,1318 'percentag':224,228,643 'period':313 'perman':1258 'pitfal':1049 'place':258 'placement':257 'point':1092 'posit':899 'power':466 'practic':1188 'present':1175 'preserv':15,68,845,1277 'prevent':291 'preview':498 'print':882,1353 'process':4 'project':312 'proper':1317 'provid':465,940 'pull':153,1015 'python':470,530,546,550,568,585,603,702,765,841,947,953,1331,1339 'q':365 'q2':366 'quick':999 'rang':306 'rate':262,566,617 'ratio':644 'read':447,475,1234,1264,1268,1305 'recalc.py':437,699,703,941,948,954,1143,1282 'recalcul':424,432,653,691,737,921,944,967 'red':160 'redund':1349 'ref':63,743,979,1096,1179 'refer':272,295,326,345,746,1012,1087,1091,1100,1225 'referenc':1128 'remain':538 'rememb':1036 'replac':1254 'requir':44,191,328,419,421 'result':553 'return':713,982,1147 'revenu':213,357,572,575,578 'rgb':123,138,148,162,173 'right':1060 'row':795,894,897,1034,1038,1043,1046,1221 'rule':193,255 'run':446,966 'sale':556 'sampl':1011 'save':686,1251 'scan':973 'scenario':135 'screen':385 'script':438,440,700,712,942,958,1146 'search':1070 'sec':359,370 'second':950 'section':1382 'select':1190 'separ':267 'set':960 'sheet':483,485,489,493,558,579,594,610,621,632,784,788,791,800,806,814,822,861,868,872,874,878,880,884,885,889,909,911,913,916,972,1099,1108 'sheet.append':794 'sheet.column':830 'sheet.delete':901 'sheet.insert':893 'sheet1':1104,1183,1185 'sheetnam':865 'simpl':1199 'skill' 'skill-analyzing-spreadsheets' 'small':1113 'solid':818 'sourc':341,350,362,373,380,655,1371 'source-telagod' 'specif':344,727,867,1211,1306 'specifi':209,1289 'spreadsheet':3,6,34,537,648 'standard':88,106,118,190 'start':819,1112 'state':109 'statement':1354 'statist':504 'status':719,1153 'str':1301 'strategi':1111 'string':198,933 'studi':74 'style':80,1326 'success':1154 'sum':557,590,609,612,802 'summari':725,1173 'system/document':342 'tabl':339 'tabular':18,37 'task':417 'templat':70,73,96,115 'termin':375 'test':314,1008,1110,1114,1132 'text':122,137,147,161,197 'timeout':949 'tool':411,662 'topic-agent-skills' 'topic-ai-agent' 'topic-ai-assistant' 'topic-ai-personality' 'topic-blue-team' 'topic-character-card' 'topic-claude-code' 'topic-cli' 'topic-codex' 'topic-codex-cli' 'topic-configuration' 'topic-developer-tools' 'total':554,560,642,1158,1161,1164 'true':811,1232,1242,1249,1266,1272 'type':729,754,1291 'unintend':324 'unit':210 'unless':107 'unnecessari':1342,1352 'unrecogn':758 'updat':72,187,541,1284 'url':346,361,372 'us':378 'use':30,42,205,216,247,270,280,435,462,516,522,600,629,695,697,766,842,938,1082,1101,1229,1263,1281 'usecol':1311 'user':112,131,393 'valid':21 'valu':65,276,319,434,520,528,545,591,593,751,892,937,1017,1055,1141,1236,1256,1285,1374 'valuat':241 'variabl':1346 'verbos':1345 'verif':997,1007 'verifi':292,322,706,1013,1088,1123 'visual':458 'warn':1243 'wb':782,857,864,879 'wb.active':785,862 'wb.create':912 'wb.save':835,919 'wb.sheetnames':877 'width':829,833 'within':157 'without':1341 'work':32,869,990,1004,1213,1286 'workbook':12,159,673,775,783,853,859,1238 'workflow':413,514,659 'worksheet':156 'world':793 'write':505,687,1270,1274,1336 'wrong':542,752,1086 'x':239 'xlsm':9 'xlsx':8,386,406 'year':194 'yellow':171 'zero':26,50,60,215,222,318,750,1078,1136 'zero-formula-error':25","prices":[{"id":"90dcabd5-6aef-4202-9610-6d5323fb968d","listingId":"5afb7b5b-45d7-4d6a-a44c-4c63587378a5","amountUsd":"0","unit":"free","nativeCurrency":null,"nativeAmount":null,"chain":null,"payTo":null,"paymentMethod":"skill-free","isPrimary":true,"details":{"org":"telagod","category":"code-abyss","install_from":"skills.sh"},"createdAt":"2026-05-16T12:54:49.347Z"}],"sources":[{"listingId":"5afb7b5b-45d7-4d6a-a44c-4c63587378a5","source":"github","sourceId":"telagod/code-abyss/analyzing-spreadsheets","sourceUrl":"https://github.com/telagod/code-abyss/tree/main/skills/analyzing-spreadsheets","isPrimary":false,"firstSeenAt":"2026-05-16T12:54:49.347Z","lastSeenAt":"2026-05-18T18:55:04.984Z"}],"details":{"listingId":"5afb7b5b-45d7-4d6a-a44c-4c63587378a5","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"telagod","slug":"analyzing-spreadsheets","github":{"repo":"telagod/code-abyss","stars":211,"topics":["agent-skills","ai-agent","ai-assistant","ai-personality","blue-team","character-card","claude-code","cli","codex","codex-cli","configuration","developer-tools","devops","gemini-cli","persona","prompt-engineering","red-team","security","skills"],"license":"mit","html_url":"https://github.com/telagod/code-abyss","pushed_at":"2026-05-16T10:42:04Z","description":"Give your AI coding agent a personality. Composable persona + style + skills for Claude Code, Codex, Gemini CLI & OpenClaw. Ships Tech Persona Card v1.0 spec.","skill_md_sha":"d2c533ca3740e1ec252e1cb9e955948a23931323","skill_md_path":"skills/analyzing-spreadsheets/SKILL.md","default_branch":"main","skill_tree_url":"https://github.com/telagod/code-abyss/tree/main/skills/analyzing-spreadsheets"},"layout":"multi","source":"github","category":"code-abyss","frontmatter":{"name":"analyzing-spreadsheets","description":"Processes Excel spreadsheet files (.xlsx, .xlsm, .csv). Creates workbooks, builds formulas, preserves formatting, analyzes tabular data, and validates financial models with zero-formula-error delivery. Use when working with spreadsheet files or tabular data analysis. Do NOT use for Word documents, PDFs, presentations, or database pipelines."},"skills_sh_url":"https://skills.sh/telagod/code-abyss/analyzing-spreadsheets"},"updatedAt":"2026-05-18T18:55:04.984Z"}}