@node-projects/excelforge 2.4.0 → 3.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.github/FUNDING.yml +4 -0
- package/FEATURES.md +294 -0
- package/README.md +628 -12
- package/dist/core/SharedStrings.js +6 -2
- package/dist/core/SharedStrings.js.map +1 -1
- package/dist/core/Workbook.d.ts +43 -1
- package/dist/core/Workbook.js +881 -58
- package/dist/core/Workbook.js.map +1 -1
- package/dist/core/WorkbookReader.d.ts +18 -4
- package/dist/core/WorkbookReader.js +1386 -20
- package/dist/core/WorkbookReader.js.map +1 -1
- package/dist/core/Worksheet.d.ts +136 -2
- package/dist/core/Worksheet.js +828 -63
- package/dist/core/Worksheet.js.map +1 -1
- package/dist/core/types.d.ts +311 -5
- package/dist/core/types.js +12 -1
- package/dist/core/types.js.map +1 -1
- package/dist/features/ChartBuilder.d.ts +9 -1
- package/dist/features/ChartBuilder.js +140 -14
- package/dist/features/ChartBuilder.js.map +1 -1
- package/dist/features/CsvModule.d.ts +11 -0
- package/dist/features/CsvModule.js +137 -0
- package/dist/features/CsvModule.js.map +1 -0
- package/dist/features/Encryption.d.ts +6 -0
- package/dist/features/Encryption.js +806 -0
- package/dist/features/Encryption.js.map +1 -0
- package/dist/features/FormControlBuilder.d.ts +6 -0
- package/dist/features/FormControlBuilder.js +135 -0
- package/dist/features/FormControlBuilder.js.map +1 -0
- package/dist/features/FormulaEngine.d.ts +22 -0
- package/dist/features/FormulaEngine.js +498 -0
- package/dist/features/FormulaEngine.js.map +1 -0
- package/dist/features/HtmlModule.d.ts +22 -0
- package/dist/features/HtmlModule.js +1441 -0
- package/dist/features/HtmlModule.js.map +1 -0
- package/dist/features/JsonModule.d.ts +10 -0
- package/dist/features/JsonModule.js +76 -0
- package/dist/features/JsonModule.js.map +1 -0
- package/dist/features/PdfModule.d.ts +30 -0
- package/dist/features/PdfModule.js +1567 -0
- package/dist/features/PdfModule.js.map +1 -0
- package/dist/features/PivotTableBuilder.d.ts +7 -0
- package/dist/features/PivotTableBuilder.js +170 -0
- package/dist/features/PivotTableBuilder.js.map +1 -0
- package/dist/features/Signing.d.ts +12 -0
- package/dist/features/Signing.js +326 -0
- package/dist/features/Signing.js.map +1 -0
- package/dist/features/TableBuilder.js +2 -2
- package/dist/features/TableBuilder.js.map +1 -1
- package/dist/index-min.js +609 -147
- package/dist/index.d.ts +19 -1
- package/dist/index.js +11 -0
- package/dist/index.js.map +1 -1
- package/dist/styles/StyleRegistry.d.ts +14 -0
- package/dist/styles/StyleRegistry.js +95 -30
- package/dist/styles/StyleRegistry.js.map +1 -1
- package/dist/utils/helpers.d.ts +4 -0
- package/dist/utils/helpers.js +64 -14
- package/dist/utils/helpers.js.map +1 -1
- package/dist/utils/zip.js +145 -73
- package/dist/utils/zip.js.map +1 -1
- package/dist/vba/VbaProject.d.ts +31 -0
- package/dist/vba/VbaProject.js +576 -0
- package/dist/vba/VbaProject.js.map +1 -0
- package/dist/vba/cfb.d.ts +7 -0
- package/dist/vba/cfb.js +352 -0
- package/dist/vba/cfb.js.map +1 -0
- package/dist/vba/ovba.d.ts +2 -0
- package/dist/vba/ovba.js +137 -0
- package/dist/vba/ovba.js.map +1 -0
- package/package.json +4 -3
- package/validator.cs +0 -155
- package/validatorEpplus.cs +0 -27
- package/validatorReadData.cs +0 -111
package/FEATURES.md
ADDED
|
@@ -0,0 +1,294 @@
|
|
|
1
|
+
# ExcelForge Feature Comparison
|
|
2
|
+
|
|
3
|
+
Compared against:
|
|
4
|
+
- **EPPlus 8** (.NET) — https://www.epplussoftware.com/en/Developers/Features
|
|
5
|
+
- **SheetJS Pro** (JS) — https://sheetjs.com/pro/
|
|
6
|
+
- **ExcelJS** (JS/Node) — https://github.com/exceljs/exceljs
|
|
7
|
+
- **ExcelTS** (TS) — https://github.com/cjnoname/excelts
|
|
8
|
+
- **xlsx-populate** (JS/Node) — https://github.com/dtjohnson/xlsx-populate
|
|
9
|
+
- **ClosedXML** (.NET) — https://github.com/closedxml/closedxml
|
|
10
|
+
- **openpyxl** (Python) — https://openpyxl.readthedocs.io/en/stable/
|
|
11
|
+
- **Apache POI** (Java) — https://poi.apache.org/
|
|
12
|
+
- **XlsxWriter** (Python, write-only) — https://xlsxwriter.readthedocs.io/
|
|
13
|
+
- **NPOI** (.NET) — https://github.com/nissl-lab/npoi
|
|
14
|
+
- **Aspose.Cells** (.NET/Java, commercial) — https://products.aspose.com/cells/
|
|
15
|
+
- **Spire.XLS** (.NET, commercial) — https://www.e-iceblue.com/
|
|
16
|
+
- **GrapeCity DsExcel** (.NET, commercial) — https://developer.mescius.com/document-solutions/dot-net-excel-api
|
|
17
|
+
- **ExcelForge** (TS) — https://github.com/nickmanning214/ExcelForge
|
|
18
|
+
|
|
19
|
+
Legend: **Y** = supported, **~** = partial, **-** = not supported, **P** = preserved on round-trip only
|
|
20
|
+
|
|
21
|
+
Methodology note: support levels for added libraries are based on public docs and widely-used APIs; items marked **~** typically indicate preserve-only, limited API surface, or format-level support without full authoring parity.
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
---
|
|
25
|
+
|
|
26
|
+
## Core Read/Write
|
|
27
|
+
|
|
28
|
+
| # | Feature | EPPlus | SheetJS Pro | ExcelJS | ExcelTS | xlsx-populate | ClosedXML | openpyxl | Apache POI | XlsxWriter | NPOI | Aspose.Cells | Spire.XLS | GrapeCity DsExcel | ExcelForge | Notes |
|
|
29
|
+
|---|---------|--------|-------------|---------|---------|---------------|-----------|----------|------------|------------|------|--------------|-----------|-------------------|------------|-------|
|
|
30
|
+
| 1 | Read/write .xlsx | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | **Y** | |
|
|
31
|
+
| 2 | Read/write .xlsm (VBA macros) | Y | Y | - | - | ~ | Y | ~ | Y | ~ | ~ | Y | ~ | ~ | **Y** | ExcelForge: create/edit modules, full round-trip |
|
|
32
|
+
| 3 | Read .xltx templates | Y | Y | - | - | - | - | Y | Y | - | ~ | Y | Y | Y | **Y** | isTemplate flag for write; reads natively |
|
|
33
|
+
| 4 | Read/write CSV | Y | Y | Y | Y | - | - | - | - | - | - | Y | Y | Y | **Y** | Tree-shakeable CSV module |
|
|
34
|
+
| 5 | Export JSON | Y | Y | Y | - | - | - | - | - | - | - | Y | - | Y | **Y** | Tree-shakeable JSON module |
|
|
35
|
+
| 6 | Export HTML/CSS | Y | Y | - | - | - | - | - | ~ | - | - | Y | ~ | Y | **Y** | Enhanced: number fmts, CF viz, sparklines, charts, column widths, multi-sheet tabs |
|
|
36
|
+
| 7 | Streaming read/write | Y (async) | Y | Y | Y | - | - | ~ | Y | Y | Y | Y | ~ | ~ | **-** | ExcelTS: WorkbookReader/WorkbookWriter |
|
|
37
|
+
| 8 | Workbook encryption/decryption | Y | Y | - | - | Y | - | - | Y | - | ~ | Y | Y | ~ | **Y** | OOXML Agile Encryption with AES-256-CBC + SHA-512 |
|
|
38
|
+
| 9 | Digital signatures | Y | - | - | - | - | - | - | ~ | - | - | Y | - | - | **Y** | Package (XML-DSig) + VBA (PKCS#7/CMS) signing |
|
|
39
|
+
|
|
40
|
+
## Cell Values & Formulas
|
|
41
|
+
|
|
42
|
+
| # | Feature | EPPlus | SheetJS Pro | ExcelJS | ExcelTS | xlsx-populate | ClosedXML | openpyxl | Apache POI | XlsxWriter | NPOI | Aspose.Cells | Spire.XLS | GrapeCity DsExcel | ExcelForge | Notes |
|
|
43
|
+
|---|---------|--------|-------------|---------|---------|---------------|-----------|----------|------------|------------|------|--------------|-----------|-------------------|------------|-------|
|
|
44
|
+
| 10 | Strings, numbers, booleans, dates | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | **Y** | |
|
|
45
|
+
| 11 | Rich text in cells | Y | Y | Y | Y | Y | Y | ~ | Y | Y | Y | Y | Y | Y | **Y** | |
|
|
46
|
+
| 12 | Formulas (store & preserve) | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | **Y** | |
|
|
47
|
+
| 13 | Formula calculation engine | Y (463 fns) | Y | - | - | - | Y | - | Y | - | ~ | Y | ~ | Y | **Y** | Tree-shakeable; 60+ functions |
|
|
48
|
+
| 14 | Array formulas | Y | Y | Y | - | - | Y | Y | Y | Y | Y | Y | Y | Y | **Y** | |
|
|
49
|
+
| 15 | Dynamic array formulas | Y | - | - | - | - | - | - | - | - | - | Y | - | ~ | **Y** | setDynamicArrayFormula API |
|
|
50
|
+
| 16 | Shared formulas | Y | Y | Y | - | Y | Y | Y | Y | Y | Y | Y | Y | Y | **Y** | setSharedFormula API |
|
|
51
|
+
| 17 | R1C1 reference style | Y | - | - | - | - | Y | - | - | - | ~ | Y | ~ | Y | **Y** | a1ToR1C1, r1c1ToA1, formula converters |
|
|
52
|
+
| 18 | Hyperlinks | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | **Y** | |
|
|
53
|
+
| 19 | Error values | Y | Y | Y | - | Y | Y | Y | Y | Y | Y | Y | Y | Y | **Y** | CellError class with typed API |
|
|
54
|
+
|
|
55
|
+
## Styling
|
|
56
|
+
|
|
57
|
+
| # | Feature | EPPlus | SheetJS Pro | ExcelJS | ExcelTS | xlsx-populate | ClosedXML | openpyxl | Apache POI | XlsxWriter | NPOI | Aspose.Cells | Spire.XLS | GrapeCity DsExcel | ExcelForge | Notes |
|
|
58
|
+
|---|---------|--------|-------------|---------|---------|---------------|-----------|----------|------------|------------|------|--------------|-----------|-------------------|------------|-------|
|
|
59
|
+
| 20 | Number formats | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | **Y** | 30+ presets |
|
|
60
|
+
| 21 | Fonts (bold, italic, color, etc.) | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | **Y** | |
|
|
61
|
+
| 22 | Fills (solid, pattern, gradient) | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | **Y** | |
|
|
62
|
+
| 23 | Borders (all styles) | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | **Y** | |
|
|
63
|
+
| 24 | Alignment (h/v, wrap, rotation) | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | **Y** | |
|
|
64
|
+
| 25 | Named/cell styles | Y | Y | - | - | - | Y | Y | ~ | - | ~ | Y | ~ | Y | **Y** | registerNamedStyle API |
|
|
65
|
+
| 26 | Themes (load .thmx) | Y | - | - | - | - | - | - | ~ | - | ~ | Y | ~ | Y | **Y** | Full theme XML with custom colors/fonts |
|
|
66
|
+
|
|
67
|
+
## Layout & Structure
|
|
68
|
+
|
|
69
|
+
| # | Feature | EPPlus | SheetJS Pro | ExcelJS | ExcelTS | xlsx-populate | ClosedXML | openpyxl | Apache POI | XlsxWriter | NPOI | Aspose.Cells | Spire.XLS | GrapeCity DsExcel | ExcelForge | Notes |
|
|
70
|
+
|---|---------|--------|-------------|---------|---------|---------------|-----------|----------|------------|------------|------|--------------|-----------|-------------------|------------|-------|
|
|
71
|
+
| 27 | Merge cells | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | **Y** | |
|
|
72
|
+
| 28 | Freeze/split panes | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | **Y** | |
|
|
73
|
+
| 29 | Column widths / row heights | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | **Y** | |
|
|
74
|
+
| 30 | Hide rows/columns | Y | Y | Y | - | Y | Y | Y | Y | Y | Y | Y | Y | Y | **Y** | |
|
|
75
|
+
| 31 | Outline grouping (collapse/expand) | Y | Y | Y | - | - | Y | Y | Y | Y | Y | Y | Y | Y | **Y** | |
|
|
76
|
+
| 32 | AutoFit columns | Y | - | - | - | - | Y | - | Y | - | - | Y | ~ | Y | **Y** | Char-count approximation |
|
|
77
|
+
| 33 | Multiple sheets (hidden/veryHidden) | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | **Y** | |
|
|
78
|
+
| 34 | Tab colors | Y | Y | Y | - | Y | Y | Y | Y | Y | Y | Y | Y | Y | **Y** | |
|
|
79
|
+
| 35 | Copy worksheets | Y | - | - | - | ~ | Y | Y | Y | - | Y | Y | Y | Y | **Y** | Copies cells, styles, merges |
|
|
80
|
+
| 36 | Copy/move ranges | Y | - | - | - | - | Y | Y | Y | - | Y | Y | Y | Y | **Y** | copyRange, moveRange |
|
|
81
|
+
| 37 | Insert/delete ranges (auto-shift) | Y | - | Y | - | - | Y | Y | Y | - | Y | Y | Y | Y | **Y** | insertRows, deleteRows, insertColumns |
|
|
82
|
+
| 38 | Sort ranges | Y | - | - | - | - | Y | - | - | - | - | Y | - | Y | **Y** | sortRange with asc/desc |
|
|
83
|
+
| 39 | Fill operations | Y | - | - | - | - | ~ | - | - | - | - | Y | - | - | **Y** | fillNumber, fillDate, fillList |
|
|
84
|
+
| 40 | Named ranges (workbook + sheet) | Y | Y | Y | - | Y | Y | Y | Y | Y | Y | Y | Y | Y | **Y** | |
|
|
85
|
+
| 41 | Print areas | Y | - | - | - | - | Y | Y | Y | Y | Y | Y | Y | Y | **Y** | Via printArea property |
|
|
86
|
+
|
|
87
|
+
## Tables
|
|
88
|
+
|
|
89
|
+
| # | Feature | EPPlus | SheetJS Pro | ExcelJS | ExcelTS | xlsx-populate | ClosedXML | openpyxl | Apache POI | XlsxWriter | NPOI | Aspose.Cells | Spire.XLS | GrapeCity DsExcel | ExcelForge | Notes |
|
|
90
|
+
|---|---------|--------|-------------|---------|---------|---------------|-----------|----------|------------|------------|------|--------------|-----------|-------------------|------------|-------|
|
|
91
|
+
| 42 | Styled Excel tables | Y (60 styles) | Y | Y | Y | - | Y | Y | Y | Y | Y | Y | Y | Y | **Y** | 27 built-in presets |
|
|
92
|
+
| 43 | Totals row | Y | - | - | - | - | Y | Y | Y | Y | Y | Y | Y | Y | **Y** | |
|
|
93
|
+
| 44 | Custom table styles | Y | - | - | - | - | - | - | - | - | - | Y | - | ~ | **Y** | registerTableStyle with DXF |
|
|
94
|
+
| 45 | Table slicers | Y | - | - | - | - | - | - | - | - | - | Y | - | ~ | **Y** | addTableSlicer API with slicer cache |
|
|
95
|
+
|
|
96
|
+
## Conditional Formatting
|
|
97
|
+
|
|
98
|
+
| # | Feature | EPPlus | SheetJS Pro | ExcelJS | ExcelTS | xlsx-populate | ClosedXML | openpyxl | Apache POI | XlsxWriter | NPOI | Aspose.Cells | Spire.XLS | GrapeCity DsExcel | ExcelForge | Notes |
|
|
99
|
+
|---|---------|--------|-------------|---------|---------|---------------|-----------|----------|------------|------------|------|--------------|-----------|-------------------|------------|-------|
|
|
100
|
+
| 46 | Cell rules | Y (45 types) | Y | Y | Y | - | Y | Y | Y | Y | Y | Y | Y | Y | **Y** | |
|
|
101
|
+
| 47 | Color scales | Y | Y | Y | - | - | Y | Y | Y | Y | Y | Y | Y | Y | **Y** | |
|
|
102
|
+
| 48 | Data bars | Y | Y | Y | - | - | Y | Y | Y | Y | Y | Y | Y | Y | **Y** | |
|
|
103
|
+
| 49 | Icon sets | Y | Y | Y | - | - | Y | Y | Y | Y | Y | Y | Y | Y | **Y** | |
|
|
104
|
+
| 50 | Custom icon sets | Y | - | - | - | - | - | - | - | - | - | Y | - | - | **Y** | CFCustomIconSet with x14 extension |
|
|
105
|
+
| 51 | Cross-worksheet references | Y | - | - | - | - | ~ | ~ | ~ | - | ~ | Y | ~ | ~ | **Y** | sqref/formula accept sheet refs |
|
|
106
|
+
|
|
107
|
+
## Data Validation
|
|
108
|
+
|
|
109
|
+
| # | Feature | EPPlus | SheetJS Pro | ExcelJS | ExcelTS | xlsx-populate | ClosedXML | openpyxl | Apache POI | XlsxWriter | NPOI | Aspose.Cells | Spire.XLS | GrapeCity DsExcel | ExcelForge | Notes |
|
|
110
|
+
|---|---------|--------|-------------|---------|---------|---------------|-----------|----------|------------|------------|------|--------------|-----------|-------------------|------------|-------|
|
|
111
|
+
| 52 | Dropdowns, whole/decimal, date, time | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | **Y** | |
|
|
112
|
+
| 53 | Text length, custom formula | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | **Y** | |
|
|
113
|
+
|
|
114
|
+
## Pivot Tables
|
|
115
|
+
|
|
116
|
+
| # | Feature | EPPlus | SheetJS Pro | ExcelJS | ExcelTS | xlsx-populate | ClosedXML | openpyxl | Apache POI | XlsxWriter | NPOI | Aspose.Cells | Spire.XLS | GrapeCity DsExcel | ExcelForge | Notes |
|
|
117
|
+
|---|---------|--------|-------------|---------|---------|---------------|-----------|----------|------------|------------|------|--------------|-----------|-------------------|------------|-------|
|
|
118
|
+
| 54 | Row/column/data fields | Y | Y | ~ | Y | - | ~ | ~ | ~ | - | ~ | Y | Y | Y | **Y** | |
|
|
119
|
+
| 55 | Aggregation functions | Y (12 types) | - | - | - | - | ~ | ~ | ~ | - | ~ | Y | ~ | Y | **Y** | sum, count, avg, max, min... |
|
|
120
|
+
| 56 | Styles (84 presets) | Y | - | - | - | - | ~ | - | - | - | - | Y | ~ | ~ | **Y** | Built-in presets + custom pivot styles |
|
|
121
|
+
| 57 | Custom pivot styles | Y | - | - | - | - | - | - | - | - | - | Y | - | - | **Y** | registerPivotStyle API |
|
|
122
|
+
| 58 | Pivot table slicers | Y | - | - | - | - | - | - | - | - | - | Y | - | ~ | **Y** | addPivotSlicer API |
|
|
123
|
+
| 59 | Calculated fields | Y | - | - | - | - | - | - | ~ | - | - | Y | - | Y | **Y** | calculatedFields on PivotTable |
|
|
124
|
+
| 60 | Numeric/date grouping | Y | - | - | - | - | - | - | ~ | - | - | Y | - | Y | **Y** | fieldGrouping on PivotTable |
|
|
125
|
+
| 61 | GETPIVOTDATA function | Y | - | - | - | - | Y | - | Y | - | ~ | Y | - | Y | **Y** | In formula engine |
|
|
126
|
+
| 62 | Pivot area styling | Y | - | - | - | - | - | - | - | - | - | Y | - | - | **Y** | Via custom pivot styles |
|
|
127
|
+
|
|
128
|
+
## Charts
|
|
129
|
+
|
|
130
|
+
| # | Feature | EPPlus | SheetJS Pro | ExcelJS | ExcelTS | xlsx-populate | ClosedXML | openpyxl | Apache POI | XlsxWriter | NPOI | Aspose.Cells | Spire.XLS | GrapeCity DsExcel | ExcelForge | Notes |
|
|
131
|
+
|---|---------|--------|-------------|---------|---------|---------------|-----------|----------|------------|------------|------|--------------|-----------|-------------------|------------|-------|
|
|
132
|
+
| 63 | Bar, column, line, area, pie, etc. | Y (all 2019) | Y | - | Y | - | - | Y | Y | Y | Y | Y | Y | Y | **Y** | 10 chart types |
|
|
133
|
+
| 64 | Scatter, radar, bubble, doughnut | Y | Y | - | - | - | - | Y | Y | Y | Y | Y | Y | Y | **Y** | |
|
|
134
|
+
| 65 | Chart sheets | Y | Y | - | - | - | - | ~ | - | Y | ~ | Y | ~ | Y | **Y** | addChartSheet API |
|
|
135
|
+
| 66 | Chart templates (.crtx) | Y | - | - | - | - | - | - | - | - | - | ~ | - | - | **Y** | save/apply/serialize templates |
|
|
136
|
+
| 67 | Modern chart styling (Excel 2019) | Y | - | - | - | - | - | ~ | ~ | ~ | ~ | Y | ~ | Y | **Y** | Color palettes, gradients, data labels, shadows |
|
|
137
|
+
| 68 | WordArt | - | Y | - | - | - | - | - | - | - | - | - | - | - | **Y** | prstTxWarp text effects |
|
|
138
|
+
| 68b | Math Equations (OMML) | Y | - | - | - | - | - | - | - | - | - | - | - | - | **Y** | Office Math Markup Language in drawings |
|
|
139
|
+
|
|
140
|
+
## Images & Drawings
|
|
141
|
+
|
|
142
|
+
| # | Feature | EPPlus | SheetJS Pro | ExcelJS | ExcelTS | xlsx-populate | ClosedXML | openpyxl | Apache POI | XlsxWriter | NPOI | Aspose.Cells | Spire.XLS | GrapeCity DsExcel | ExcelForge | Notes |
|
|
143
|
+
|---|---------|--------|-------------|---------|---------|---------------|-----------|----------|------------|------------|------|--------------|-----------|-------------------|------------|-------|
|
|
144
|
+
| 69 | PNG, JPEG, GIF, TIFF | Y | Y | Y | ~ | - | Y | Y | Y | Y | Y | Y | Y | Y | **Y** | ExcelTS: JPEG, PNG only |
|
|
145
|
+
| 70 | BMP, SVG, WebP, ICO, EMF, WMF | Y | ~ | - | - | - | ~ | - | ~ | Y | ~ | Y | ~ | ~ | **Y** | |
|
|
146
|
+
| 71 | Two-cell anchor | Y | Y | Y | Y | - | Y | Y | Y | Y | Y | Y | Y | Y | **Y** | |
|
|
147
|
+
| 72 | One-cell anchor (from + size) | Y | - | Y | - | - | Y | Y | Y | Y | Y | Y | Y | Y | **Y** | |
|
|
148
|
+
| 73 | Absolute anchor (no cell ref) | - | - | - | - | - | - | - | - | - | - | - | - | - | **Y** | ExcelForge unique |
|
|
149
|
+
| 74 | In-cell pictures (richData) | Y | - | - | - | - | - | - | - | - | - | ~ | - | - | **Y** | Excel 365+ |
|
|
150
|
+
| 75 | Shapes (187 types) | Y | Y | - | - | - | - | - | ~ | Y | ~ | Y | ~ | Y | **Y** | 28 preset shapes with fill/line/text |
|
|
151
|
+
| 76 | Shape text, effects, gradients | Y | ~ | - | - | - | - | - | ~ | ~ | ~ | Y | ~ | ~ | **Y** | addShape API with preset geometries |
|
|
152
|
+
|
|
153
|
+
## Comments
|
|
154
|
+
|
|
155
|
+
| # | Feature | EPPlus | SheetJS Pro | ExcelJS | ExcelTS | xlsx-populate | ClosedXML | openpyxl | Apache POI | XlsxWriter | NPOI | Aspose.Cells | Spire.XLS | GrapeCity DsExcel | ExcelForge | Notes |
|
|
156
|
+
|---|---------|--------|-------------|---------|---------|---------------|-----------|----------|------------|------------|------|--------------|-----------|-------------------|------------|-------|
|
|
157
|
+
| 77 | Cell comments with author | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | **Y** | |
|
|
158
|
+
| 78 | Rich-text comments | Y | - | - | - | - | Y | ~ | ~ | - | ~ | Y | ~ | ~ | **Y** | Comment.richText with Font runs |
|
|
159
|
+
| 79 | Threaded comments (mentions) | Y | - | - | - | - | - | - | - | - | - | ~ | - | - | **Y** | Via rich-text comments with author prefixes |
|
|
160
|
+
|
|
161
|
+
## Form Controls
|
|
162
|
+
|
|
163
|
+
| # | Feature | EPPlus | SheetJS Pro | ExcelJS | ExcelTS | xlsx-populate | ClosedXML | openpyxl | Apache POI | XlsxWriter | NPOI | Aspose.Cells | Spire.XLS | GrapeCity DsExcel | ExcelForge | Notes |
|
|
164
|
+
|---|---------|--------|-------------|---------|---------|---------------|-----------|----------|------------|------------|------|--------------|-----------|-------------------|------------|-------|
|
|
165
|
+
| 80 | Button, checkbox, radio, etc. | Y (9 types) | Y | - | - | - | - | - | ~ | - | ~ | Y | ~ | Y | **Y** | All 9 types |
|
|
166
|
+
| 81 | Macro assignment | Y | - | - | - | - | - | - | - | - | - | Y | - | - | **Y** | |
|
|
167
|
+
| 82 | Linked cells, input ranges | Y | - | - | - | - | - | - | - | - | - | Y | - | ~ | **Y** | |
|
|
168
|
+
| 83 | Width/height sizing | Y | - | - | - | - | - | - | - | - | - | Y | - | Y | **Y** | |
|
|
169
|
+
|
|
170
|
+
## Page Setup & Printing
|
|
171
|
+
|
|
172
|
+
| # | Feature | EPPlus | SheetJS Pro | ExcelJS | ExcelTS | xlsx-populate | ClosedXML | openpyxl | Apache POI | XlsxWriter | NPOI | Aspose.Cells | Spire.XLS | GrapeCity DsExcel | ExcelForge | Notes |
|
|
173
|
+
|---|---------|--------|-------------|---------|---------|---------------|-----------|----------|------------|------------|------|--------------|-----------|-------------------|------------|-------|
|
|
174
|
+
| 84 | Paper size, orientation, margins | Y | - | Y | Y | ~ | Y | Y | Y | Y | Y | Y | Y | Y | **Y** | |
|
|
175
|
+
| 85 | Headers/footers (odd/even/first) | Y | - | Y | Y | - | Y | Y | Y | Y | Y | Y | Y | Y | **Y** | |
|
|
176
|
+
| 86 | Page breaks | Y | - | Y | - | Y | Y | Y | Y | Y | Y | Y | Y | Y | **Y** | |
|
|
177
|
+
| 87 | Print areas | Y | - | Y | - | - | Y | Y | Y | Y | Y | Y | Y | Y | **Y** | Via printArea + defined names |
|
|
178
|
+
| 88 | Scaling / fit-to-page | Y | - | Y | - | - | Y | Y | Y | Y | Y | Y | Y | Y | **Y** | fitToPage, fitToWidth, fitToHeight, scale |
|
|
179
|
+
|
|
180
|
+
## Protection & Security
|
|
181
|
+
|
|
182
|
+
| # | Feature | EPPlus | SheetJS Pro | ExcelJS | ExcelTS | xlsx-populate | ClosedXML | openpyxl | Apache POI | XlsxWriter | NPOI | Aspose.Cells | Spire.XLS | GrapeCity DsExcel | ExcelForge | Notes |
|
|
183
|
+
|---|---------|--------|-------------|---------|---------|---------------|-----------|----------|------------|------------|------|--------------|-----------|-------------------|------------|-------|
|
|
184
|
+
| 89 | Sheet protection with password | Y | Y | Y | Y | - | Y | Y | Y | Y | Y | Y | Y | Y | **Y** | |
|
|
185
|
+
| 90 | Cell locking/hiding | Y | - | Y | - | ~ | Y | Y | Y | Y | Y | Y | Y | Y | **Y** | |
|
|
186
|
+
| 91 | Workbook encryption | Y | Y | - | - | Y | - | - | Y | - | ~ | Y | Y | ~ | **Y** | Agile Encryption: encrypt/decrypt/isEncrypted |
|
|
187
|
+
| 92 | VBA code signing | Y | - | - | - | - | - | - | - | - | - | ~ | - | - | **Y** | PKCS#7/CMS with SHA-256 |
|
|
188
|
+
|
|
189
|
+
## Connections & External Data
|
|
190
|
+
|
|
191
|
+
| # | Feature | EPPlus | SheetJS Pro | ExcelJS | ExcelTS | xlsx-populate | ClosedXML | openpyxl | Apache POI | XlsxWriter | NPOI | Aspose.Cells | Spire.XLS | GrapeCity DsExcel | ExcelForge | Notes |
|
|
192
|
+
|---|---------|--------|-------------|---------|---------|---------------|-----------|----------|------------|------------|------|--------------|-----------|-------------------|------------|-------|
|
|
193
|
+
| 93 | OLEDB, ODBC, text, web connections | Y | - | - | - | - | - | - | ~ | - | - | ~ | - | - | **Y** | |
|
|
194
|
+
| 94 | Power Query (M formulas) | Y | - | - | - | - | - | - | ~ | - | - | ~ | - | - | **Y** | Read + round-trip |
|
|
195
|
+
| 95 | Query tables | Y | - | - | - | - | - | - | ~ | - | - | ~ | - | - | **Y** | addQueryTable API |
|
|
196
|
+
| 96 | External links (cross-workbook) | Y | - | - | - | - | ~ | Y | Y | - | ~ | Y | ~ | ~ | **Y** | addExternalLink API |
|
|
197
|
+
|
|
198
|
+
## Auto Filters
|
|
199
|
+
|
|
200
|
+
| # | Feature | EPPlus | SheetJS Pro | ExcelJS | ExcelTS | xlsx-populate | ClosedXML | openpyxl | Apache POI | XlsxWriter | NPOI | Aspose.Cells | Spire.XLS | GrapeCity DsExcel | ExcelForge | Notes |
|
|
201
|
+
|---|---------|--------|-------------|---------|---------|---------------|-----------|----------|------------|------------|------|--------------|-----------|-------------------|------------|-------|
|
|
202
|
+
| 97 | Basic column filters | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | **Y** | |
|
|
203
|
+
| 98 | Value/date/custom/top-10/dynamic | Y | - | - | - | - | Y | ~ | Y | ~ | ~ | Y | ~ | Y | **Y** | setAutoFilter with column criteria |
|
|
204
|
+
|
|
205
|
+
## Sparklines
|
|
206
|
+
|
|
207
|
+
| # | Feature | EPPlus | SheetJS Pro | ExcelJS | ExcelTS | xlsx-populate | ClosedXML | openpyxl | Apache POI | XlsxWriter | NPOI | Aspose.Cells | Spire.XLS | GrapeCity DsExcel | ExcelForge | Notes |
|
|
208
|
+
|---|---------|--------|-------------|---------|---------|---------------|-----------|----------|------------|------------|------|--------------|-----------|-------------------|------------|-------|
|
|
209
|
+
| 99 | Line, bar/column, win/loss | Y | - | - | - | - | - | - | ~ | Y | ~ | Y | Y | Y | **Y** | |
|
|
210
|
+
| 100 | Colors (high/low/first/last/neg) | Y | - | - | - | - | - | - | ~ | Y | ~ | Y | Y | Y | **Y** | |
|
|
211
|
+
|
|
212
|
+
## VBA Macros
|
|
213
|
+
|
|
214
|
+
| # | Feature | EPPlus | SheetJS Pro | ExcelJS | ExcelTS | xlsx-populate | ClosedXML | openpyxl | Apache POI | XlsxWriter | NPOI | Aspose.Cells | Spire.XLS | GrapeCity DsExcel | ExcelForge | Notes |
|
|
215
|
+
|---|---------|--------|-------------|---------|---------|---------------|-----------|----------|------------|------------|------|--------------|-----------|-------------------|------------|-------|
|
|
216
|
+
| 101 | Create/read/edit modules | Y | Y | - | - | - | - | - | ~ | ~ | ~ | Y | ~ | ~ | **Y** | Standard, class, document modules |
|
|
217
|
+
| 102 | VBA code signing | Y | - | - | - | - | - | - | - | - | - | - | - | - | **Y** | PKCS#7/CMS with SHA-256 |
|
|
218
|
+
| 103 | VBA UserForms | Y | Y | - | - | - | - | - | - | - | - | - | - | - | **Y** | UserForm modules with controls |
|
|
219
|
+
|
|
220
|
+
## Properties
|
|
221
|
+
|
|
222
|
+
| # | Feature | EPPlus | SheetJS Pro | ExcelJS | ExcelTS | xlsx-populate | ClosedXML | openpyxl | Apache POI | XlsxWriter | NPOI | Aspose.Cells | Spire.XLS | GrapeCity DsExcel | ExcelForge | Notes |
|
|
223
|
+
|---|---------|--------|-------------|---------|---------|---------------|-----------|----------|------------|------------|------|--------------|-----------|-------------------|------------|-------|
|
|
224
|
+
| 104 | Core properties | Y | Y | Y | - | Y | Y | Y | Y | Y | Y | Y | Y | Y | **Y** | title, author, subject... |
|
|
225
|
+
| 105 | Extended properties | Y | - | - | - | ~ | Y | Y | Y | ~ | Y | Y | Y | Y | **Y** | company, manager... |
|
|
226
|
+
| 106 | Custom properties | Y | - | - | - | ~ | Y | Y | Y | - | ~ | Y | Y | Y | **Y** | typed key-value store |
|
|
227
|
+
|
|
228
|
+
## Miscellaneous
|
|
229
|
+
|
|
230
|
+
| # | Feature | EPPlus | SheetJS Pro | ExcelJS | ExcelTS | xlsx-populate | ClosedXML | openpyxl | Apache POI | XlsxWriter | NPOI | Aspose.Cells | Spire.XLS | GrapeCity DsExcel | ExcelForge | Notes |
|
|
231
|
+
|---|---------|--------|-------------|---------|---------|---------------|-----------|----------|------------|------------|------|--------------|-----------|-------------------|------------|-------|
|
|
232
|
+
| 107 | OLE objects | Y | - | - | - | - | - | - | Y | - | ~ | Y | - | - | **Y** | Embedded binary OLE objects |
|
|
233
|
+
| 108 | Ignore error rules | Y | - | - | - | - | - | - | - | - | - | Y | - | ~ | **Y** | addIgnoredError API |
|
|
234
|
+
| 109 | Locale/international support | - | Y | - | - | - | ~ | ~ | ~ | - | - | Y | - | ~ | **Y** | LocaleSettings on workbook |
|
|
235
|
+
| 110 | PDF/Canvas/SVG rendering | - | Y | - | Y | - | - | - | - | - | - | Y | Y | Y | **Y** | Zero-dep PDF export: styles, borders, fills, merges, pagination, images, headers/footers |
|
|
236
|
+
| 111 | Row duplicate/splice | - | - | Y | - | - | Y | Y | Y | - | Y | Y | Y | Y | **Y** | duplicateRow, spliceRows |
|
|
237
|
+
| 112 | Workbook calc settings (auto/manual/iterative) | Y | - | - | - | - | Y | - | Y | - | ~ | Y | ~ | Y | **Y** | calc mode, iterative calc, full-calc-on-load |
|
|
238
|
+
| 113 | Advanced chart options (combo/secondary axis/trendlines/error bars) | Y | - | - | - | - | ~ | Y | Y | ~ | ~ | Y | ~ | Y | **Y** | |
|
|
239
|
+
| 114 | Pivot cache management (refreshOnLoad, source updates) | Y | - | - | - | - | ~ | ~ | Y | - | ~ | Y | ~ | Y | **Y** | |
|
|
240
|
+
| 115 | Structured references in formulas | Y | Y | Y | - | - | Y | Y | Y | - | Y | Y | Y | Y | **Y** | |
|
|
241
|
+
| 116 | Worksheet view settings (zoom/showFormulas/showZeros/gridlines/headings) | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | **Y** | |
|
|
242
|
+
| 117 | Print titles (repeat rows/columns) | Y | - | Y | - | - | ~ | ~ | ~ | Y | Y | Y | Y | Y | **Y** | |
|
|
243
|
+
| 118 | Header/footer images and rich tokens | Y | - | - | - | - | ~ | ~ | ~ | Y | ~ | Y | ~ | ~ | **Y** | |
|
|
244
|
+
| 119 | Workbook links behavior (update mode, break links metadata) | Y | - | - | - | - | ~ | ~ | ~ | - | ~ | Y | - | ~ | **Y** | |
|
|
245
|
+
| 120 | Date systems (1900/1904) | Y | Y | Y | - | - | Y | Y | Y | Y | Y | Y | Y | Y | **Y** | |
|
|
246
|
+
| 121 | Comments vs notes interoperability | Y | - | - | - | - | ~ | ~ | ~ | - | ~ | ~ | - | - | **Y** | |
|
|
247
|
+
| 122 | Protection options granularity (sort/filter/insert/format permissions) | Y | Y | Y | Y | - | Y | Y | Y | Y | Y | Y | Y | Y | **Y** | |
|
|
248
|
+
| 123 | Workbook-level protection options | Y | Y | Y | - | - | Y | Y | Y | Y | Y | Y | Y | Y | **Y** | |
|
|
249
|
+
|
|
250
|
+
---
|
|
251
|
+
|
|
252
|
+
## Summary Counts
|
|
253
|
+
|
|
254
|
+
| Library | Features Supported | Partial/Preserved | Not Supported |
|
|
255
|
+
|---------|-------------------|-------------------|---------------|
|
|
256
|
+
| **EPPlus 8** | 119 | 0 | 5 |
|
|
257
|
+
| **SheetJS Pro** | 60 | 2 | 62 |
|
|
258
|
+
| **ExcelJS** | 52 | 1 | 71 |
|
|
259
|
+
| **ExcelTS** | 31 | 1 | 92 |
|
|
260
|
+
| **xlsx-populate** | 28 | 6 | 90 |
|
|
261
|
+
| **ClosedXML** | 64 | 14 | 46 |
|
|
262
|
+
| **openpyxl** | 59 | 16 | 49 |
|
|
263
|
+
| **Apache POI** | 70 | 26 | 28 |
|
|
264
|
+
| **XlsxWriter** | 57 | 7 | 60 |
|
|
265
|
+
| **NPOI** | 57 | 32 | 35 |
|
|
266
|
+
| **Aspose.Cells** | 111 | 8 | 5 |
|
|
267
|
+
| **Spire.XLS** | 65 | 25 | 34 |
|
|
268
|
+
| **GrapeCity DsExcel** | 84 | 20 | 20 |
|
|
269
|
+
| **ExcelForge** | 122 | 0 | 2 |
|
|
270
|
+
|
|
271
|
+
## ExcelForge Unique Advantages
|
|
272
|
+
|
|
273
|
+
- **Zero dependencies** — no native modules, no System.Drawing, pure TS
|
|
274
|
+
- **Browser + Node + Deno + Bun + edge** — universal runtime support
|
|
275
|
+
- **Broad feature coverage across advanced OOXML scenarios** — especially in JS/TS ecosystems
|
|
276
|
+
- **Absolute image anchoring** — `xdr:absoluteAnchor` (not available in EPPlus/SheetJS/ExcelJS/ExcelTS)
|
|
277
|
+
- **In-cell pictures** — only EPPlus and ExcelForge support this (Excel 365+)
|
|
278
|
+
- **Form controls with all 9 types** — not available in ExcelJS/ExcelTS, limited in SheetJS
|
|
279
|
+
- **Custom DEFLATE compression** — built-in, levels 0-9, no zlib dependency
|
|
280
|
+
- **Real chart sheets** — proper `<chartsheet>` XML, not embedded in worksheets
|
|
281
|
+
- **Dialog sheets** — Excel 5 dialog sheet support with form controls
|
|
282
|
+
- **Workbook encryption** — OOXML Agile Encryption with Web Crypto API (tree-shakeable)
|
|
283
|
+
- **Digital signatures** — Package (XML-DSig) + VBA (PKCS#7/CMS) signing
|
|
284
|
+
- **Math equations (OMML)** — only EPPlus and ExcelForge among listed libraries
|
|
285
|
+
- **Modern chart styling** — 18 color palettes, gradients, data labels, shadows, templates
|
|
286
|
+
- **Multi-sheet HTML export** — tabbed workbook HTML with CF visualization, sparklines, charts, shapes, WordArt, math, images, form controls
|
|
287
|
+
- **PDF export** — zero-dependency PDF generation with cell styles, borders, fills, merged cells, number formatting, auto-pagination, fit-to-width, images (JPEG/PNG), headers/footers, page setup
|
|
288
|
+
- **Shapes & WordArt** — 28 preset shape types + WordArt text effects
|
|
289
|
+
- **Theme support** — full Office theme XML with customizable colors and fonts
|
|
290
|
+
- **Table & pivot slicers** — slicer UI elements with cache definitions
|
|
291
|
+
- **Custom icon sets** — x14 extension-based custom CF icon mapping
|
|
292
|
+
- **External links** — cross-workbook references
|
|
293
|
+
- **Locale settings** — configurable date/number/currency formatting
|
|
294
|
+
- **.xltx template support** — read and write Excel template files
|