Skip to content

What is in the lineage, and what is not

A lineage tool is only useful if you know where it stops. This page lists what linexcel reads out of a workbook, and — more importantly — what it does not, so that a graph which looks complete can be trusted to be complete.

In the graph

Formulas Every formula cell, with its computed value and a step-by-step decomposition. Cells sharing an R1C1 pattern are grouped into one node
Cells and ranges Precedent and dependent edges, including across sheets
Defined names Workbook-scoped and sheet-scoped, resolved to the cells they point at
VBA Procedures as nodes, their internal call graph, and the ranges they read and write when the reference is written literally — Range("A1"), Cells(2, 3), [A1:B4], Worksheets("X").Range(...)
Values Read back from the workbook and recomputed, with both readings shown side by side

Represented, but not resolved

These appear in the graph as grey external reference nodes. The dependency is visible; what sits at the other end of it is not, because it is not in the file:

  • links to another workbook — '[1]Annual'!B4
  • 3-D references spanning sheets — Sheet1:Sheet3!A1
  • structured table references the engine cannot resolve
  • a defined name pointing outside the workbook

Showing them as nodes rather than dropping them is deliberate: a formula whose precedent is missing is a fact about the workbook, not a gap to hide.

Not in the graph

Power Query (Get & Transform)

Queries are not part of the lineage. A workbook whose data arrives through Power Query shows the range the query loaded into, and nothing about where that data came from — not the query, not its M source, not the table or file it reads. On such a workbook the graph is silently incomplete, which is the one failure mode this page exists to warn about.

Everything needed is in the file — the customXml part whose schema is http://schemas.microsoft.com/DataMashup carries the M source, while xl/connections.xml names each query connection and xl/queryTables/*.xml ties it to the destination ListObject and sheet range — so this is a gap to be closed, not a limitation of the format. Tracked in #34 for a release after 1.0.

Formulas the engine does not implement

The range intersection operator — =SUM(D2:D10 D5:D20) — is the one met in practice. Such a cell keeps the value stored in the file, says so in its card, and is named in the workbook warnings rather than being shown as a recalculation that never happened.

Volatile functions

TODAY(), NOW(), RAND() and RANDBETWEEN() recompute to something other than what the file stores, by definition. The value card reports the difference like any other; it is not a defect in either reading.

VBA the parser cannot follow

Range access is detected only where it is written literally. A reference built at run time — Range(addr), Cells(i, j) in a loop, Application.Evaluate — is invisible to a static reader, and no static reader can do better. The procedure still appears as a node, with its source.