How to generate cell dependency documentation for excel models before team handoff
- Step 1Open the tool (Pro) — Sign in on Pro or higher — the tool is Pro-gated and Free returns "Cell Dependency Map requires Pro tier."
- Step 2Upload the model — Drop the
.xlsxon the upload area; parsing is local. XLSX only — there is no CSV path because a CSV carries no formulas to document. - Step 3Choose each output to document — For every headline figure (valuation, KPI, total), enter its address in Target cell. The field auto-uppercases and ignores
$. - Step 4Set the sheet name — Type the exact tab name in Sheet name so the right cell is found; leave blank only if it is on the first tab.
- Step 5Run once per output — Each run prints one complete tree. Repeat for each key output you want in the handoff doc.
- Step 6Paste into your docs — Copy each text tree into a code block in Confluence, Notion, a Markdown README, or a Word table. Label it with the output it documents.
Every control the tool actually exposes
The whole UI is two text boxes — there is no depth slider, no chart toggle, no export-format picker, no range expansion. Anything not in this table does not exist in the tool.
| Field | Type | Required | Default | What it does |
|---|---|---|---|---|
| Target cell | Text box (auto-uppercased) | Yes | (none) | The cell whose precedents you trace, e.g. B12. $ signs are stripped, so $B$12 and B12 behave identically. Lower-case is forced to upper-case as you type. |
| Sheet name | Text box | No | First sheet in the workbook | Which sheet contains the target cell. Leave blank to use the first sheet. Must match the tab name exactly (case-sensitive in the lookup). |
How the text tree marks each cell
Output is a plain-text report (not a diagram). Every node renders as one line; the marker tells you what kind of cell it is.
| Node renders as | Meaning |
|---|---|
Sheet1!B12 = =SUM(C1:C10) | A formula cell. The formula is shown verbatim after =. Its precedents are traced on the lines below. |
Sheet1!A1 = "1250" (hardcoded) | A leaf input — no formula. The value shown is the cell's displayed text; (hardcoded) flags it as a model assumption. |
Sheet1!A1 = (empty) | The referenced cell is blank. Common when a formula points at a yet-to-be-filled input. |
Sheet1!B12 (already traced ↑) | This cell was reached earlier in the trace. It is NOT re-expanded — scroll up to its first occurrence for the full sub-tree. |
Cell Sheet1!B12 not found or has no dependencies. | The target address is empty or absent on that sheet, so there was nothing to trace. |
What the reference parser does and does not follow
Precedents are pulled from each formula string by a regular expression. Knowing its limits prevents surprises when a branch looks shorter than you expected.
| Reference style in a formula | Followed? | Behaviour |
|---|---|---|
Plain cell A1, B12 | Yes | Followed and expanded on the current sheet. |
Range C1:C10 | Partly | Only the FIRST cell (C1) is walked; the rest of the range is not individually traced. |
Cross-sheet Sheet2!B5 | Yes | Followed; the node is labelled with its sheet name. |
Quoted sheet 'P&L'!B5, 'Q1-Actuals'!A3 | No | Sheet names with spaces are fine, but &, -, . or quotes are not matched, so the link is dropped or mis-attributed to the current sheet. |
Named range Revenue, table Table1[Amount] | No | Names and structured table references are not resolved to addresses, so they are skipped. |
Absolute $B$12 | Yes | $ is ignored; treated identically to B12. |
Cookbook
Real documentation snippets. The right-hand text is exactly what you paste into a code block — it renders as-is in Confluence, Notion, GitHub Markdown, and Word.
A README block for one KPI
Document how the headline gross-margin KPI is computed so the next owner sees the chain at a glance.
## How Gross Margin % (Summary!B8) is calculated Dependency tree for Summary!B8: Summary!B8 = =(Summary!B6-Summary!B7)/Summary!B6 └─ Summary!B6 = =Sales!D2 (Revenue) └─ └─ Sales!D2 = "4200000" (hardcoded) └─ Summary!B7 = =Costs!D2 (COGS) └─ └─ Costs!D2 = "2730000" (hardcoded)
Calling out the editable inputs
Pair the tree with a one-line note pointing at the (hardcoded) leaves the next owner is allowed to change.
Inputs to update each month (the (hardcoded) leaves): - Sales!D2 -> current month revenue - Costs!D2 -> current month COGS Everything else is formula-driven; do not overtype it. (Generated from the dependency tree of Summary!B8.)
Documenting a shared driver
Show that one FX rate cell feeds several outputs, so a change there ripples widely.
Dependency tree for Summary!C5: Summary!C5 = =Calc!E10*Rates!B1 └─ Calc!E10 = =Calc!E8+Calc!E9 └─ └─ Calc!E8 = "..." (hardcoded) └─ └─ Calc!E9 = "..." (hardcoded) └─ Rates!B1 = "1.27" (hardcoded) <-- shared FX rate, also feeds C6, C7
Noting a depth cut for reviewers
When a chain exceeds 8 levels, add a breadcrumb in the doc so the reader knows where the trace was continued.
Dependency tree for Summary!B12: Summary!B12 = =Calc!Z40*1.05 └─ Calc!Z40 = =Calc!Z38+Calc!Z39 └─ ... (continues; trace cut at 8 levels) NOTE: full chain is 11 deep. See the separate tree for Calc!Z40 (re-run with Calc!Z40 as the target to document levels 9-11).
A cross-sheet handoff summary
One tree captures the multi-tab data flow a new analyst would otherwise have to discover by clicking arrows.
Dependency tree for Dashboard!A1: Dashboard!A1 = =Summary!B12 └─ Summary!B12 = =Calc!E20*Summary!B13 └─ └─ Calc!E20 = =Inputs!B2 └─ └─ └─ Inputs!B2 = "5400000" (hardcoded) └─ └─ Summary!B13 = "8.5" (hardcoded) Data flows: Inputs -> Calc -> Summary -> Dashboard.
Edge cases and what actually happens
Pasting into Confluence/Notion
SupportedWrap the tree in a code block (triple backticks in Markdown, or the Code macro in Confluence). The monospaced font keeps the └─ connectors and indentation aligned. Plain paragraph text will reflow and break the alignment.
Documentation drifts after edits
Stale riskThe tree reflects the model at the moment you ran it. If formulas change, re-generate the affected trees — there is no live link. Note the generation date next to each tree in your docs.
Chain longer than 8 levels
Truncated silentlyThe trace stops at level 8 with no marker. For documentation, add your own breadcrumb (as in the cookbook) and generate a second tree from a level-8 cell so the doc covers the whole chain.
Named ranges in formulas
SkippedIf the model documents itself with friendly names (Revenue, Tax_Rate), those are not resolved, so they will not appear as traced nodes. Mention this caveat in the doc, or document the underlying cell directly.
Range references
First cell onlyA SUM(C2:C50) shows only C2 in the tree. For documentation, annotate that the node represents the whole range so the next owner is not misled into thinking only one cell feeds the total.
Multiple outputs to document
By designThere is no multi-target mode; run the tool once per output cell. For a thorough handoff, generate one tree per headline figure and collect them under labelled headings.
Tab name with special characters
Not followedA reference into a tab named P&L or 2024-Actuals is not followed by the parser, leaving a gap in the documented chain. Rename such tabs to plain alphanumerics before documenting, or note the manual link.
Free tier
Pro requiredGenerating handoff documentation needs Pro or higher; Free returns the Pro-required message. Pro covers 50 MB / 100,000-row models.
Frequently asked questions
Can I generate dependency maps for multiple cells in one pass?
No — run the tool once per target cell, and each run produces one complete tree. For a handoff doc, generate one tree per headline output and paste them under labelled headings.
Is the output format suitable for Confluence or Notion?
Yes. The tree is monospaced text with └─ connectors and indentation, so it renders cleanly inside a code block (Confluence Code macro, Notion code block, or Markdown triple-backticks). Avoid pasting it as plain paragraph text, which reflows and breaks the alignment.
Will the documentation stay in sync if the model changes?
No — it is a snapshot, not a live link. Re-run the trace after any formula change and replace the affected tree. Stamp each tree with the date you generated it so reviewers know its vintage.
How do I tell the next owner which cells they can edit?
The leaves tagged (hardcoded) are the model's inputs. List those addresses next to the tree as the cells the new owner should update, and note that everything else is formula-driven and should not be overtyped.
Does it document cross-sheet logic?
Yes for normally named tabs — cross-sheet references are followed and labelled with the sheet, so a single tree can capture an Inputs→Calc→Summary flow. Tabs with &, -, or . in the name are the exception and are not followed.
What about formulas that use named ranges?
Named ranges and table references are not resolved to cell addresses, so they will not show as traced nodes. If your model uses them heavily, document the underlying cells directly and add a note about the named-range mapping.
How deep does the documented chain go?
Up to 8 levels — a hardcoded cap. There is no depth control and no "trace cut" marker, so for chains deeper than 8, add your own breadcrumb and generate a follow-up tree from a level-8 cell.
Can I export it to PDF for the handoff pack?
Copy the text tree into Word, Google Docs, or your docs platform and export that to PDF. The tool itself emits a text report, not a PDF or image.
Will documenting the model upload it anywhere?
No. The workbook is parsed and traced entirely in your browser with SheetJS — useful when the model you are handing off is confidential.
What else should go in a handoff pack besides the dependency trees?
Map where formulas live with the Formula Highlighter, list any links to other workbooks with the External Link Auditor, and note any cells that error with the Error Locator so the next owner inherits a clean, documented model.
Can I also generate a plain-English explanation of the formulas?
Yes — drop any single formula from the tree into the Formula Explainer for a natural-language description.
What file types can I trace?
XLSX workbooks only — that is the single accepted format for this tool. A standalone CSV has no formulas, so there is nothing to trace; if your data is in CSV, open it in Excel/Sheets, build or paste the formulas, and save as .xlsx first.
Does my workbook get uploaded anywhere?
No. The whole trace runs in your browser using SheetJS — the workbook is parsed locally and never sent to a server. That matters for confidential models: you can run the trace offline once the page has loaded.
Why does it require Pro?
The Cell Dependency Map is gated to Pro tier or higher. On the Free tier the tool returns "Cell Dependency Map requires Pro tier." The free excel limits are 5 MB / 10,000 rows / 1 file; Pro raises that to 50 MB / 100,000 rows / 5 files.
Privacy first
Every JAD Excel tool runs entirely in your browser using SheetJS and ExcelJS. Your spreadsheets, formulas, and data never leave your device — verified by zero outbound network requests during processing.