@node-projects/excelforge 3.0.0 → 3.2.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/MISSING.md DELETED
@@ -1,326 +0,0 @@
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
- - **ExcelForge** (TS) — https://github.com/nickmanning214/ExcelForge
9
-
10
- Legend: **Y** = supported, **~** = partial, **-** = not supported, **P** = preserved on round-trip only
11
-
12
- ---
13
-
14
- ## Core Read/Write
15
-
16
- | # | Feature | EPPlus | SheetJS Pro | ExcelJS | ExcelTS | ExcelForge | Notes |
17
- |---|---------|--------|-------------|---------|---------|------------|-------|
18
- | 1 | Read/write .xlsx | Y | Y | Y | Y | **Y** | |
19
- | 2 | Read/write .xlsm (VBA macros) | Y | Y | - | - | **Y** | ExcelForge: create/edit modules, full round-trip |
20
- | 3 | Read .xltx templates | Y | Y | - | - | **Y** | isTemplate flag for write; reads natively |
21
- | 4 | Read/write CSV | Y | Y | Y | Y | **Y** | Tree-shakeable CSV module |
22
- | 5 | Export JSON | Y | Y | Y | - | **Y** | Tree-shakeable JSON module |
23
- | 6 | Export HTML/CSS | Y | Y | - | - | **Y** | Enhanced: number fmts, CF viz, sparklines, charts, column widths, multi-sheet tabs |
24
- | 7 | Streaming read/write | Y (async) | Y | Y | Y | **-** | ExcelTS: WorkbookReader/WorkbookWriter |
25
- | 8 | Workbook encryption/decryption | Y | Y | - | - | **Y** | OOXML Agile Encryption with AES-256-CBC + SHA-512 |
26
- | 9 | Digital signatures | Y | - | - | - | **Y** | Package (XML-DSig) + VBA (PKCS#7/CMS) signing |
27
-
28
- ## Cell Values & Formulas
29
-
30
- | # | Feature | EPPlus | SheetJS Pro | ExcelJS | ExcelTS | ExcelForge | Notes |
31
- |---|---------|--------|-------------|---------|---------|------------|-------|
32
- | 10 | Strings, numbers, booleans, dates | Y | Y | Y | Y | **Y** | |
33
- | 11 | Rich text in cells | Y | Y | Y | Y | **Y** | |
34
- | 12 | Formulas (store & preserve) | Y | Y | Y | Y | **Y** | |
35
- | 13 | Formula calculation engine | Y (463 fns) | Y | - | - | **Y** | Tree-shakeable; 60+ functions |
36
- | 14 | Array formulas | Y | Y | Y | - | **Y** | |
37
- | 15 | Dynamic array formulas | Y | - | - | - | **Y** | setDynamicArrayFormula API |
38
- | 16 | Shared formulas | Y | Y | Y | - | **Y** | setSharedFormula API |
39
- | 17 | R1C1 reference style | Y | - | - | - | **Y** | a1ToR1C1, r1c1ToA1, formula converters |
40
- | 18 | Hyperlinks | Y | Y | Y | Y | **Y** | |
41
- | 19 | Error values | Y | Y | Y | - | **Y** | CellError class with typed API |
42
-
43
- ## Styling
44
-
45
- | # | Feature | EPPlus | SheetJS Pro | ExcelJS | ExcelTS | ExcelForge | Notes |
46
- |---|---------|--------|-------------|---------|---------|------------|-------|
47
- | 20 | Number formats | Y | Y | Y | Y | **Y** | 30+ presets |
48
- | 21 | Fonts (bold, italic, color, etc.) | Y | Y | Y | Y | **Y** | |
49
- | 22 | Fills (solid, pattern, gradient) | Y | Y | Y | Y | **Y** | |
50
- | 23 | Borders (all styles) | Y | Y | Y | Y | **Y** | |
51
- | 24 | Alignment (h/v, wrap, rotation) | Y | Y | Y | Y | **Y** | |
52
- | 25 | Named/cell styles | Y | Y | - | - | **Y** | registerNamedStyle API |
53
- | 26 | Themes (load .thmx) | Y | - | - | - | **Y** | Full theme XML with custom colors/fonts |
54
-
55
- ## Layout & Structure
56
-
57
- | # | Feature | EPPlus | SheetJS Pro | ExcelJS | ExcelTS | ExcelForge | Notes |
58
- |---|---------|--------|-------------|---------|---------|------------|-------|
59
- | 27 | Merge cells | Y | Y | Y | Y | **Y** | |
60
- | 28 | Freeze/split panes | Y | Y | Y | Y | **Y** | |
61
- | 29 | Column widths / row heights | Y | Y | Y | Y | **Y** | |
62
- | 30 | Hide rows/columns | Y | Y | Y | - | **Y** | |
63
- | 31 | Outline grouping (collapse/expand) | Y | Y | Y | - | **Y** | |
64
- | 32 | AutoFit columns | Y | - | - | - | **Y** | Char-count approximation |
65
- | 33 | Multiple sheets (hidden/veryHidden) | Y | Y | Y | Y | **Y** | |
66
- | 34 | Tab colors | Y | Y | Y | - | **Y** | |
67
- | 35 | Copy worksheets | Y | - | - | - | **Y** | Copies cells, styles, merges |
68
- | 36 | Copy/move ranges | Y | - | - | - | **Y** | copyRange, moveRange |
69
- | 37 | Insert/delete ranges (auto-shift) | Y | - | Y | - | **Y** | insertRows, deleteRows, insertColumns |
70
- | 38 | Sort ranges | Y | - | - | - | **Y** | sortRange with asc/desc |
71
- | 39 | Fill operations | Y | - | - | - | **Y** | fillNumber, fillDate, fillList |
72
- | 40 | Named ranges (workbook + sheet) | Y | Y | Y | - | **Y** | |
73
- | 41 | Print areas | Y | - | - | - | **Y** | Via printArea property |
74
-
75
- ## Tables
76
-
77
- | # | Feature | EPPlus | SheetJS Pro | ExcelJS | ExcelTS | ExcelForge | Notes |
78
- |---|---------|--------|-------------|---------|---------|------------|-------|
79
- | 42 | Styled Excel tables | Y (60 styles) | Y | Y | Y | **Y** | 27 built-in presets |
80
- | 43 | Totals row | Y | - | - | - | **Y** | |
81
- | 44 | Custom table styles | Y | - | - | - | **Y** | registerTableStyle with DXF |
82
- | 45 | Table slicers | Y | - | - | - | **Y** | addTableSlicer API with slicer cache |
83
-
84
- ## Conditional Formatting
85
-
86
- | # | Feature | EPPlus | SheetJS Pro | ExcelJS | ExcelTS | ExcelForge | Notes |
87
- |---|---------|--------|-------------|---------|---------|------------|-------|
88
- | 46 | Cell rules | Y (45 types) | Y | Y | Y | **Y** | |
89
- | 47 | Color scales | Y | Y | Y | - | **Y** | |
90
- | 48 | Data bars | Y | Y | Y | - | **Y** | |
91
- | 49 | Icon sets | Y | Y | Y | - | **Y** | |
92
- | 50 | Custom icon sets | Y | - | - | - | **Y** | CFCustomIconSet with x14 extension |
93
- | 51 | Cross-worksheet references | Y | - | - | - | **Y** | sqref/formula accept sheet refs |
94
-
95
- ## Data Validation
96
-
97
- | # | Feature | EPPlus | SheetJS Pro | ExcelJS | ExcelTS | ExcelForge | Notes |
98
- |---|---------|--------|-------------|---------|---------|------------|-------|
99
- | 52 | Dropdowns, whole/decimal, date, time | Y | Y | Y | Y | **Y** | |
100
- | 53 | Text length, custom formula | Y | Y | Y | Y | **Y** | |
101
-
102
- ## Pivot Tables
103
-
104
- | # | Feature | EPPlus | SheetJS Pro | ExcelJS | ExcelTS | ExcelForge | Notes |
105
- |---|---------|--------|-------------|---------|---------|------------|-------|
106
- | 54 | Row/column/data fields | Y | Y | ~ | Y | **Y** | |
107
- | 55 | Aggregation functions | Y (12 types) | - | - | - | **Y** | sum, count, avg, max, min... |
108
- | 56 | Styles (84 presets) | Y | - | - | - | **Y** | Built-in presets + custom pivot styles |
109
- | 57 | Custom pivot styles | Y | - | - | - | **Y** | registerPivotStyle API |
110
- | 58 | Pivot table slicers | Y | - | - | - | **Y** | addPivotSlicer API |
111
- | 59 | Calculated fields | Y | - | - | - | **Y** | calculatedFields on PivotTable |
112
- | 60 | Numeric/date grouping | Y | - | - | - | **Y** | fieldGrouping on PivotTable |
113
- | 61 | GETPIVOTDATA function | Y | - | - | - | **Y** | In formula engine |
114
- | 62 | Pivot area styling | Y | - | - | - | **Y** | Via custom pivot styles |
115
-
116
- ## Charts
117
-
118
- | # | Feature | EPPlus | SheetJS Pro | ExcelJS | ExcelTS | ExcelForge | Notes |
119
- |---|---------|--------|-------------|---------|---------|------------|-------|
120
- | 63 | Bar, column, line, area, pie, etc. | Y (all 2019) | Y | - | Y | **Y** | 10 chart types |
121
- | 64 | Scatter, radar, bubble, doughnut | Y | Y | - | - | **Y** | |
122
- | 65 | Chart sheets | Y | Y | - | - | **Y** | addChartSheet API |
123
- | 66 | Chart templates (.crtx) | Y | - | - | - | **Y** | save/apply/serialize templates |
124
- | 67 | Modern chart styling (Excel 2019) | Y | - | - | - | **Y** | Color palettes, gradients, data labels, shadows |
125
- | 68 | WordArt | - | Y | - | - | **Y** | prstTxWarp text effects |
126
- | 68b | Math Equations (OMML) | Y | - | - | - | **Y** | Office Math Markup Language in drawings |
127
-
128
- ## Images & Drawings
129
-
130
- | # | Feature | EPPlus | SheetJS Pro | ExcelJS | ExcelTS | ExcelForge | Notes |
131
- |---|---------|--------|-------------|---------|---------|------------|-------|
132
- | 69 | PNG, JPEG, GIF, TIFF | Y | Y | Y | ~ | **Y** | ExcelTS: JPEG, PNG only |
133
- | 70 | BMP, SVG, WebP, ICO, EMF, WMF | Y | ~ | - | - | **Y** | |
134
- | 71 | Two-cell anchor | Y | Y | Y | Y | **Y** | |
135
- | 72 | One-cell anchor (from + size) | Y | - | Y | - | **Y** | |
136
- | 73 | Absolute anchor (no cell ref) | - | - | - | - | **Y** | ExcelForge unique |
137
- | 74 | In-cell pictures (richData) | Y | - | - | - | **Y** | Excel 365+ |
138
- | 75 | Shapes (187 types) | Y | Y | - | - | **Y** | 28 preset shapes with fill/line/text |
139
- | 76 | Shape text, effects, gradients | Y | ~ | - | - | **Y** | addShape API with preset geometries |
140
-
141
- ## Comments
142
-
143
- | # | Feature | EPPlus | SheetJS Pro | ExcelJS | ExcelTS | ExcelForge | Notes |
144
- |---|---------|--------|-------------|---------|---------|------------|-------|
145
- | 77 | Cell comments with author | Y | Y | Y | Y | **Y** | |
146
- | 78 | Rich-text comments | Y | - | - | - | **Y** | Comment.richText with Font runs |
147
- | 79 | Threaded comments (mentions) | Y | - | - | - | **Y** | Via rich-text comments with author prefixes |
148
-
149
- ## Form Controls
150
-
151
- | # | Feature | EPPlus | SheetJS Pro | ExcelJS | ExcelTS | ExcelForge | Notes |
152
- |---|---------|--------|-------------|---------|---------|------------|-------|
153
- | 80 | Button, checkbox, radio, etc. | Y (9 types) | Y | - | - | **Y** | All 9 types |
154
- | 81 | Macro assignment | Y | - | - | - | **Y** | |
155
- | 82 | Linked cells, input ranges | Y | - | - | - | **Y** | |
156
- | 83 | Width/height sizing | Y | - | - | - | **Y** | |
157
-
158
- ## Page Setup & Printing
159
-
160
- | # | Feature | EPPlus | SheetJS Pro | ExcelJS | ExcelTS | ExcelForge | Notes |
161
- |---|---------|--------|-------------|---------|---------|------------|-------|
162
- | 84 | Paper size, orientation, margins | Y | - | Y | Y | **Y** | |
163
- | 85 | Headers/footers (odd/even/first) | Y | - | Y | Y | **Y** | |
164
- | 86 | Page breaks | Y | - | Y | - | **Y** | |
165
- | 87 | Print areas | Y | - | Y | - | **Y** | Via printArea + defined names |
166
- | 88 | Scaling / fit-to-page | Y | - | Y | - | **Y** | fitToPage, fitToWidth, fitToHeight, scale |
167
-
168
- ## Protection & Security
169
-
170
- | # | Feature | EPPlus | SheetJS Pro | ExcelJS | ExcelTS | ExcelForge | Notes |
171
- |---|---------|--------|-------------|---------|---------|------------|-------|
172
- | 89 | Sheet protection with password | Y | Y | Y | Y | **Y** | |
173
- | 90 | Cell locking/hiding | Y | - | Y | - | **Y** | |
174
- | 91 | Workbook encryption | Y | Y | - | - | **Y** | Agile Encryption: encrypt/decrypt/isEncrypted |
175
- | 92 | VBA code signing | Y | - | - | - | **Y** | PKCS#7/CMS with SHA-256 |
176
-
177
- ## Connections & External Data
178
-
179
- | # | Feature | EPPlus | SheetJS Pro | ExcelJS | ExcelTS | ExcelForge | Notes |
180
- |---|---------|--------|-------------|---------|---------|------------|-------|
181
- | 93 | OLEDB, ODBC, text, web connections | Y | - | - | - | **Y** | |
182
- | 94 | Power Query (M formulas) | Y | - | - | - | **Y** | Read + round-trip |
183
- | 95 | Query tables | Y | - | - | - | **Y** | addQueryTable API |
184
- | 96 | External links (cross-workbook) | Y | - | - | - | **Y** | addExternalLink API |
185
-
186
- ## Auto Filters
187
-
188
- | # | Feature | EPPlus | SheetJS Pro | ExcelJS | ExcelTS | ExcelForge | Notes |
189
- |---|---------|--------|-------------|---------|---------|------------|-------|
190
- | 97 | Basic column filters | Y | Y | Y | Y | **Y** | |
191
- | 98 | Value/date/custom/top-10/dynamic | Y | - | - | - | **Y** | setAutoFilter with column criteria |
192
-
193
- ## Sparklines
194
-
195
- | # | Feature | EPPlus | SheetJS Pro | ExcelJS | ExcelTS | ExcelForge | Notes |
196
- |---|---------|--------|-------------|---------|---------|------------|-------|
197
- | 99 | Line, bar/column, win/loss | Y | - | - | - | **Y** | |
198
- | 100 | Colors (high/low/first/last/neg) | Y | - | - | - | **Y** | |
199
-
200
- ## VBA Macros
201
-
202
- | # | Feature | EPPlus | SheetJS Pro | ExcelJS | ExcelTS | ExcelForge | Notes |
203
- |---|---------|--------|-------------|---------|---------|------------|-------|
204
- | 101 | Create/read/edit modules | Y | Y | - | - | **Y** | Standard, class, document modules |
205
- | 102 | VBA code signing | Y | - | - | - | **Y** | PKCS#7/CMS with SHA-256 |
206
- | 103 | VBA UserForms | Y | Y | - | - | **-** | |
207
-
208
- ## Properties
209
-
210
- | # | Feature | EPPlus | SheetJS Pro | ExcelJS | ExcelTS | ExcelForge | Notes |
211
- |---|---------|--------|-------------|---------|---------|------------|-------|
212
- | 104 | Core properties | Y | Y | Y | - | **Y** | title, author, subject... |
213
- | 105 | Extended properties | Y | - | - | - | **Y** | company, manager... |
214
- | 106 | Custom properties | Y | - | - | - | **Y** | typed key-value store |
215
-
216
- ## Miscellaneous
217
-
218
- | # | Feature | EPPlus | SheetJS Pro | ExcelJS | ExcelTS | ExcelForge | Notes |
219
- |---|---------|--------|-------------|---------|---------|------------|-------|
220
- | 107 | OLE objects | Y | - | - | - | **-** | |
221
- | 108 | Ignore error rules | Y | - | - | - | **Y** | addIgnoredError API |
222
- | 109 | Locale/international support | - | Y | - | - | **Y** | LocaleSettings on workbook |
223
- | 110 | PDF/Canvas/SVG rendering | - | Y | - | Y | **-** | ExcelTS: PDF export module |
224
- | 111 | Row duplicate/splice | - | - | Y | - | **Y** | duplicateRow, spliceRows |
225
-
226
- ---
227
-
228
- ## Summary Counts
229
-
230
- | Library | Features Supported | Partial/Preserved | Not Supported |
231
- |---------|-------------------|-------------------|---------------|
232
- | **EPPlus 8** | 106 | 0 | 5 |
233
- | **SheetJS Pro** | 55 | 2 | 54 |
234
- | **ExcelJS** | 46 | 1 | 64 |
235
- | **ExcelTS** | 33 | 1 | 77 |
236
- | **ExcelForge** | 109 | 0 | 5 |
237
-
238
- ## ExcelForge Unique Advantages
239
-
240
- - **Zero dependencies** — no native modules, no System.Drawing, pure TS
241
- - **Browser + Node + Deno + Bun + edge** — universal runtime support
242
- - **109 features supported** — exceeds EPPlus (106) among JS/TS libraries
243
- - **Absolute image anchoring** — `xdr:absoluteAnchor` (not available in EPPlus/SheetJS/ExcelJS/ExcelTS)
244
- - **In-cell pictures** — only EPPlus and ExcelForge support this (Excel 365+)
245
- - **Form controls with all 9 types** — not available in ExcelJS/ExcelTS, limited in SheetJS
246
- - **Custom DEFLATE compression** — built-in, levels 0-9, no zlib dependency
247
- - **Real chart sheets** — proper `<chartsheet>` XML, not embedded in worksheets
248
- - **Dialog sheets** — Excel 5 dialog sheet support with form controls
249
- - **Workbook encryption** — OOXML Agile Encryption with Web Crypto API (tree-shakeable)
250
- - **Digital signatures** — Package (XML-DSig) + VBA (PKCS#7/CMS) signing
251
- - **Math equations (OMML)** — only EPPlus and ExcelForge among listed libraries
252
- - **Modern chart styling** — 18 color palettes, gradients, data labels, shadows, templates
253
- - **Multi-sheet HTML export** — tabbed workbook HTML with CF visualization, sparklines, charts, shapes, WordArt, math, images, form controls
254
- - **Shapes & WordArt** — 28 preset shape types + WordArt text effects
255
- - **Theme support** — full Office theme XML with customizable colors and fonts
256
- - **Table & pivot slicers** — slicer UI elements with cache definitions
257
- - **Custom icon sets** — x14 extension-based custom CF icon mapping
258
- - **External links** — cross-workbook references
259
- - **Locale settings** — configurable date/number/currency formatting
260
- - **.xltx template support** — read and write Excel template files
261
-
262
- ## Key Missing Features (prioritized)
263
-
264
- ### High Impact
265
- | # | Feature | Available In | Effort |
266
- |---|---------|-------------|--------|
267
- | 7 | Streaming read/write | EPPlus, SheetJS, ExcelJS, ExcelTS | High |
268
-
269
- ### Medium Impact
270
- | # | Feature | Available In | Effort |
271
- |---|---------|-------------|--------|
272
- | 110 | PDF export | SheetJS, ExcelTS | Medium |
273
-
274
- ### Lower Impact
275
- | # | Feature | Available In | Effort |
276
- |---|---------|-------------|--------|
277
- | 107 | OLE objects | EPPlus | Medium |
278
- | 103 | VBA UserForms | EPPlus, SheetJS | High |
279
-
280
- ### Recently Implemented (v3.0)
281
- | # | Feature | Notes |
282
- |---|---------|-------|
283
- | 9 | Digital signatures | Package (XML-DSig) + VBA (PKCS#7/CMS) signing with SHA-256 |
284
- | 66 | Chart templates (.crtx) | save/apply/serialize/deserialize chart templates |
285
- | 67 | Modern chart styling (2019) | 18 color palettes, gradients, data labels, shadows, rounded corners |
286
- | 92/102 | VBA code signing | PKCS#7/CMS with SHA-256 via Web Crypto API |
287
- | - | Encryption fix | Added DataSpaces CFB structure for Excel compatibility |
288
- | - | Slicer fix | Fixed 7 issues in table/pivot slicer XML generation |
289
- | - | Pivot table fix | Fixed calculated fields in dataFields section |
290
- | - | Formula fix | Fixed XML entity escaping in formula content |
291
- | 8/91 | Workbook encryption | OOXML Agile Encryption with AES-256-CBC + SHA-512 |
292
- | 68b | Math Equations (OMML) | 16 element types: fractions, superscripts, radicals, matrices, etc. |
293
- | 26 | Themes | Full Office theme XML with custom colors/fonts |
294
- | 45 | Table slicers | addTableSlicer API with slicer caches |
295
- | 50 | Custom icon sets | x14 extension-based custom CF icons |
296
- | 51 | Cross-worksheet CF refs | sqref/formula accept sheet references |
297
- | 57 | Custom pivot styles | registerPivotStyle API |
298
- | 58 | Pivot slicers | addPivotSlicer API |
299
- | 61 | GETPIVOTDATA | Formula engine support |
300
- | 62 | Pivot area styling | Via custom pivot styles |
301
- | 68 | WordArt | prstTxWarp text effects |
302
- | 75/76 | Shapes | 28 preset shapes with fill/line/text/rotation |
303
- | 95 | Query tables | addQueryTable API |
304
- | 96 | External links | addExternalLink for cross-workbook refs |
305
- | 109 | Locale support | Configurable date/number/currency formatting |
306
- | 4 | CSV read/write | Tree-shakeable module |
307
- | 5 | JSON export | Tree-shakeable module |
308
- | 6 | HTML/CSS export | Tree-shakeable module |
309
- | 13 | Formula calculation engine | Tree-shakeable, 60+ functions |
310
- | 17 | R1C1 reference style | Full A1↔R1C1 and formula conversion |
311
- | 19 | Error values typed API | CellError class with constants |
312
- | 25 | Named/cell styles | registerNamedStyle API |
313
- | 32 | AutoFit columns | Character-count approximation |
314
- | 35 | Copy worksheets | Cells, styles, merges |
315
- | 37 | Insert/delete ranges | insertRows, deleteRows, insertColumns |
316
- | 38 | Sort ranges | sortRange with asc/desc |
317
- | 39 | Fill operations | fillNumber, fillDate, fillList |
318
- | 41/87 | Print areas | printArea property + defined names |
319
- | 44 | Custom table styles | registerTableStyle with DXF |
320
- | 65 | Chart sheets | addChartSheet API |
321
- | 78 | Rich-text comments | Comment.richText with Font runs |
322
- | 79 | Threaded comments | Rich-text with author prefixes |
323
- | 88 | Scaling / fit-to-page | fitToPage, scale, fitToWidth/Height |
324
- | 98 | Advanced filter types | custom, top10, value, dynamic |
325
- | 108 | Ignore error rules | addIgnoredError API |
326
- | 111 | Row duplicate/splice | duplicateRow, spliceRows |