-
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 | 27 | 5 |
| Ties | 2 | |
| Total features | 280+ | 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, table layout, tables, print layout, validation/repair, web workers, performance, API design
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 | ⭐ | ❌ |
| 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) | ❌ | 🔒 |
| 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 10K rows | faster | baseline | ~4.6x |
| Write 10K rows | faster | baseline | ~1.3x |
| Output file size | smaller | baseline | ~8x |
| aoaToSheet 50K rows | faster | baseline | ~2x |
| sheetToJson 10K rows | faster | baseline | ~2x |
| sheetToCsv 10K rows | faster | baseline | ~2.4x |
| Bundle size | ~300KB (WASM) | ~200KB (JS) | 1.5x larger |
| Zero runtime deps | ✅ | ❌ | |
| TypeScript types | 109+ types | basic | |
| Multi-threading | rayon flag | ❌ |
See the full comparison with 280+ 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