Skip to main content

Streaming Excel formula evaluation engine

Project description

xlstream

CI License

xlstream is a streaming Excel formula evaluation engine 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

3x less memory and 1.4x faster than LibreOffice. No install. Embeddable. Full benchmarks

Benchmark: 100k rows x 50 cols (20 data + 30 formula). Intel i9-10910, 128 GB RAM.

Engine Version Wall-clock Peak RSS Architecture
xlstream (1 worker) 0.2.1 26.5s 643 MB Streaming (2-pass)
xlstream (4 workers) 0.2.1 23.0s 681 MB Streaming (2-pass)
LibreOffice 26.2 31.9s 2,081 MB Graph
Excel (20 threads) 16.108.2 ~99s ~430 MB Graph
formualizer 0.5.6 2h 8m 11,322 MB Full dependency graph

Supported functions

106 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

import xlstream

result = xlstream.evaluate("input.xlsx", "output.xlsx")
# {'rows_processed': 100000, 'formulas_evaluated': 2999970, 'duration_ms': 23000}

# Parallel (row-sharded across cores)
result = xlstream.evaluate("input.xlsx", "output.xlsx", workers=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.3.0.tar.gz (561.6 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.3.0-cp39-abi3-win_amd64.whl (1.6 MB view details)

Uploaded CPython 3.9+Windows x86-64

xlstream-0.3.0-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.6 MB view details)

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

xlstream-0.3.0-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.3.0-cp39-abi3-macosx_11_0_arm64.whl (1.5 MB view details)

Uploaded CPython 3.9+macOS 11.0+ ARM64

xlstream-0.3.0-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.3.0.tar.gz.

File metadata

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

File hashes

Hashes for xlstream-0.3.0.tar.gz
Algorithm Hash digest
SHA256 09efec68b7109f1dc92323ca70a115df6c96b0a2bd57e499285a94e0ce0da90b
MD5 69326e0cce4d33dd95423de0ef050121
BLAKE2b-256 2b16a7b0848f549d2f11f1c256eeafd0ff0c8ae86109c27a71d84ce73cfa05b3

See more details on using hashes here.

Provenance

The following attestation bundles were made for xlstream-0.3.0.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.3.0-cp39-abi3-win_amd64.whl.

File metadata

  • Download URL: xlstream-0.3.0-cp39-abi3-win_amd64.whl
  • Upload date:
  • Size: 1.6 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.3.0-cp39-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 7e647a959aee0f8534a257ed1eec22bb537c6473fe33fa35751fa2b5f8080f4b
MD5 6838ac589cef24ca6ef27bab3f56db0e
BLAKE2b-256 15d2ce79d176f1003a40a9abc9f2da803f2964cb518154b45ea77c668bf06fbf

See more details on using hashes here.

Provenance

The following attestation bundles were made for xlstream-0.3.0-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.3.0-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for xlstream-0.3.0-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 af81019f530087228206776e1cebe873ef6d35e94da8d1f481585e6c1cca9f16
MD5 dab88c57ac4915f9c63ffd67c3ef82b9
BLAKE2b-256 2de1804264489853b528596f87863830cbf5c121e9457c4a8bb6daa2671a72a7

See more details on using hashes here.

Provenance

The following attestation bundles were made for xlstream-0.3.0-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.3.0-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for xlstream-0.3.0-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 ec9d5f58dab9906e300ef0f3549182bbdacee91da3c27b9c18e9939de0536ada
MD5 c8d96424edf5cd56eaac7fa0a1313c36
BLAKE2b-256 34b77eaa84b6133a323c3b7f64899286cfeda7e7e840d5553565fe7959e5c090

See more details on using hashes here.

Provenance

The following attestation bundles were made for xlstream-0.3.0-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.3.0-cp39-abi3-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for xlstream-0.3.0-cp39-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 b73aab3cd836e897d46023f6a39426e42d80405c25dd4ad66c5752bbb256061d
MD5 5421fd3ce6ea636cc7dcacb4827c929f
BLAKE2b-256 05d5dc1f246b98eb2eca7d74949bc5fbe66e449649cdc448a65b2d25e21288f6

See more details on using hashes here.

Provenance

The following attestation bundles were made for xlstream-0.3.0-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.3.0-cp39-abi3-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for xlstream-0.3.0-cp39-abi3-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 dd8de959e1bffe451afe694cee2cf4fd401e8cec1482313362ad524049e0b798
MD5 95a080bc524d297eb6362d87ea67a2fd
BLAKE2b-256 32ccd078b765186693408ad2dc13b6fbbe32b11470973ea6f776da92fcf66aba

See more details on using hashes here.

Provenance

The following attestation bundles were made for xlstream-0.3.0-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