calamine 0.36.1
Read formula text
2.18x
Read cell values
1.17x
Compare
The homepage carries the headline results. This page keeps the complete matrices: capability coverage across the field, speed measurements against maintained alternatives, and what comparable capability costs elsewhere. Methodology, compatibility boundaries, and known limitations stay linked from each section.
Capability fit
Most alternatives cover only part of the read, write, and modify surface that Excel automation teams need.
| Surface | Python OSS | Rust crates | Other ecosystems | Commercial Python-capable | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Capability | openpyxl | XlsxWriter | python-calamine | fastexcel | rust_xlsxwriter | umya | office_oxide | SheetJS Pro JS | GcExcel .NET/Java | Syncfusion .NET | Spire .NET | LibXL C | WolfXL | Aspose |
| Read xlsxSource: competitive landscape 2026-06-15 | de-facto Python standard | write-only | read-only by design | read-only Arrow-shaped value extraction | write-only | Rust R/W/M library | simple R/W/M, unverified | per vendor page 2026-07-07 | .NET and Java commercial workbook API | .NET commercial workbook API | .NET, Java, Python via .NET commercial API | C bindings | Rust and Python openpyxl-compatible package | commercial workbook API |
| Write xlsxSource: competitive landscape 2026-06-15 | broad API | mature pure-Python writer | read-only by design | read-only value-extraction scope | very fast writer | Rust R/W/M library | simple R/W/M, unverified | Pro Edit, per vendor page 2026-07-07 | .NET and Java commercial workbook API | .NET commercial workbook API | .NET, Java, Python via .NET commercial API | C bindings | Rust and Python openpyxl-compatible package | commercial workbook API |
| Modify existing (surgical, preserves untouched parts)Source: competitive landscape 2026-06-15 | rebuilds whole file on save and can drop unsupported workbook parts | write-only | read-only by design | read-only value-extraction scope | write-only | can modify, but uses full-rewrite modify model | simple XLSX edit API, unverified | Pro Edit claims update with perfect fidelity, per vendor page 2026-07-07 | commercial edit and fidelity features | commercial edit support, saved-record status unverified | commercial workbook edit support | C bindings with workbook edit support | surgical ZIP patching preserves charts, pivots, slicers, and VBA in place | commercial workbook edit support |
| Native pivot tables born-populatedSource: competitive landscape 2026-06-15 | L1 preserve, no public cache-record regeneration engine | L0 for editing | read-only by design | read-only value-extraction scope | write-only, L0 edit | Rust required set has no pivot creation | simple XLSX edit API, unverified | PivotTable/PivotChart generation add-on, per vendor page 2026-07-07 | L3 born-populated records | L2 definition and refreshOnLoad, saved-record status unverified | L3 with CalculateData and IsRefreshOnLoad | not cited for born-populated pivots in landscape doc | L3 born-populated pivot caches | L4 pivot recompute |
| openpyxl-compatible APISource: docs/migration/compatibility-matrix.md and competitive landscape 2026-06-15 | reference API | separate Python writer API | separate reader API | Arrow-shaped API | Rust writer API | Rust API | Rust API | JavaScript ecosystem | .NET and Java ecosystem | .NET ecosystem | .NET, Java, Python via .NET ecosystem | C bindings | drop-in replacement across the supported openpyxl API surface | commercial API, not openpyxl-compatible |
| Formula calculationSource: competitive landscape 2026-06-15 | reads cached values, no recalc | no calc engine | no calc engine | no calc engine | no calc engine | no calc engine | no calc engine | Formula Calculator, per vendor page 2026-07-07 | 450+ functions including dynamic arrays and spill | calc feature listed in paid competitor table | full calc engine for Excel 97-2019 functions | not cited for formula calculation in landscape doc | 67-function builtin engine, Rust port in progress | Full calc via CalculateData |
| Runs headless (no Excel/COM)Source: competitive landscape 2026-06-15 | headless Python package | headless Python package | headless Python binding | headless Python package | headless Rust crate | headless Rust crate | headless Rust crate, unverified | Renderer plus browser and server JavaScript, per vendor page 2026-07-07 | .NET and Java server library | .NET server library | .NET, Java, Python via .NET server library | C bindings | headless Python and Rust package | server-side commercial library |
| Python-nativeSource: competitive landscape 2026-06-15 | Python | Python | Python Rust-backed binding | Python Rust-backed binding | Rust ecosystem | Rust ecosystem | Rust ecosystem | JavaScript ecosystem | .NET and Java ecosystem | .NET ecosystem | .NET, Java, and Python via vendor bridge ecosystem | C bindings | Rust plus Python package | Aspose cross-stack commercial ecosystem |
| Commercial support with SLASource: competitive landscape 2026-06-15 and vendor pricing pages 2026-07-07 | open-source project | open-source project | open-source project | open-source project | open-source project | open-source project | open-source project, unverified | quote-only commercial licensing | commercial per-developer license | commercial license with community tier | commercial license with free tier | commercial licenses | commercial package with enterprise tier | commercial per-developer license |
Competitor capabilities summarized from vendor documentation and public pages; re-verify before relying on them.
The clean-source WolfXL 2.1.0 release-artifact benchmark dated 2026-08-16 compares matched operations. Direct Rust rows use the same API surface; fastexcel and python-calamine rows compare public Python APIs. The visual scale is capped at 8x while each numeric label retains the measured ratio.
Read formula text
2.18x
Read cell values
1.17x
Write plain values (200,000 x 8)
1.34x
closest write rival in the field; SQL engine writing xlsx from an already-registered DataFrame
Read cell values (200,000 x 8)
1.28x
DuckDB returns Arrow-backed results, not editable workbooks
Write mixed types (10,000 x 5)
0.74x
honest loss: DuckDB wins the small mixed-type write outright (25 ms vs 35 ms) when writing from an already-registered DataFrame
Read cell values
1.84x
Read cell values (200,000 x 8)
1.04x
near parity: fastexcel is read-only and returns Arrow tables rather than Python cell values
Calc: re-evaluate one changed input (40,001 formula cells)
652.23x
semantics differ: formulas re-solves its whole graph per change rather than invalidating incrementally; shown for scope honesty
Calc: load + evaluate all (40,001 formula cells)
54.64x
load_compile alone takes 57.6 s at this size
Write cell by cell
2.29x
Modify an existing workbook
2.17x
Read cell values
1.65x
Write plain values (200,000 x 8)
14.36x
openpyxl engine, pandas' default xlsx writer path
Read cell values (200,000 x 8)
3.42x
calamine read engine, pandas' fastest xlsx reader
Write plain values (200,000 x 8)
8.45x
DataFrame I/O; wraps XlsxWriter for xlsx writes
Read cell values (200,000 x 8)
1.02x
near parity: Polars returns a DataFrame; wolfxl returns editable Python workbook cells
Calc: load + evaluate all (40,001 formula cells)
7.25x
openpyxl-authored fixture with no cached values, so every engine genuinely evaluates; exact-value asserted on all engines
Calc: re-evaluate one changed input (40,001 formula cells)
4.60x
pycel's dependency-graph invalidation is the strongest incremental rival in the field
Read cell values (200,000 x 8)
38.36x
wrapper over an openpyxl backend via pyexcel-xlsx
Write plain values (200,000 x 8)
8.82x
wrapper over an openpyxl backend via pyexcel-xlsx
Write plain values (200,000 x 8)
5.01x
write-only specialist; cannot read or edit workbooks
Write unique strings (100,000 x 5)
4.34x
shared-strings stress case (500k unique strings)
Read cell values (200,000 x 8)
24.28x
pure-Python; its writer scales quadratically (241 s on the large plain write), so write rows are recorded as DNF in the raw results rather than charted
Read cell values
2.33x
Read cell values (200,000 x 8)
1.49x
read-only binding returning Python values
Write styled cells
2.25x
Write cell by cell
2.13x
Write formula cells
1.93x
Write unique strings
1.89x
Write multiple sheets
1.88x
Write plain values (200,000 x 8)
15.37x
Dataset wrapper over an openpyxl backend
Modify an existing workbook
10.46x
Write cell by cell
5.05x
Read cell values
4.62x
Calc: re-evaluate one changed input (40,001 formula cells)
803.93x
semantics differ: xlcalculator 0.5.0's incremental path degrades superlinearly at this size; shown for scope honesty
Calc: load + evaluate all (40,001 formula cells)
10.61x
fastest pure-Python engine at small sizes; its evaluator degrades as cell count grows
Read cell values (200,000 x 8)
8.93x
read-only; transcodes xlsx to CSV text rather than cell values
Write cell by cell
3.88x
Write multiple sheets
3.88x
Write styled cells
3.81x
Write formula cells
3.61x
Write unique strings
3.31x
2026-08-16 release artifact benchmark rerun
2026-08-19 thirteen-library ecosystem benchmark, SynthGL/wolfxl-community
2026-08-19 calc-field benchmark, wolfxl 2.1 native calc pre-release, AMD EPYC 9655
| Product | Pricing | SaaS / redistribution rights | Python-native |
|---|---|---|---|
| WolfXLWolfXL | $299/dev/yr; $1,499/yr up to 5; Business from $4,999/yr; Enterprise from $10,000/yr; OEM from $25,000/yr | Sales-assisted OEM plan from $25,000/year | YesRust plus Python package |
| Aspose.Cells | $1,199 Developer Small Business / $3,597 Developer OEM required for SaaS / $23,980 SDK | Developer OEM required for SaaS redistribution | NoAspose cross-stack commercial ecosystem |
| LibXL | 199 EUR/dev/platform; 1,099 EUR enterprise | Enterprise tier cited at 1,099 EUR | NoC bindings |
| IronXL | $999 Lite to $5,999 Unlimited plus $1,999 OEM/SaaS add-on | $1,999 OEM/SaaS add-on | No.NET ecosystem |
| Spire.XLS | approx $799+/dev, unverified(unverified) | Commercial terms require re-check | No.NET, Java, and Python via vendor bridge ecosystem |
| GcExcel | $999 standard / $2,799 unlimited-distribution | $2,799 unlimited-distribution tier | No.NET and Java ecosystem |
| SheetJS Pro | Quote-only | Quote-only per-build-tier commercial licensing | NoJavaScript ecosystem |
| EPPlus | per-dev subscription, dual license(unverified) | Commercial use requires paid licensing; terms require re-check | No.NET ecosystem |
WolfXL separates self-service Developer and Team plans from sales-assisted Business, Enterprise, and OEM licensing. Internal deployment and redistribution scope are priced independently rather than bundled into one unlimited tier.
Competitor prices from vendor pricing pages dated 2026-07-07 where marked verified; re-check before purchase decisions.