Skip to main content

Streaming Excel formula evaluation engine

Project description

xlstream

CI License

xlstream is a streaming Excel formula evaluation engine written in Rust, with Python bindings. It reads .xlsx files row-by-row, evaluates formulas in a single (or two-pass) streaming traversal (no dependency graph, no full-workbook buffering), and writes the results to a new .xlsx — all in bounded memory regardless of file size.

We are not building a general-purpose spreadsheet engine. We are building the fastest, leanest Excel formula evaluator — supporting ~465 of Excel's ~500 functions, everything that fits a streaming architecture.

Performance

425x faster on the same workbook. Full benchmarks

xlstream formualizer
700k rows x 20 cols 48s 5h 40m
Peak memory 734 MB 3.3 GB
Architecture Streaming (2-pass) Full dependency graph

Supported functions

103 functions + 13 operators across 9 categories. Full list with cross-reference.

Category Count Examples
Operators 13 +, -, *, /, ^, &, %, comparisons
Logical 11 IF, IFS, SWITCH, IFERROR, AND, OR, NOT, XOR
Aggregates 15 SUM, SUMIF, SUMIFS, AVERAGE, COUNTIF, MEDIAN
Lookups 7 VLOOKUP, XLOOKUP, INDEX/MATCH, HLOOKUP, CHOOSE
Text 19 LEFT, UPPER, TRIM, CONCAT, TEXT, FIND, SUBSTITUTE
Date 12 TODAY, YEAR, EDATE, EOMONTH, DATEDIF, NETWORKDAYS
Math 23 ROUND, MOD, ABS, SQRT, LOG, SIN, PI, FLOOR
Info 10 ISNUMBER, ISTEXT, ISERROR, ISBLANK, ISREF, TYPE
Financial 6 PMT, PV, FV, NPV, IRR, RATE

Excel has ~500 functions. ~465 are streaming-compatible. We're adding more each release — see the roadmap.

Install

pip install xlstream

Usage

Python

import xlstream

result = xlstream.evaluate("input.xlsx", "output.xlsx")
# {'rows_processed': 700001, 'formulas_evaluated': 7000000, 'duration_ms': 48000}

# Parallel (row-sharded across cores)
result = xlstream.evaluate("input.xlsx", "output.xlsx", workers=8)

Rust

let summary = xlstream_eval::evaluate(&input, &output, Some(8))?;

Error handling

try:
    xlstream.evaluate("input.xlsx", "output.xlsx")
except xlstream.UnsupportedFormula as e:
    print(e)  # names the cell, formula, and reason
except xlstream.FormulaParseError as e:
    print(e)
except OSError as e:
    print(e)  # file not found, corrupt xlsx

License

Dual-licensed under Apache-2.0 or MIT, at your option.

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

xlstream-0.2.1.tar.gz (269.8 kB view details)

Uploaded Source

Built Distributions

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

xlstream-0.2.1-cp39-abi3-win_amd64.whl (1.5 MB view details)

Uploaded CPython 3.9+Windows x86-64

xlstream-0.2.1-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.5 MB view details)

Uploaded CPython 3.9+manylinux: glibc 2.17+ x86-64

xlstream-0.2.1-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (1.5 MB view details)

Uploaded CPython 3.9+manylinux: glibc 2.17+ ARM64

xlstream-0.2.1-cp39-abi3-macosx_11_0_arm64.whl (1.4 MB view details)

Uploaded CPython 3.9+macOS 11.0+ ARM64

xlstream-0.2.1-cp39-abi3-macosx_10_12_x86_64.whl (1.5 MB view details)

Uploaded CPython 3.9+macOS 10.12+ x86-64

File details

Details for the file xlstream-0.2.1.tar.gz.

File metadata

  • Download URL: xlstream-0.2.1.tar.gz
  • Upload date:
  • Size: 269.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for xlstream-0.2.1.tar.gz
Algorithm Hash digest
SHA256 5c193de547883f2ea156181e8cfe24b6648d4613c11bd6ec91d30ebe8811e081
MD5 c04df2f39cafa717d4bdd27a6f83c0a8
BLAKE2b-256 3c2ea304b93091014e90b22c7bf8e4e3173139a8e1b5c0f048105ee31732e3b1

See more details on using hashes here.

Provenance

The following attestation bundles were made for xlstream-0.2.1.tar.gz:

Publisher: release.yml on cilladev/xlstream

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file xlstream-0.2.1-cp39-abi3-win_amd64.whl.

File metadata

  • Download URL: xlstream-0.2.1-cp39-abi3-win_amd64.whl
  • Upload date:
  • Size: 1.5 MB
  • Tags: CPython 3.9+, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for xlstream-0.2.1-cp39-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 20bb49c06d24ff611218818403a63afdbf34c987d7ef40719bdbfdd0954db067
MD5 d0974ca5ae01e2d5c4ac2501f1c3ed12
BLAKE2b-256 9b0ab463fc4c2ba79f6681c23aa5d5236f70fadb201270834ab8bd94941a37f0

See more details on using hashes here.

Provenance

The following attestation bundles were made for xlstream-0.2.1-cp39-abi3-win_amd64.whl:

Publisher: release.yml on cilladev/xlstream

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file xlstream-0.2.1-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for xlstream-0.2.1-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 3548af1e0739cf488851732647e9dafe3f8d4b88424055a55b2275bae678b849
MD5 9fdc87cf69f71386b8896b0e6c1c39bf
BLAKE2b-256 7eb68846df15d69a660949e9e9a4ebd42b07c409197134858a05ee1c604477be

See more details on using hashes here.

Provenance

The following attestation bundles were made for xlstream-0.2.1-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: release.yml on cilladev/xlstream

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file xlstream-0.2.1-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for xlstream-0.2.1-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 31c7bbc6f6de6d0cb95108c60cfe558295cd6a6eab18d2506dc107f454c311aa
MD5 cdb1bfe12bddfbc233e8c01f29b5366f
BLAKE2b-256 965a67d147741e77d0d70a673cec542c0ca4eeffa539d4ca828019b23ad9c371

See more details on using hashes here.

Provenance

The following attestation bundles were made for xlstream-0.2.1-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl:

Publisher: release.yml on cilladev/xlstream

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file xlstream-0.2.1-cp39-abi3-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for xlstream-0.2.1-cp39-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 721f6fbc097d1a4d87adfc5a177aa605bc3c55a8582a81e807f511b303648c14
MD5 b6a189e6c31123bee2e36a8cc6a81e9f
BLAKE2b-256 a36fb38f62c51aed14f1408b6ecae08f1400615e24c53eaba35c9d320cf32b43

See more details on using hashes here.

Provenance

The following attestation bundles were made for xlstream-0.2.1-cp39-abi3-macosx_11_0_arm64.whl:

Publisher: release.yml on cilladev/xlstream

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file xlstream-0.2.1-cp39-abi3-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for xlstream-0.2.1-cp39-abi3-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 6bed4bf57eb086ea61ed3602cfb33e4bd85cb2d7bcc30094c30e289ed94aeeae
MD5 c0fdc5dc009171459df3898ac280688a
BLAKE2b-256 c4914ab80dd315ace5c0d3bc3b3a3e05a37535c1e68208d10359d2734d030d55

See more details on using hashes here.

Provenance

The following attestation bundles were made for xlstream-0.2.1-cp39-abi3-macosx_10_12_x86_64.whl:

Publisher: release.yml on cilladev/xlstream

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

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