Requirements
- Target platform
- OpenClaw
- Install method
- Manual import
- Extraction
- Extract archive
- Prerequisites
- OpenClaw
- Primary doc
- SKILL.md
Build reliable, well-documented spreadsheets with clear architecture, error handling, named ranges, and platform-agnostic formulas for finance, dashboards, a...
Build reliable, well-documented spreadsheets with clear architecture, error handling, named ranges, and platform-agnostic formulas for finance, dashboards, a...
Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.
I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Then review README.md for any prerequisites, environment setup, or post-install checks. Tell me what you changed and call out any manual steps you could not complete.
I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Then review README.md for any prerequisites, environment setup, or post-install checks. Summarize what changed and any follow-up checks I should run.
Build bulletproof spreadsheets: financial models, dashboards, data systems, and automation. Platform-agnostic methodology for Google Sheets, Excel, and LibreOffice.
Score your spreadsheet /16: SignalHealthySickNamed ranges for all key inputsβ Uses named rangesβ Raw cell references everywhereInputs separated from calculationsβ Clear input sectionβ Hardcoded values in formulasNo circular referencesβ Clean dependency chainβ Iterative calculation warningsDocumentation/comments existβ README sheet + cell notesβ "What does this formula do?"Error handling in formulasβ IFERROR/IFNA wrappingβ #REF! #N/A scattered everywhereConsistent formattingβ Style guide followedβ Random fonts, colors, sizesVersion history/backupβ Named versions + changelogβ "Final_v3_REAL_final.xlsx"Data validation on inputsβ Dropdowns + range constraintsβ Free-text in structured fields Score: 0-4 π΄ rebuild | 5-8 π‘ refactor | 9-12 π’ optimize | 13-16 π΅ production-grade
spreadsheet_brief: name: "[Descriptive Name]" purpose: "[What decision does this support?]" owner: "[Who maintains this]" audience: "[Who uses this β technical level]" update_frequency: "[Real-time / Daily / Weekly / Monthly / Ad-hoc]" data_sources: - source: "[Where data comes from]" method: "[Manual / Import / API / IMPORTRANGE / Power Query]" refresh: "[How often]" outputs: - "[Dashboard / Report / Export / Decision support]" complexity_tier: "[Simple / Standard / Complex / Enterprise]" platform: "[Google Sheets / Excel / Both]" kill_criteria: - "If >50 users need simultaneous editing β move to database" - "If >100K rows β move to database or BI tool" - "If requires audit trail β move to proper system"
TierRowsSheetsUsersFormulasExampleSimple<1K1-31-3BasicBudget tracker, checklistStandard1K-10K3-83-10IntermediateFinancial model, project trackerComplex10K-50K8-1510-30AdvancedMulti-dept dashboard, CRMEnterprise50K+15+30+ExpertData warehouse substitute (π© migrate)
ScenarioBetter Tool>100K rows of dataDatabase (PostgreSQL, SQLite)>10 concurrent editorsWeb app or AirtableComplex relational data (3+ entity types)Database + appNeeds audit trail / compliancePurpose-built systemReal-time data processingETL pipeline + BI toolVersion-controlled code logicActual code (Python, JS) Rule: Spreadsheets are prototyping tools that become production systems by accident. Know when to graduate.
π Workbook βββ π README β Purpose, instructions, changelog βββ π Dashboard β Charts, KPIs, summary (output only) βββ βοΈ Config β Settings, parameters, dropdowns βββ π₯ Data_Input β Raw data entry or imports βββ π§ Calculations β All formulas and transformations βββ π Analysis β Pivot tables, scenarios, what-if βββ π€ Output β Formatted reports for export/print βββ ποΈ Reference β Lookup tables, constants, mappings
One direction of flow β Data flows leftβright or topβbottom. Never circular. Inputs separate from calculations β NEVER hardcode numbers in formulas. Use named ranges. One fact in one place β If a value is used in 3 places, define it once and reference it. Color code by purpose β Blue = input, Black = formula, Green = linked from other sheet, Red = warning. Freeze panes on every data sheet β Header row and label columns always visible. Protect formula cells β Lock everything except input cells. Prevent accidental overwrites. README sheet is mandatory β Every workbook starts with purpose, instructions, and changelog.
Sheets: PascalCase β Dashboard, Raw_Data, Config Named Ranges: SCREAMING_SNAKE β TAX_RATE, START_DATE, REVENUE_TARGET Tabs: Prefix with emoji or number for sort order β 01_Dashboard, 02_Config Files: YYYY-MM-DD_Description_vX.xlsx
ColorMeaningWhen to Useπ΅ Light blue backgroundUser input cellEditable fieldsβ¬ Black textFormula/calculatedAuto-populated cellsπ’ Green textLinked from other sheetCross-sheet referencesπ΄ Red text/backgroundWarning/errorValidation failures, negative valuesπ‘ Yellow backgroundAssumptionKey assumptions that drive the modelβ¬ Grey backgroundReference/lockedConstants, lookup tables
LevelTechniquesExampleL1 BasicSUM, AVERAGE, COUNT, IF, CONCATENATE=SUM(B2:B100)L2 IntermediateVLOOKUP/XLOOKUP, SUMIFS, INDEX/MATCH, TEXT=XLOOKUP(A2,Ref!A:A,Ref!B:B)L3 AdvancedARRAYFORMULA, QUERY, INDIRECT, nested IFs=QUERY(Data!A:F,"SELECT A,SUM(F) GROUP BY A")L4 ExpertLAMBDA, MAP/REDUCE, LET, dynamic arrays, MAKEARRAY=LET(data,A2:A100,filtered,FILTER(data,data>0),SORT(filtered))
Lookup β Always Prefer XLOOKUP/INDEX-MATCH Over VLOOKUP β VLOOKUP (fragile β breaks when columns inserted): =VLOOKUP(A2, Data!A:D, 4, FALSE) β XLOOKUP (Excel 365 / Google Sheets): =XLOOKUP(A2, Data!A:A, Data!D:D, "Not Found") β INDEX/MATCH (universal β works everywhere): =INDEX(Data!D:D, MATCH(A2, Data!A:A, 0)) Multi-Criteria Lookup =XLOOKUP(1, (Data!A:A=B2)*(Data!B:B=C2), Data!D:D, "Not Found") Or INDEX/MATCH array (Ctrl+Shift+Enter in older Excel): =INDEX(Data!D:D, MATCH(1, (Data!A:A=B2)*(Data!B:B=C2), 0)) Conditional Aggregation Single condition: =SUMIF(Category, "Sales", Amount) Multiple conditions: =SUMIFS(Amount, Category, "Sales", Region, "US", Date, ">="&DATE(2025,1,1)) Count with conditions: =COUNTIFS(Status, "Active", Score, ">80") Average with conditions: =AVERAGEIFS(Score, Department, "Engineering", Status, "Active") Date Calculations Working days between dates: =NETWORKDAYS(Start, End, Holidays) Add working days: =WORKDAY(Start, 10, Holidays) Month-end date: =EOMONTH(A2, 0) Quarter from date: =ROUNDUP(MONTH(A2)/3, 0) Fiscal year (Apr-Mar): =IF(MONTH(A2)>=4, YEAR(A2), YEAR(A2)-1) Text Manipulation Extract domain from email: =MID(A2, FIND("@",A2)+1, LEN(A2)) Proper case with exceptions: =PROPER(SUBSTITUTE(LOWER(A2)," llc"," LLC")) Clean messy data: =TRIM(CLEAN(SUBSTITUTE(A2, CHAR(160), " "))) Dynamic Arrays (Excel 365 / Google Sheets) FILTER: =FILTER(Data, Data[Status]="Active", Data[Amount]>1000) SORT: =SORT(FILTER(Data, Data[Region]="US"), 3, -1) UNIQUE: =UNIQUE(Data[Category]) SEQUENCE: =SEQUENCE(12, 1, DATE(2025,1,1), 30) β 12 monthly dates Google Sheets QUERY (Power Feature) Basic aggregation: =QUERY(Data!A:F, "SELECT A, SUM(F) WHERE B='Active' GROUP BY A ORDER BY SUM(F) DESC LABEL SUM(F) 'Total Revenue'") Date filtering: =QUERY(Data!A:F, "SELECT A, B, F WHERE C >= date '"&TEXT(B1,"yyyy-MM-dd")&"' ORDER BY F DESC LIMIT 10") Pivot-style: =QUERY(Data!A:F, "SELECT A, SUM(F) GROUP BY A PIVOT B") LET for Readable Complex Formulas =LET( revenue, SUMIFS(Sales!D:D, Sales!A:A, A2), costs, SUMIFS(Costs!D:D, Costs!A:A, A2), margin, (revenue - costs) / revenue, IF(revenue=0, "No Data", IF(margin > 0.3, "β Healthy", IF(margin > 0.1, "β οΈ Watch", "π΄ Critical"))) ) LAMBDA (Custom Functions) Named LAMBDA (define in Name Manager / named ranges): FISCAL_QUARTER = LAMBDA(date, "FY"&IF(MONTH(date)>=4,YEAR(date),YEAR(date)-1)&" Q"&ROUNDUP(MOD(MONTH(date)+8,12)/3,0)) MAP with LAMBDA: =MAP(A2:A100, LAMBDA(x, PROPER(TRIM(x))))
NEVER hardcode values β Use named ranges or a Config sheet Wrap external lookups in IFERROR β =IFERROR(XLOOKUP(...), "Not Found") Use LET for formulas >100 chars β Readable, debuggable, faster Prefer XLOOKUP over VLOOKUP β More flexible, no column counting One formula per cell β Don't nest 5+ functions. Break into helper columns. Comment complex formulas β Use cell notes or a documentation column Test with edge cases β Empty cells, zeros, dates before 1900, text in number fields Avoid INDIRECT for performance β It's volatile (recalculates every time) Use structured references in tables β =SUM(Table1[Amount]) not =SUM(D:D) Keep formulas auditable β Someone else (or future you) must understand them
Data TypeValidationImplementationDateDate rangeData validation: between START and ENDCurrencyNumber β₯ 0Data validation: decimal β₯ 0, format $#,##0.00Percentage0-100 or 0-1Data validation: decimal between 0 and 1CategoryDropdown listData validation: list from Reference sheetEmailContains @Custom: =ISNUMBER(FIND("@",A2))PhoneLength checkCustom: =AND(LEN(A2)>=10, LEN(A2)<=15)Required fieldNot blankCustom: =LEN(TRIM(A2))>0ID/CodeUnique + formatCustom: =AND(COUNTIF(A:A,A2)=1, LEN(A2)=8)
Step 1: Remove whitespace =TRIM(CLEAN(A2)) Step 2: Standardize case =PROPER(A2) or =UPPER(A2) Step 3: Remove duplicates Use Remove Duplicates tool or UNIQUE() Step 4: Fix dates =DATEVALUE(TEXT(A2,"YYYY-MM-DD")) Step 5: Validate =IF(AND(A2>0, A2<1000000, ISNUMBER(A2)), "β ", "β Check")
π΄ Errors β Any cell with #REF!, #N/A, #VALUE! β Red background π‘ Warnings β Values outside expected range β Yellow background π’ Positive β On-target metrics β Green text π Data bars β Numeric ranges β Proportional bars π― Icons β Status indicators β Traffic light icon sets
π Financial Model βββ π Cover β Model name, version, date, author βββ βοΈ Assumptions β ALL inputs here (blue cells), scenarios βββ π Revenue β Revenue build-up by product/segment βββ π COGS β Cost of goods/services βββ π OpEx β Operating expenses by category βββ π P&L β Income statement (auto-calculated) βββ π Balance_Sheet β Assets, liabilities, equity βββ π Cash_Flow β Operating, investing, financing βββ π DCF β Discounted cash flow valuation βββ π Scenarios β Bull/Base/Bear cases βββ π KPIs β Key metrics dashboard βββ π Charts β Visualizations
saas_revenue: mrr_start: "=PREVIOUS_MONTH_MRR" new_mrr: "=NEW_CUSTOMERS * ARPU" expansion_mrr: "=EXISTING * EXPANSION_RATE / 12" contraction_mrr: "=EXISTING * CONTRACTION_RATE / 12" churn_mrr: "=EXISTING * CHURN_RATE / 12" mrr_end: "=MRR_START + NEW + EXPANSION - CONTRACTION - CHURN" arr: "=MRR_END * 12" unit_economics: cac: "=TOTAL_SALES_MARKETING / NEW_CUSTOMERS" ltv: "=ARPU / MONTHLY_CHURN_RATE" ltv_cac_ratio: "=LTV / CAC # Target: >3.0" cac_payback_months: "=CAC / ARPU # Target: <12"
=SWITCH(SCENARIO_SELECTOR, "Bull", Assumptions!B2 * 1.3, "Base", Assumptions!B2, "Bear", Assumptions!B2 * 0.7, Assumptions!B2) Or with CHOOSE: =CHOOSE(SCENARIO_INDEX, BEAR_VALUE, BASE_VALUE, BULL_VALUE)
NPV: =NPV(DISCOUNT_RATE, CF1:CF10) + INITIAL_INVESTMENT IRR: =IRR(CF_RANGE, guess) XIRR: =XIRR(CF_VALUES, CF_DATES) β irregular cash flows PMT: =PMT(RATE/12, NPER*12, -PV) β loan payment Compound growth: =FV * (1 + RATE)^YEARS CAGR: =(END_VALUE/START_VALUE)^(1/YEARS) - 1 Break-even units: =FIXED_COSTS / (PRICE - VARIABLE_COST)
βββββββββββββββββββββββββββββββββββββββββββββββββββ β π Dashboard Title Period: [Dropdown] β β Last Updated: [Auto] Filter: [Dropdown] β ββββββββββββ¬βββββββββββ¬βββββββββββ¬βββββββββββββββββββ€ β KPI 1 β KPI 2 β KPI 3 β KPI 4 β β $1.2M β 45% β 128 β $47 β β β² 12% β βΌ -3% β β² 8% β β Flat β ββββββββββββ΄βββββββββββ΄βββββββββββ΄βββββββββββββββββββ€ β β β [Primary Chart β Revenue Trend] β β β βββββββββββββββββββββββ¬ββββββββββββββββββββββββββββββββ€ β [Secondary Chart] β [Table / Top Items] β β [Category Split] β [Ranked List] β βββββββββββββββββββββββ΄ββββββββββββββββββββββββββββββββ
Current value: =SUMIFS(Data!E:E, Data!A:A, ">="&PERIOD_START, Data!A:A, "<="&PERIOD_END) Previous value: =SUMIFS(Data!E:E, Data!A:A, ">="&PREV_START, Data!A:A, "<="&PREV_END) Change %: =(CURRENT - PREVIOUS) / ABS(PREVIOUS) Indicator: =IF(CHANGE>0.05, "β²", IF(CHANGE<-0.05, "βΌ", "β")) Display: =INDICATOR & " " & TEXT(ABS(CHANGE), "0.0%")
Data PatternBest ChartAvoidTrend over timeLine chartPie chartPart of wholeStacked bar or donut3D pieComparisonHorizontal barRadar chartDistributionHistogramLine chartRelationshipScatter plotBar chartKPI vs targetBullet chart or gaugeComplex chartGeographicHeat map or filled mapBar chart
Title = Insight, not description. "Revenue grew 23% in Q3" not "Q3 Revenue Chart" Start Y-axis at zero for bar charts. Line charts can truncate with clear labeling. Max 5-7 data series per chart. Use "Other" category for the rest. Remove chartjunk β No 3D effects, gradient fills, excessive gridlines. Use consistent colors β Same category = same color across all charts. Label directly on chart where possible. Minimize legend lookups. Sort meaningfully β By value (largestβsmallest) or chronologically. Never alphabetically unless it's the only logical order.
Filter by dropdown: 1. Config sheet: Data validation dropdown for Region, Period, Category 2. Dashboard formulas use dropdown value: =SUMIFS(Data!E:E, Data!C:C, CONFIG_REGION, Data!A:A, ">="&CONFIG_START) Sparklines (in-cell mini charts): =SPARKLINE(B2:M2, {"charttype","line"; "color","#2563eb"; "linewidth",2})
SourceMethodRefreshCSV/Excel fileManual import / Power QueryManualGoogle Sheets (other)IMPORTRANGEAuto (varies)Web page tableIMPORTHTML / Power QueryAuto / manualAPI / JSONIMPORTDATA / Apps Script / Power QueryScheduledDatabasePower Query / ODBCScheduledAnother sheet (same workbook)Direct referenceReal-time
From another spreadsheet: =IMPORTRANGE("spreadsheet_url", "Sheet1!A1:D100") From web page (table): =IMPORTHTML("url", "table", 1) From CSV: =IMPORTDATA("csv_url") From XML/RSS: =IMPORTXML("url", "//item/title")
Rules: 1. Authorize on first use (one-time popup) 2. Use named ranges in source spreadsheet 3. Wrap in IFERROR for graceful failures 4. Minimize imported range β don't import entire sheets 5. Cache results if auto-refresh causes slowness Pattern: =IFERROR( IMPORTRANGE(SOURCE_URL, "Data!A1:D"&SOURCE_ROW_COUNT), "β οΈ Connection failed β check source spreadsheet access" )
// Auto-populate timestamp on edit function onEdit(e) { const sheet = e.source.getActiveSheet(); if (sheet.getName() === "Data" && e.range.getColumn() >= 2) { sheet.getRange(e.range.getRow(), 1).setValue(new Date()); } } // Email report on schedule (set up trigger) function sendWeeklyReport() { const ss = SpreadsheetApp.getActiveSpreadsheet(); const dashboard = ss.getSheetByName("Dashboard"); const kpi1 = dashboard.getRange("B2").getDisplayValue(); const kpi2 = dashboard.getRange("C2").getDisplayValue(); MailApp.sendEmail({ to: "team@company.com", subject: `Weekly Report β ${Utilities.formatDate(new Date(), "GMT", "MMM dd")}`, htmlBody: `<h2>Weekly KPIs</h2><p>Revenue: ${kpi1}</p><p>Growth: ${kpi2}</p>` }); } // Auto-archive rows older than 90 days function archiveOldRows() { const ss = SpreadsheetApp.getActiveSpreadsheet(); const data = ss.getSheetByName("Data"); const archive = ss.getSheetByName("Archive"); const cutoff = new Date(); cutoff.setDate(cutoff.getDate() - 90); const rows = data.getDataRange().getValues(); for (let i = rows.length - 1; i >= 1; i--) { if (rows[i][0] < cutoff) { archive.appendRow(rows[i]); data.deleteRow(i + 1); } } }
' Auto-format new entries Private Sub Worksheet_Change(ByVal Target As Range) If Not Intersect(Target, Range("A:A")) Is Nothing Then Application.EnableEvents = False Target.Offset(0, 5).Value = Now Application.EnableEvents = True End If End Sub ' Refresh all Power Query connections Sub RefreshAllData() ThisWorkbook.RefreshAll MsgBox "All data refreshed at " & Now End Sub
TaskGoogle SheetsExcelOn-edit timestampApps Script onEditVBA Worksheet_ChangeScheduled emailApps Script + triggerPower AutomateData refreshApps Script + triggerPower Query + schedulePDF exportApps ScriptVBA + SaveAsCross-system syncApps Script + APIPower Automate / VBACustom functionsApps Script CUSTOM_FUNCTIONVBA UDF or LAMBDA
IssueImpactFixINDIRECT/OFFSET (volatile)π΄ CriticalReplace with INDEX/XLOOKUPWhole-column references (A:A)π΄ CriticalUse bounded ranges (A2:A1000)ARRAYFORMULA on huge rangesπ‘ HighLimit range or use QUERYExcessive conditional formattingπ‘ HighReduce rules, use bounded rangesToo many IMPORTRANGEπ‘ HighConsolidate, cache locallyUnused sheets with formulasπ’ MediumDelete or clear unused sheetsComplex nested IFsπ’ MediumReplace with SWITCH/IFS/XLOOKUPHeavy formatting (images, shapes)π’ MediumMinimize decorative elements
Keep workbook under 5M cells (ideal: <500K) Limit IMPORTRANGE to <10 per workbook Use QUERY instead of multiple SUMIFS when possible Put ARRAYFORMULA results on a dedicated calc sheet Avoid NOW()/TODAY() in frequently-recalculated areas
Use tables (Ctrl+T) for structured data β better performance than raw ranges Power Query > formulas for data transformation XLOOKUP > VLOOKUP > INDEX/MATCH for speed Turn off auto-calculation during bulk edits: Application.Calculation = xlManual Use Power Pivot for >100K rows instead of formulas
RolePermissionsImplementationOwnerFull controlOriginal creatorEditorEdit data, not structureShare with edit, protect structure sheetsAnalystEdit inputs, view outputsProtect all except input cellsViewerView onlyShare as viewerCommenterView + commentShare as commenter
1. Protect entire workbook structure (prevent sheet add/delete/rename) 2. Protect each sheet 3. UNLOCK only input cells (blue-coded) 4. Set password for admin overrides 5. Document which cells are editable in README
Naming: YYYY-MM-DD_ModelName_vX.Y X = major change (new section, restructure) Y = minor change (formula fix, data update) Changelog (on README sheet): | Date | Version | Author | Change | |------|---------|--------|--------| | 2025-03-15 | 2.1 | Jane | Added Q2 actuals | | 2025-03-01 | 2.0 | John | Restructured revenue model |
Never edit someone else's model without telling them Use named versions before major changes (Google Sheets: File β Version history β Name current version) Comment on cells β don't explain in chat, explain in the sheet One editor at a time for complex formula areas β use "editing" flag cell Weekly review β Check for broken references, stale data, unused sheets
Columns: Month | Category | Subcategory | Budgeted | Actual | Variance | % Variance KPIs: Total Budget | Total Spent | Remaining | Burn Rate | Projected Year-End Charts: Budget vs Actual (bar), Spend by Category (donut), Monthly Trend (line) Formulas: Variance: =Actual - Budgeted % Variance: =IF(Budgeted=0, "", (Actual-Budgeted)/ABS(Budgeted)) Burn Rate: =SUMIFS(Actual, Month, "<="&TODAY()) / (MONTH(TODAY()) * Total_Budget / 12)
Columns: Task | Owner | Status | Priority | Start | Due | Days Left | % Complete | Notes Status: π΄ Blocked | π‘ In Progress | π’ Complete | βͺ Not Started Formulas: Days Left: =IF(Status="π’ Complete", "β ", MAX(0, Due-TODAY())) Overdue flag: =IF(AND(Status<>"π’ Complete", Due<TODAY()), "β οΈ OVERDUE", "") Completion %: =COUNTIF(Status, "π’ Complete") / COUNTA(Status) Dashboard: Gantt-style with conditional formatting date bars
Columns: Deal | Company | Stage | Amount | Probability | Weighted | Owner | Close Date | Days in Stage | Next Action Stages: Prospect (10%) | Qualified (25%) | Proposal (50%) | Negotiation (75%) | Closed Won (100%) | Lost (0%) Formulas: Weighted: =Amount * Probability Pipeline: =SUMIFS(Weighted, Stage, "<>"&"Lost", Stage, "<>"&"Closed Won") Velocity: =AVERAGE(Days_to_Close_for_Won_Deals) Dashboard: Pipeline by stage (funnel), Forecast vs quota, Win rate trend
Columns: Objective | Key Result | Metric | Start | Current | Target | Score | Status Score: =MIN(1, (Current - Start) / (Target - Start)) Status: =IF(Score>=0.7, "π’", IF(Score>=0.4, "π‘", "π΄")) Overall: =AVERAGE(Score) across all KRs per Objective
DimensionWeightScoringArchitecture15%Clear sheet structure, data flow direction, READMEFormula Quality20%Named ranges, error handling, no hardcodingData Validation15%Input constraints, dropdowns, type checkingVisual Design10%Consistent formatting, color coding, readabilityDocumentation15%Cell notes, README, changelog, instructionsPerformance10%No volatile functions, bounded ranges, fast recalcError Handling10%IFERROR wrappers, validation checks, no broken refsMaintainability5%Protected structure, clear ownership, versioned
Check for #REF! and #N/A errors across all sheets Verify data source connections are refreshing Review and update assumptions (Config sheet) Remove unused sheets and named ranges Check file size β if growing, archive old data Test all dropdowns and validation rules Update README with any changes made Create named version snapshot
MistakeImpactFixHardcoded numbers in formulasCan't audit or updateNamed ranges + Config sheetNo error handling#N/A cascades break everythingIFERROR on all lookupsWhole-column referencesSlow, crashes on large dataBounded rangesCircular referencesUnpredictable resultsRedesign calculation flowNo documentation"What does this formula do?"README + cell notesNo data validationGarbage in = garbage outDropdowns + constraintsOne mega-sheetUnmaintainable, slowSplit by functionNo backup/versionsOne mistake = lost workNamed versions + exportsCopy-paste instead of formulasStale data, inconsistenciesUse references/IMPORTRANGEManual processes that should be automatedError-prone, time-wastingScripts or scheduled refreshes
XLOOKUP works in both (Excel 365 + Google Sheets) QUERY is Google Sheets only β replace with Power Query in Excel ARRAYFORMULA is Google Sheets β Excel uses Ctrl+Shift+Enter or dynamic arrays Apps Script β no Excel equivalent. Use VBA or Power Automate. Power Query / Power Pivot β no Google Sheets equivalent. Use QUERY or BigQuery connector. Test all formulas after migration. Named ranges may break.
=Amount * XLOOKUP(Currency, FX_Rates!A:A, FX_Rates!B:B) Or with GOOGLEFINANCE: =Amount * GOOGLEFINANCE("CURRENCY:GBPUSD")
Split data across multiple sheets by time period Use pivot tables / QUERY instead of row-level formulas Import summarized data, not raw transactions Consider BigQuery + Connected Sheets (Google) or Power Pivot (Excel) If you need >500K rows, graduate to a database
When working with spreadsheets, you can ask: "Audit this spreadsheet for quality issues" "Design a financial model for [business type]" "Create a dashboard layout for [metrics]" "Write the formulas for [calculation]" "Optimize this spreadsheet for performance" "Build a data validation system for [input type]" "Create an Apps Script to [automate task]" "Design a template for [use case]" "Review this formula and suggest improvements" "Help me migrate this from Excel to Google Sheets" "Set up a scenario analysis for [model]" "Build a KPI tracker for [department]"
This skill covers spreadsheet engineering methodology. For industry-specific financial models, dashboards, and templates: π° SaaS Context Pack β MRR/ARR models, SaaS metrics dashboards, cohort analysis templates π¦ Fintech Context Pack β Financial modeling, risk calculators, compliance trackers π Manufacturing Context Pack β Production trackers, inventory models, cost analysis ποΈ Construction Context Pack β Project budgets, bid calculators, resource planning $47 per pack β Complete AI agent context for your industry. Browse all packs: AfrexAI Storefront β
afrexai-data-storytelling β Data visualization & dashboard design methodology afrexai-personal-finance β Complete personal finance operating system afrexai-product-analytics β Product metrics & analytics engineering afrexai-fpa-engine β Financial planning & analysis afrexai-automation-strategy β Workflow automation methodology Built by AfrexAI β AI agents that compound capital and code.
Workflow acceleration for inboxes, docs, calendars, planning, and execution loops.
Largest current source with strong distribution and engagement signals.