Skip to main content

Formula-logic analysis for spreadsheets (.xlsx, .xlsm) — the lens-family member that reads the workbook's reasoning, not its data

Project description

spreadsheet-analyser

Formula-logic analysis for spreadsheets — the lens-family member that reads a workbook's reasoning (formulas, dependencies, error cells, named ranges, hygiene smells), not its data.

records-analyser reads .xlsx via pd.read_excelcomputed values only, profiled as a data table. This reads the same bytes through openpyxl with data_only=Falseformula logic: the SUM/IF/VLOOKUP/INDIRECT calls, the cell-dependency graph, the #REF! cells, the =A1*1.075 magic numbers. Because both members ingest .xlsx, this one is explicit-only (auto_routable: false) — .xlsx continues to auto-route to records-analyser by default; invoke spreadsheet-analyser deliberately when you want formula-logic signals.

Install

pip install spreadsheet-analyser

Use

Python:

from spreadsheet_analyser import SpreadsheetAnalyser, SpreadsheetAnalysis

result: SpreadsheetAnalysis = SpreadsheetAnalyser().analyse("budget.xlsx")
print(result.overall_formulas.unique_functions)        # ['IF', 'SUM', 'VLOOKUP']
print(result.overall_formulas.max_nesting_depth)       # 4
print(result.dependencies.circular_references)         # [['Sheet1!A1', 'Sheet1!B1', 'Sheet1!A1']]
print(result.overall_errors.error_cells)               # {'#REF!': 2, '#DIV/0!': 1}

CLI:

spreadsheet-analyser budget.xlsx          # human summary
spreadsheet-analyser budget.xlsx --json   # raw JSON
spreadsheet-analyser serve                # HTTP API on port 8011
spreadsheet-analyser manifest             # capability manifest

HTTP (spreadsheet-analyser serve on port 8011):

curl -F file=@budget.xlsx http://localhost:8011/analyse
curl http://localhost:8011/health
curl http://localhost:8011/manifest

Signals

Per sheet and rolled up across the workbook:

  • Formulas — count, formula-vs-constant ratio, unique functions used, max nesting depth, longest formula, volatile functions (NOW/RAND/OFFSET/INDIRECT), hardcoded magic numbers in formulas (a hygiene smell — =A1*0.15 instead of =A1*TaxRate).
  • Dependencies — cross-sheet references, dependency-chain depth, circular references.
  • Errors#REF! / #DIV/0! / #VALUE! / #N/A / #NAME? / #NULL! / #NUM! cells.
  • Structure — sheet count, used range per sheet, named ranges, tables, charts present.

The family

Part of the lens analyser family — small single-purpose engines that compose via a shared contract (lens-contract).

What you want Use
Spreadsheet data values / profiling records-analyser (default for .xlsx)
Spreadsheet formula logic spreadsheet-analyser (this)
Any file → right engine auto-analyser

Limits

  • .xlsx and .xlsm only for v1 (.ods via odfpy is a possible follow-on).
  • Cycle detection is direct cell→cell only (not via named-range indirection).
  • "Hardcoded magic numbers" is a heuristic (numbers other than 0/1 inside formulas after stripping cell refs) — useful as a hygiene signal, not a definitive smell.

License

MIT

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

spreadsheet_analyser-0.2.0.tar.gz (71.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

spreadsheet_analyser-0.2.0-py3-none-any.whl (14.1 kB view details)

Uploaded Python 3

File details

Details for the file spreadsheet_analyser-0.2.0.tar.gz.

File metadata

  • Download URL: spreadsheet_analyser-0.2.0.tar.gz
  • Upload date:
  • Size: 71.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.0

File hashes

Hashes for spreadsheet_analyser-0.2.0.tar.gz
Algorithm Hash digest
SHA256 7768d86fd93bff4aaad0ac848ebb51d7aa2f271c128ad9830e1299506d7f9ff3
MD5 14f968130fa80807f87885d326414416
BLAKE2b-256 c0e6c4340baa13c91c52a648353e1b75e0e5fcce239a86af989fcf500df192ad

See more details on using hashes here.

File details

Details for the file spreadsheet_analyser-0.2.0-py3-none-any.whl.

File metadata

File hashes

Hashes for spreadsheet_analyser-0.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 0e56858ec511fda8493e20804b2079e2f7847129a27b1402bcaa80577f0adfda
MD5 03dd9fa624b6cbb1b4283cd7cd155faf
BLAKE2b-256 9abbd97b624bf65d59bcb0428637320822a6ad85dfa7cdb265627aacbbeaf726

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page