-
Notifications
You must be signed in to change notification settings - Fork 1
Feature Comparison
Exhaustive capability matrix — every feature either library supports, compared side-by-side.
| Legend | Meaning |
|---|---|
| ✅ | Fully supported |
| ⭐ | Supported + superior implementation |
| 🔒 | SheetJS Pro only (paid license) |
| ❌ | Not supported |
| 🚧 | Partial / limited support |
| modern-xlsx | SheetJS | |
|---|---|---|
| Categories won | 31 | 5 |
| Ties | 2 | |
| Total features | 310+ | 175 |
modern-xlsx wins: Workbook ops, worksheet ops, cell ops, formulas, merge cells, styling (free), frozen panes, data validation, conditional formatting, hyperlinks, comments, named ranges, page setup, sheet protection, document properties, date utilities, number formatting, rich text, images, barcodes, charts, table layout, tables, print layout, validation/repair, web workers, performance, API design, pivot tables (read-only), threaded comments, slicers, timelines, CLI tool, feature-gated WASM
SheetJS wins: Read formats (18 vs 1), write formats (20 vs 1), I/O ops, sheet conversion, streaming
Ties: Cell reference utilities, shared strings
| Format | modern-xlsx | SheetJS | Notes |
|---|---|---|---|
| XLSX (Office Open XML) | ✅ | ✅ | Both full support |
| XLSM (Macro-enabled) | ❌ | ✅ | Data only, no macros |
| XLSB (Binary) | ❌ | ✅ | |
| XLS (BIFF8/5/4/3/2) | ❌ | ✅ | Legacy Excel 97-2003 |
| XLML (SpreadsheetML 2003) | ❌ | ✅ | |
| ODS (OpenDocument) | ❌ | ✅ | |
| FODS (Flat ODS) | ❌ | ✅ | |
| CSV | ❌ | ✅ | |
| TSV / TXT | ❌ | ✅ | |
| HTML tables | ❌ | ✅ | |
| SYLK | ❌ | ✅ | |
| DIF | ❌ | ✅ | |
| PRN | ❌ | ✅ | |
| ETH (EtherCalc) | ❌ | ✅ | |
| DBF (dBASE) | ❌ | ✅ | |
| WK1/WK3/WKS (Lotus) | ❌ | ✅ | |
| QPW (Quattro Pro) | ❌ | ✅ | |
| Numbers (Apple) | ❌ | ✅ | Requires numbers option |
| Format | modern-xlsx | SheetJS | Notes |
|---|---|---|---|
| XLSX | ⭐ | ✅ | modern-xlsx: 8x smaller output |
| XLSM | ❌ | ✅ | |
| XLSB | ❌ | ✅ | |
| XLS (BIFF8/5) | ❌ | ✅ | |
| XLS (BIFF4/3/2) | ❌ | ✅ | |
| XLML | ❌ | ✅ | |
| ODS / FODS | ❌ | ✅ | |
| CSV | ❌ | ✅ | modern-xlsx: string only via sheetToCsv
|
| HTML | ❌ | ✅ | modern-xlsx: string only via sheetToHtml
|
| Others (SYLK, DIF, RTF, etc.) | ❌ | ✅ | 10+ additional legacy formats |
| Feature | modern-xlsx | SheetJS | Notes |
|---|---|---|---|
| Read from buffer | ✅ | ✅ | |
| Read from file | ✅ | ✅ | |
| Read sync | ❌ | ✅ | modern-xlsx: async-only (WASM) |
| Write to buffer | ✅ | ✅ | |
| Write to file | ✅ | ✅ | |
| Write sync | ❌ | ✅ | |
| Write to Blob (browser) | ⭐ | ✅ | Native WASM Blob |
| Parse CFB / ZIP | ❌ | ✅ | |
| Custom FS / codepage | ❌ | ✅ | |
| WASM init | ⭐ | ❌ | |
| Encrypted XLSX read/write | ⭐ | ❌ | Agile + Standard encryption |
| Feature | modern-xlsx | SheetJS |
|---|---|---|
| Create / get / add / remove sheets | ✅ | ✅ (no remove) |
| Sheet visibility | ❌ | ✅ |
| Date system | ✅ | ✅ |
| Workbook views | ⭐ | 🚧 |
| Document properties (15 fields) | ⭐ | 🚧 |
| Serialize to JSON | ✅ | ❌ |
| Validate workbook | ⭐ | ❌ |
| Repair workbook | ⭐ | ❌ |
| Feature | modern-xlsx | SheetJS | Notes |
|---|---|---|---|
| Strings, numbers, booleans | ✅ | ✅ | |
| Error values | ✅ | ✅ | |
| Date values (native type) | ✅ | ✅ |
cell.dateValue getter |
| Stub/empty cells | ✅ | ✅ | Type "stub" / "z"
|
| Inline strings | ✅ | ❌ | |
| Formula strings (type) | ✅ | ❌ | |
| Style index | ⭐ | 🔒 | modern-xlsx free |
| Number format getter | ✅ | ✅ | cell.numberFormat |
| Feature | modern-xlsx | SheetJS | Notes |
|---|---|---|---|
| Style builder (fluent API) | ⭐ | ❌ | |
| Font (name, size, bold, italic, color, underline, strike) | ⭐ | 🔒 | Free vs paid |
| Fill (solid, 18 patterns, gradient) | ⭐ | 🔒 | |
| Border (4 sides + diagonal, 13 styles, colors) | ⭐ | 🔒 | |
| Alignment (H/V, wrap, rotation, indent, shrink) | ⭐ | 🔒 | |
| Cell protection (locked/hidden) | ⭐ | 🔒 | |
| Number format (custom/built-in) | ⭐ | ✅ | Community has per-cell .z |
| DXF / Cell styles / CellXf / Theme colors | ⭐ | ❌ |
| Feature | modern-xlsx | SheetJS |
|---|---|---|
| All validation types (list, whole, decimal, date, time, textLength, custom) | ⭐ | 🔒 |
| Input prompts and error alerts | ⭐ | 🔒 |
| Color scales / data bars / icon sets | ⭐ | 🔒 |
| DXF style references / CFVO | ⭐ | 🔒 |
| Feature | modern-xlsx | SheetJS |
|---|---|---|
| Add/remove hyperlinks with tooltip | ✅ | ✅ (no tooltip, no remove) |
| Add/remove comments | ✅ | ✅ (no remove) |
| Full CRUD named ranges | ✅ | 🚧 (read-only) |
| Feature | modern-xlsx | SheetJS | Notes |
|---|---|---|---|
| Orientation, paper size, fit-to, scale | ✅ | ❌ | |
| Page margins | ✅ | ✅ | |
| Sheet protection (14 granular fields) | ⭐ | 🚧 | |
| Frozen panes | ✅ | ✅ | |
| Auto filter + filter columns | ⭐ | ✅ | |
| Headers & footers (odd/even/first) | ⭐ | ❌ | HeaderFooterBuilder API |
| Print titles (repeating rows/cols) | ✅ | 🔒 | |
| Print areas | ✅ | 🔒 | |
| Row/column grouping (outline 0-7) | ⭐ | 🔒 | Collapse/expand API |
| Feature | modern-xlsx | SheetJS |
|---|---|---|
| Column ↔ letter, cell encode/decode, range encode/decode | ✅ | ✅ |
| Encode/decode row, split cell ref | ✅ | ✅ |
| Date ↔ serial, Temporal-like input | ⭐ | ❌ |
| Parse date code | ❌ | ✅ |
| Feature | modern-xlsx | SheetJS |
|---|---|---|
| Format cell value | ✅ | ✅ |
| Rich format result (text + color) | ⭐ | ❌ |
| Load custom format / bulk table | ✅ | ✅ |
| Conditional sections | ✅ | ✅ |
| Color codes ([Red], [Color3]) | ✅ | ✅ |
| Locale codes ([$-409]) | 🚧 | ✅ |
| Feature | modern-xlsx | SheetJS |
|---|---|---|
| AoA/JSON → sheet, sheet → JSON/CSV/HTML | ✅ | ✅ |
| Add AoA/JSON to existing sheet | ✅ | ✅ |
| Sheet → TXT | ✅ | ✅ |
| Sheet → formulae | ✅ | ✅ |
| Sheet → row objects (alias) | ❌ | ✅ |
| DOM table → sheet/book | ❌ | ✅ |
| Feature | modern-xlsx | SheetJS |
|---|---|---|
| Stream to JSON/CSV/HTML/XLML | ❌ | ✅ |
| WASM streaming reader (SAX) | ⭐ | ❌ |
| Parallel sheet parsing (rayon) | ⭐ | ❌ |
| Feature | modern-xlsx | SheetJS |
|---|---|---|
| RichTextBuilder (bold, italic, colored, styled) | ⭐ | ❌ |
| Image embedding (PNG/JPEG/GIF) | ⭐ | 🔒 |
| Charts (create) | ⭐ 10 types, ChartBuilder API, trendlines, error bars, 3D, combo | 🔒 |
| Feature | modern-xlsx | SheetJS | Notes |
|---|---|---|---|
| 9 barcode types + PNG renderer + XLSX embed | ⭐ | ❌ | |
| Table layout engine (drawTable/drawTableFromData) | ⭐ | ❌ | |
| Native Excel Tables (ListObjects) | ⭐ | 🔒 | Full CRUD + 60 built-in styles |
| Workbook validation & repair | ⭐ | ❌ | |
| Web Worker support | ⭐ | ❌ |
| Feature | modern-xlsx | SheetJS | Notes |
|---|---|---|---|
Used range (ws.usedRange) |
✅ | ✅ | |
Tab color (ws.tabColor) |
✅ | 🚧 | |
| Dynamic array formulas (SPILL) | ✅ | ✅ |
cm="1" attribute |
| Benchmark | modern-xlsx | SheetJS | Ratio |
|---|---|---|---|
| Read 100K rows | faster | baseline | ~4.0x |
| Write 100K batch | faster | baseline | ~8.4x |
| Write 10K cell-by-cell | baseline | faster | ~0.7x |
| Output file size | smaller | baseline | ~8x |
| aoaToSheet 50K rows | faster | baseline | ~1.6x |
| sheetToJson 10K rows | baseline | faster | ~0.6x |
| sheetToCsv 10K rows | tied | tied | ~1.0x |
| Bundle size | ~300KB (WASM) | ~200KB (JS) | 1.5x larger |
| Zero runtime deps | ✅ | ❌ | |
| TypeScript types | 120+ types | basic | |
| Multi-threading | rayon flag | ❌ |
| Feature | modern-xlsx | SheetJS | Notes |
|---|---|---|---|
| Pivot tables (read-only) | ⭐ | 🔒 | Full OOXML parsing |
| Threaded comments (read + write) | ⭐ | ❌ | Modern Excel threads |
| Slicers (read-only) | ⭐ | ❌ | Pivot table filtering |
| Timelines (read-only) | ⭐ | ❌ | Date-based filtering |
| CLI tool (info/convert) | ⭐ | ❌ | npx modern-xlsx |
| Feature-gated WASM | ⭐ | ❌ | Cargo features |
| Structured error handling | ⭐ | ❌ |
ModernXlsxError with .code
|
See the full comparison with 310+ features in __tests__/feature-comparison.test.ts
modern-xlsx v1.0.0
Getting Started
Guides
- Charts & Visualizations
- Formula Engine
- Table Layout Engine
- Tables & Print Layout
- Encryption
- Feature Comparison
Reference
Migration
Project