linexcel
Data lineage analysis for Excel workbooks.
Extracts every formula, groups stretched patterns (R1C1 canonicalization), builds a dependency graph (cells, ranges, defined names, VBA), decomposes composite functions with step-by-step evaluation, and optionally documents calculations via the AI provider of your choice.
Install
uv add linexcel # pip install linexcel
uv add linexcel[ai] # + AI documentation (optional)
Note:
linexceldepends on formualizer, a Rust-based spreadsheet engine. Prebuilt wheels are available for Linux, macOS, and Windows. If no wheel matches your platform, a Rust toolchain is required to build from source.
Usage
from linexcel import analyze
result = analyze("workbook.xlsx")
result # interactive graph in marimo / Jupyter
result.save_html("out.html") # standalone offline HTML viewer
result.stats # {totalFormulas, totalNodes, ...}
result.warnings # list[str]
Everything above is local and needs no key. AI documentation is optional, and you choose the provider — nothing is sent anywhere until you name one:
# A local runtime keeps the workbook on your machine and costs nothing
docs = result.document(base_url="http://localhost:11434/v1", model="llama3.1")
overview = result.document_workbook(base_url="http://localhost:11434/v1", model="llama3.1")
result.save_html("out.html", docs=docs, workbook_doc=overview, language="en")
Any OpenAI-compatible endpoint works the same way — a local Ollama or vLLM
runtime, a gateway such as OpenRouter, a vendor's own API — and provider=
takes any callable for anything else. See
Choosing an AI provider.
Features
- Formula extraction via formualizer (Rust engine)
- Stretched pattern grouping — 1000 identical formulas → 1 node
- Dependency graph — cells, ranges, defined names, VBA procedures
- Step-by-step evaluation — each operator/function evaluated individually
- Standalone HTML viewer — Cytoscape.js embedded, fully offline, keyboard-navigable, light by default with a dark toggle
- Values you can check — each figure states whether it was read from the workbook or recalculated by linexcel, and shows both side by side when the file disagrees
- Workbook context — sheet previews, comments, merged ranges, frozen panes and hidden columns, plus optional LibreOffice-rendered screenshots
- AI documentation — vendor-neutral, grounded in deterministic lineage, with token accounting and a spend ceiling
- Nine interface languages — for both the report and the AI prompts
Documentation
| Guide | |
|---|---|
| Quick start | Analyse a workbook, explore it, export it |
| Lineage coverage | What is in the graph, and what is not |
| HTML export | The standalone offline report |
| Workbook context & screenshots | What a reader sees, not only what the file computes |
| Choosing an AI provider | Ollama, OpenRouter, any OpenAI-compatible endpoint, or your own callable |
| AI documentation | Provable cards, token usage, token_budget= |
| Languages | The nine supported locales |
| Data handling | What leaves the machine, and when |
| API reference | LineageResult, analyzer, aidoc, … |
Sample output
Every image below is captured from a real report by
scripts/capture_viewer.py, so they cannot drift from the viewer without the
readme-shots commit hook noticing.
A node, documented
Formula, step-by-step evaluation, precedents and dependents, and the AI card written from that same deterministic dossier.
Workbook overview
Sheet context
Each sheet rendered whole, over a grid of its first cells, alongside its comments, frozen panes, merged ranges and hidden columns.
Security
Analysis is entirely local. AI documentation sends dossiers only to the provider you configure — see Data handling.
Please report vulnerabilities privately according to SECURITY.md. Do not include sensitive workbooks or credentials in public issues.
Changelog
See CHANGELOG.md.
License
MIT — see LICENSE.
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file linexcel-1.1.0.tar.gz.
File metadata
- Download URL: linexcel-1.1.0.tar.gz
- Upload date:
- Size: 1.5 MB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.12.3 {"installer":{"name":"uv","version":"0.12.3","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
5d3f986a9e394c9dff540422f768fce74a8eefa749d1c20b5206efd51ae3e0af
|
|
| MD5 |
d675ee52729655c8d244e968084d8baa
|
|
| BLAKE2b-256 |
960d53ea796a141cd95333c31d88def54d74344efec620ae733434a07b4774d6
|
File details
Details for the file linexcel-1.1.0-py3-none-any.whl.
File metadata
- Download URL: linexcel-1.1.0-py3-none-any.whl
- Upload date:
- Size: 318.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.12.3 {"installer":{"name":"uv","version":"0.12.3","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
23dd94e6b1032b6f0ea1ed6e24b413f35aa9a09bdcaa62e0cdfe2ce0efb0e215
|
|
| MD5 |
44b0fa08fcbd9b404939344f77837998
|
|
| BLAKE2b-256 |
c4457169f0d96141c2d158b9b3da04ae736abc93936fa71a807ef47dfea3a51c
|