@rowsncolumns/toolkit 24.4.3 → 24.4.4

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.
Files changed (86) hide show
  1. package/dist/cjs/excel-parser/interface.d.ts +5 -1
  2. package/dist/cjs/excel-parser/interface.d.ts.map +1 -1
  3. package/dist/cjs/excel-parser/plugins/base/index.d.ts +2 -0
  4. package/dist/cjs/excel-parser/plugins/base/index.d.ts.map +1 -1
  5. package/dist/cjs/excel-parser/plugins/base/index.js +3 -0
  6. package/dist/cjs/excel-parser/plugins/xls/index.d.ts +55 -9
  7. package/dist/cjs/excel-parser/plugins/xls/index.d.ts.map +1 -1
  8. package/dist/cjs/excel-parser/plugins/xls/index.js +487 -24
  9. package/dist/cjs/excel-parser/plugins/xlsb/index.d.ts.map +1 -1
  10. package/dist/cjs/excel-parser/plugins/xlsb/index.js +12 -5
  11. package/dist/cjs/excel-parser/plugins/xlsx/chartex.d.ts +37 -0
  12. package/dist/cjs/excel-parser/plugins/xlsx/chartex.d.ts.map +1 -0
  13. package/dist/cjs/excel-parser/plugins/xlsx/chartex.js +244 -0
  14. package/dist/cjs/excel-parser/plugins/xlsx/form-controls.d.ts +70 -0
  15. package/dist/cjs/excel-parser/plugins/xlsx/form-controls.d.ts.map +1 -0
  16. package/dist/cjs/excel-parser/plugins/xlsx/form-controls.js +295 -0
  17. package/dist/cjs/excel-parser/plugins/xlsx/index.d.ts +9 -1
  18. package/dist/cjs/excel-parser/plugins/xlsx/index.d.ts.map +1 -1
  19. package/dist/cjs/excel-parser/plugins/xlsx/index.js +251 -104
  20. package/dist/cjs/excel-parser/plugins/xlsx/styles.d.ts +15 -1
  21. package/dist/cjs/excel-parser/plugins/xlsx/styles.d.ts.map +1 -1
  22. package/dist/cjs/excel-parser/plugins/xlsx/styles.js +90 -4
  23. package/dist/cjs/excel-parser/registry.d.ts +7 -0
  24. package/dist/cjs/excel-parser/registry.d.ts.map +1 -1
  25. package/dist/cjs/excel-parser/registry.js +28 -1
  26. package/dist/cjs/excel-parser/types.d.ts +10 -1
  27. package/dist/cjs/excel-parser/types.d.ts.map +1 -1
  28. package/dist/cjs/excel-parser/workbook.d.ts +2 -0
  29. package/dist/cjs/excel-parser/workbook.d.ts.map +1 -1
  30. package/dist/cjs/excel-parser/workbook.js +20 -14
  31. package/dist/cjs/excel-parser/worker.js +128 -130
  32. package/dist/cjs/exporter/xlsx/chart-builder.d.ts.map +1 -1
  33. package/dist/cjs/exporter/xlsx/chart-builder.js +5 -33
  34. package/dist/cjs/exporter/xlsx/chartex-builder.d.ts +36 -0
  35. package/dist/cjs/exporter/xlsx/chartex-builder.d.ts.map +1 -0
  36. package/dist/cjs/exporter/xlsx/chartex-builder.js +109 -0
  37. package/dist/cjs/exporter/xlsx/form-controls-builder.d.ts +61 -0
  38. package/dist/cjs/exporter/xlsx/form-controls-builder.d.ts.map +1 -0
  39. package/dist/cjs/exporter/xlsx/form-controls-builder.js +197 -0
  40. package/dist/cjs/exporter/xlsx/xlsx-export.d.ts.map +1 -1
  41. package/dist/cjs/exporter/xlsx/xlsx-export.js +431 -193
  42. package/dist/cjs/tsconfig.cjs.tsbuildinfo +1 -1
  43. package/dist/esm/excel-parser/interface.d.ts +5 -1
  44. package/dist/esm/excel-parser/interface.d.ts.map +1 -1
  45. package/dist/esm/excel-parser/plugins/base/index.d.ts +2 -0
  46. package/dist/esm/excel-parser/plugins/base/index.d.ts.map +1 -1
  47. package/dist/esm/excel-parser/plugins/base/index.js +3 -0
  48. package/dist/esm/excel-parser/plugins/xls/index.d.ts +55 -9
  49. package/dist/esm/excel-parser/plugins/xls/index.d.ts.map +1 -1
  50. package/dist/esm/excel-parser/plugins/xls/index.js +429 -23
  51. package/dist/esm/excel-parser/plugins/xlsb/index.d.ts.map +1 -1
  52. package/dist/esm/excel-parser/plugins/xlsb/index.js +10 -3
  53. package/dist/esm/excel-parser/plugins/xlsx/chartex.d.ts +37 -0
  54. package/dist/esm/excel-parser/plugins/xlsx/chartex.d.ts.map +1 -0
  55. package/dist/esm/excel-parser/plugins/xlsx/chartex.js +199 -0
  56. package/dist/esm/excel-parser/plugins/xlsx/form-controls.d.ts +70 -0
  57. package/dist/esm/excel-parser/plugins/xlsx/form-controls.d.ts.map +1 -0
  58. package/dist/esm/excel-parser/plugins/xlsx/form-controls.js +246 -0
  59. package/dist/esm/excel-parser/plugins/xlsx/index.d.ts +9 -1
  60. package/dist/esm/excel-parser/plugins/xlsx/index.d.ts.map +1 -1
  61. package/dist/esm/excel-parser/plugins/xlsx/index.js +92 -6
  62. package/dist/esm/excel-parser/plugins/xlsx/styles.d.ts +15 -1
  63. package/dist/esm/excel-parser/plugins/xlsx/styles.d.ts.map +1 -1
  64. package/dist/esm/excel-parser/plugins/xlsx/styles.js +80 -0
  65. package/dist/esm/excel-parser/registry.d.ts +7 -0
  66. package/dist/esm/excel-parser/registry.d.ts.map +1 -1
  67. package/dist/esm/excel-parser/registry.js +18 -1
  68. package/dist/esm/excel-parser/types.d.ts +10 -1
  69. package/dist/esm/excel-parser/types.d.ts.map +1 -1
  70. package/dist/esm/excel-parser/workbook.d.ts +2 -0
  71. package/dist/esm/excel-parser/workbook.d.ts.map +1 -1
  72. package/dist/esm/excel-parser/workbook.js +16 -10
  73. package/dist/esm/excel-parser/worker.js +10 -18
  74. package/dist/esm/exporter/xlsx/chart-builder.d.ts.map +1 -1
  75. package/dist/esm/exporter/xlsx/chart-builder.js +0 -28
  76. package/dist/esm/exporter/xlsx/chartex-builder.d.ts +36 -0
  77. package/dist/esm/exporter/xlsx/chartex-builder.d.ts.map +1 -0
  78. package/dist/esm/exporter/xlsx/chartex-builder.js +97 -0
  79. package/dist/esm/exporter/xlsx/form-controls-builder.d.ts +61 -0
  80. package/dist/esm/exporter/xlsx/form-controls-builder.d.ts.map +1 -0
  81. package/dist/esm/exporter/xlsx/form-controls-builder.js +173 -0
  82. package/dist/esm/exporter/xlsx/xlsx-export.d.ts.map +1 -1
  83. package/dist/esm/exporter/xlsx/xlsx-export.js +228 -19
  84. package/dist/esm/tsconfig.esm.tsbuildinfo +1 -1
  85. package/package.json +3 -3
  86. package/xlsx.d.ts +14 -0
@@ -1,9 +1,12 @@
1
- import { __awaiter, __extends, __generator } from "tslib";
1
+ import { __assign, __asyncGenerator, __await, __awaiter, __extends, __generator, __read, __spreadArray, __values } from "tslib";
2
+ import { getCellXfsKey, ssfFormat, uuid } from "@rowsncolumns/utils";
3
+ import { read as readSheetJsWorkbook, utils as sheetJsUtils, } from "xlsx/xlsx.mjs";
2
4
  import { detectCfbContainerKind, LEGACY_XLS_UNSUPPORTED_MESSAGE, XLS_NOT_A_WORKBOOK_MESSAGE, } from "../../cfb-decryptor";
3
- import { XlsxPlugin } from "../xlsx/index";
4
- var ZIP_SIGNATURE = [0x50, 0x4b, 0x03, 0x04];
5
- var CFB_SIGNATURE = [0xd0, 0xcf, 0x11, 0xe0, 0xa1, 0xb1, 0x1a, 0xe1];
6
- var readHeader = function (source, length) { return __awaiter(void 0, void 0, void 0, function () {
5
+ import { excelColumnWidthToPixels, getRangeFromAddressRef } from "../../helpers";
6
+ import { BaseWorkbookPlugin } from "../base/index";
7
+ export var ZIP_SIGNATURE = [0x50, 0x4b, 0x03, 0x04];
8
+ export var CFB_SIGNATURE = [0xd0, 0xcf, 0x11, 0xe0, 0xa1, 0xb1, 0x1a, 0xe1];
9
+ export var readHeader = function (source, length) { return __awaiter(void 0, void 0, void 0, function () {
7
10
  var slice, _a;
8
11
  return __generator(this, function (_b) {
9
12
  switch (_b.label) {
@@ -22,47 +25,507 @@ var readHeader = function (source, length) { return __awaiter(void 0, void 0, vo
22
25
  }
23
26
  });
24
27
  }); };
25
- var startsWith = function (header, signature) {
28
+ export var startsWith = function (header, signature) {
26
29
  return header.length >= signature.length &&
27
30
  signature.every(function (byte, index) { return header[index] === byte; });
28
31
  };
29
32
  /**
30
- * `.xls` handler. The BIFF (Excel 97-2003) binary format is not parsed;
31
- * this plugin exists so a `.xls` file gets a clear, actionable error
32
- * instead of falling through to the xlsx zip reader (which fails with an
33
- * opaque "not a zip" error) or stalling in the password prompt. The one
34
- * `.xls` shape that does load is an OOXML package saved with the wrong
35
- * extension — Excel opens those too, so they are handed to the xlsx parser.
33
+ * BIFF8 error codes (MS-XLS 2.5.97 `BErr`) → Excel error literals. SheetJS
34
+ * surfaces an error cell as `{ t: "e", v: <code>, w: "#DIV/0!" }`.
35
+ */
36
+ var BIFF_ERROR_CODES = {
37
+ 0x00: "#NULL!",
38
+ 0x07: "#DIV/0!",
39
+ 0x0f: "#VALUE!",
40
+ 0x17: "#REF!",
41
+ 0x1d: "#NAME?",
42
+ 0x24: "#NUM!",
43
+ 0x2a: "#N/A",
44
+ 0x2b: "#GETTING_DATA",
45
+ };
46
+ var getNumberFormatType = function (pattern) {
47
+ var lower = pattern.toLowerCase();
48
+ if (lower.includes("yy") || lower.includes("dd"))
49
+ return "DATE";
50
+ if (lower.includes("h:") || lower.includes("am/pm"))
51
+ return "TIME";
52
+ if (lower.includes("%"))
53
+ return "PERCENT";
54
+ // Excel's builtin 49 (`@`) and any text-placeholder format — same facet
55
+ // type the xlsx styles reader yields for the cell.
56
+ if (lower.includes("@"))
57
+ return "TEXT";
58
+ if (lower.includes("$") ||
59
+ lower.includes("€") ||
60
+ lower.includes("£") ||
61
+ lower.includes("¥")) {
62
+ return "CURRENCY";
63
+ }
64
+ if (lower.includes("0") || lower.includes("#"))
65
+ return "NUMBER";
66
+ return "GENERAL";
67
+ };
68
+ /**
69
+ * BIFF `NAME` records (SheetJS `Workbook.Names`) → `NamedRange`s. Builtin
70
+ * names (`_xlnm.Print_Area`, `_xlnm._FilterDatabase`, …) are print / filter
71
+ * metadata, not user names, and are skipped. A reference that parses as a
72
+ * range becomes `range` (pinned to the sheet the ref names, else the name's
73
+ * own sheet scope, else the first sheet); anything else is kept as a
74
+ * formula `value`.
75
+ */
76
+ export var mapDefinedNames = function (names, sheets) {
77
+ return names.flatMap(function (name) {
78
+ var _a, _b, _c, _d, _e, _f;
79
+ if (!(name === null || name === void 0 ? void 0 : name.Name) || !name.Ref)
80
+ return [];
81
+ if (name.Name.startsWith("_xlnm."))
82
+ return [];
83
+ var namedRange = {
84
+ namedRangeId: uuid(),
85
+ name: name.Name,
86
+ };
87
+ var scopedSheetId = name.Sheet != null ? (_a = sheets[name.Sheet]) === null || _a === void 0 ? void 0 : _a.sheetId : undefined;
88
+ var ref = name.Ref.replace(/^=/, "");
89
+ var bang = ref.lastIndexOf("!");
90
+ var sheetPart = bang >= 0 ? ref.slice(0, bang) : undefined;
91
+ var refPart = bang >= 0 ? ref.slice(bang + 1) : ref;
92
+ var targetTitle = sheetPart === null || sheetPart === void 0 ? void 0 : sheetPart.replace(/^'(.*)'$/, "$1").replace(/''/g, "'");
93
+ var targetSheetId = (_f = (_d = (_c = (targetTitle
94
+ ? (_b = sheets.find(function (s) { return s.title === targetTitle; })) === null || _b === void 0 ? void 0 : _b.sheetId
95
+ : undefined)) !== null && _c !== void 0 ? _c : scopedSheetId) !== null && _d !== void 0 ? _d : (_e = sheets[0]) === null || _e === void 0 ? void 0 : _e.sheetId) !== null && _f !== void 0 ? _f : 1;
96
+ var gridRange = getRangeFromAddressRef(refPart);
97
+ if (gridRange) {
98
+ namedRange.range = __assign(__assign({}, gridRange), { sheetId: targetSheetId });
99
+ }
100
+ else {
101
+ namedRange.value = "=".concat(ref);
102
+ }
103
+ return [namedRange];
104
+ });
105
+ };
106
+ /**
107
+ * Legacy `.xls` (BIFF8, Excel 97-2003) reader.
108
+ *
109
+ * The BIFF record stream is decoded by SheetJS (`xlsx`, already a toolkit
110
+ * dependency for the CFB container reader used by the password decryptor),
111
+ * and the decoded workbook is mapped onto the same plugin contract the
112
+ * xlsx / xlsb readers implement: sheet names + visibility, cell values with
113
+ * their number formats, formulas with their cached results, merges, column
114
+ * widths / row heights, hyperlinks, cell notes, defined names and the 1904
115
+ * date-system flag. Cell fonts / fills / borders are not decoded (BIFF XF
116
+ * styling is outside SheetJS's open-source decoder), so a `.xls` opens with
117
+ * its data and number formatting; export goes through XLSX like XLSB.
118
+ *
119
+ * `load` also keeps the previous routing guards: an OOXML package saved with a
120
+ * `.xls` name is rejected here so `WorkBook` hands it to the xlsx parser, an
121
+ * encrypted container still asks for a password, and an HTML / text export
122
+ * saved as `.xls` fails with an actionable message.
36
123
  */
37
124
  var XlsPlugin = /** @class */ (function (_super) {
38
125
  __extends(XlsPlugin, _super);
39
126
  function XlsPlugin() {
40
- return _super !== null && _super.apply(this, arguments) || this;
127
+ var _this = _super.apply(this, __spreadArray([], __read(arguments), false)) || this;
128
+ _this.sheets = [];
129
+ _this.namedRanges = [];
130
+ _this.cellXfs = new Map();
131
+ _this.formatIds = new Map();
132
+ _this.use1904 = false;
133
+ return _this;
41
134
  }
42
- XlsPlugin.prototype.load = function (buffer, password) {
135
+ XlsPlugin.prototype.load = function (buffer, _password) {
43
136
  return __awaiter(this, void 0, void 0, function () {
44
- var header, kind;
45
- return __generator(this, function (_a) {
46
- switch (_a.label) {
137
+ var header, kind, bytes, _a, _b, workbook, message;
138
+ var _c, _d, _e, _f;
139
+ return __generator(this, function (_g) {
140
+ switch (_g.label) {
47
141
  case 0: return [4 /*yield*/, readHeader(buffer, CFB_SIGNATURE.length)];
48
142
  case 1:
49
- header = _a.sent();
143
+ header = _g.sent();
50
144
  if (startsWith(header, ZIP_SIGNATURE)) {
51
- return [2 /*return*/, _super.prototype.load.call(this, buffer, password)];
145
+ // An OOXML package mislabelled `.xls` — `WorkBook.load` routes these
146
+ // to the xlsx parser before reaching here; guard direct callers.
147
+ throw new Error("NOT_A_BIFF_WORKBOOK");
148
+ }
149
+ if (!startsWith(header, CFB_SIGNATURE)) {
150
+ throw new Error(XLS_NOT_A_WORKBOOK_MESSAGE);
52
151
  }
53
- if (!startsWith(header, CFB_SIGNATURE)) return [3 /*break*/, 3];
54
152
  return [4 /*yield*/, detectCfbContainerKind(buffer)];
55
153
  case 2:
56
- kind = _a.sent();
154
+ kind = _g.sent();
57
155
  if (kind === "encrypted-ooxml") {
58
156
  throw new Error("PASSWORD_REQUIRED");
59
157
  }
60
- throw new Error(LEGACY_XLS_UNSUPPORTED_MESSAGE);
61
- case 3: throw new Error(XLS_NOT_A_WORKBOOK_MESSAGE);
158
+ if (kind !== "legacy-xls") {
159
+ throw new Error(XLS_NOT_A_WORKBOOK_MESSAGE);
160
+ }
161
+ _a = Uint8Array.bind;
162
+ if (!(buffer instanceof File)) return [3 /*break*/, 4];
163
+ return [4 /*yield*/, buffer.arrayBuffer()];
164
+ case 3:
165
+ _b = _g.sent();
166
+ return [3 /*break*/, 5];
167
+ case 4:
168
+ _b = buffer;
169
+ _g.label = 5;
170
+ case 5:
171
+ bytes = new (_a.apply(Uint8Array, [void 0, _b]))();
172
+ try {
173
+ workbook = readSheetJsWorkbook(bytes, {
174
+ type: "array",
175
+ cellNF: true,
176
+ cellStyles: true,
177
+ cellDates: false,
178
+ cellText: false,
179
+ sheetStubs: false,
180
+ dense: false,
181
+ });
182
+ }
183
+ catch (error) {
184
+ message = error instanceof Error ? error.message : String(error);
185
+ if (/password/i.test(message) || /encrypt/i.test(message)) {
186
+ throw new Error(LEGACY_XLS_UNSUPPORTED_MESSAGE);
187
+ }
188
+ throw new Error("".concat(LEGACY_XLS_UNSUPPORTED_MESSAGE, " (").concat(message, ")"));
189
+ }
190
+ this.use1904 = Boolean((_d = (_c = workbook.Workbook) === null || _c === void 0 ? void 0 : _c.WBProps) === null || _d === void 0 ? void 0 : _d.date1904);
191
+ this.sheets = workbook.SheetNames.map(function (title, index) {
192
+ var _a, _b, _c, _d, _e, _f, _g;
193
+ var worksheet = (_a = workbook.Sheets[title]) !== null && _a !== void 0 ? _a : {};
194
+ var props = (_c = (_b = workbook.Workbook) === null || _b === void 0 ? void 0 : _b.Sheets) === null || _c === void 0 ? void 0 : _c[index];
195
+ var hiddenState = (_d = props === null || props === void 0 ? void 0 : props.Hidden) !== null && _d !== void 0 ? _d : 0;
196
+ var visibility = hiddenState === 2
197
+ ? "veryHidden"
198
+ : hiddenState === 1
199
+ ? "hidden"
200
+ : "visible";
201
+ var ref = worksheet["!ref"];
202
+ var range = ref ? sheetJsUtils.decode_range(ref) : undefined;
203
+ var rowCount = range ? range.e.r + 1 : 0;
204
+ var columnCount = range ? range.e.c + 1 : 0;
205
+ var merges = ((_e = worksheet["!merges"]) !== null && _e !== void 0 ? _e : []).map(function (merge) { return ({
206
+ startRowIndex: merge.s.r + 1,
207
+ endRowIndex: merge.e.r + 1,
208
+ startColumnIndex: merge.s.c + 1,
209
+ endColumnIndex: merge.e.c + 1,
210
+ }); });
211
+ var columnMetadata = [];
212
+ ((_f = worksheet["!cols"]) !== null && _f !== void 0 ? _f : []).forEach(function (col, colIndex) {
213
+ var _a, _b;
214
+ if (!col)
215
+ return;
216
+ var props = {};
217
+ if (col.hidden)
218
+ props.hiddenByUser = true;
219
+ var size = (_b = (_a = col.wpx) !== null && _a !== void 0 ? _a : (col.wch != null ? excelColumnWidthToPixels(col.wch) : undefined)) !== null && _b !== void 0 ? _b : (col.width != null ? excelColumnWidthToPixels(col.width) : undefined);
220
+ if (size != null && size > 0) {
221
+ props.size = size;
222
+ props.resizedByUser = true;
223
+ }
224
+ if (Object.keys(props).length > 0) {
225
+ columnMetadata[colIndex + 1] = props;
226
+ }
227
+ });
228
+ var rowMetadata = [];
229
+ ((_g = worksheet["!rows"]) !== null && _g !== void 0 ? _g : []).forEach(function (row, rowIndex) {
230
+ var _a;
231
+ if (!row)
232
+ return;
233
+ var props = {};
234
+ if (row.hidden)
235
+ props.hiddenByUser = true;
236
+ var size = (_a = row.hpx) !== null && _a !== void 0 ? _a : (row.hpt != null ? (row.hpt * 96) / 72 : undefined);
237
+ if (size != null && size > 0) {
238
+ props.size = Math.round(size);
239
+ props.resizedByUser = true;
240
+ }
241
+ if (Object.keys(props).length > 0) {
242
+ rowMetadata[rowIndex + 1] = props;
243
+ }
244
+ });
245
+ return {
246
+ sheetId: index + 1,
247
+ title: title,
248
+ hidden: visibility !== "visible",
249
+ visibility: visibility,
250
+ worksheet: worksheet,
251
+ rowCount: rowCount,
252
+ columnCount: columnCount,
253
+ merges: merges,
254
+ rowMetadata: rowMetadata,
255
+ columnMetadata: columnMetadata,
256
+ };
257
+ });
258
+ this.namedRanges = mapDefinedNames((_f = (_e = workbook.Workbook) === null || _e === void 0 ? void 0 : _e.Names) !== null && _f !== void 0 ? _f : [], this.sheets.map(function (s) { return ({ sheetId: s.sheetId, title: s.title }); }));
259
+ return [2 /*return*/];
260
+ }
261
+ });
262
+ });
263
+ };
264
+ XlsPlugin.prototype.dispose = function () {
265
+ this.sheets = [];
266
+ this.namedRanges = [];
267
+ this.cellXfs.clear();
268
+ this.formatIds.clear();
269
+ };
270
+ XlsPlugin.prototype.getSheetCount = function () {
271
+ return this.sheets.length;
272
+ };
273
+ XlsPlugin.prototype.getSheets = function () {
274
+ return __awaiter(this, arguments, void 0, function (minRowCount, minColumnCount) {
275
+ var sheets;
276
+ if (minRowCount === void 0) { minRowCount = 0; }
277
+ if (minColumnCount === void 0) { minColumnCount = 0; }
278
+ return __generator(this, function (_a) {
279
+ sheets = this.sheets.map(function (sheet) { return (__assign(__assign({ sheetId: sheet.sheetId, title: sheet.title, hidden: sheet.hidden }, (sheet.visibility !== "visible"
280
+ ? { visibility: sheet.visibility }
281
+ : {})), { rowCount: Math.max(minRowCount, sheet.rowCount), columnCount: Math.max(minColumnCount, sheet.columnCount), rowMetadata: sheet.rowMetadata, columnMetadata: sheet.columnMetadata, merges: sheet.merges })); });
282
+ return [2 /*return*/, [sheets, []]];
283
+ });
284
+ });
285
+ };
286
+ XlsPlugin.prototype.getCellXfs = function () {
287
+ return this.cellXfs;
288
+ };
289
+ XlsPlugin.prototype.registerFormat = function (format) {
290
+ var key = getCellXfsKey(format);
291
+ if (!this.cellXfs.has(key)) {
292
+ this.cellXfs.set(key, format);
293
+ }
294
+ return key;
295
+ };
296
+ XlsPlugin.prototype.getNamedRanges = function () {
297
+ return this.namedRanges;
298
+ };
299
+ /** `WBProps.date1904` — Mac-origin workbooks shift every date serial. */
300
+ XlsPlugin.prototype.getUse1904Epoch = function () {
301
+ return this.use1904;
302
+ };
303
+ /** Formulas carry their BIFF cached results, so no load-time recalc. */
304
+ XlsPlugin.prototype.requiresRecalc = function () {
305
+ return false;
306
+ };
307
+ XlsPlugin.prototype.toCellData = function (cell, enableCellXfsRegistry) {
308
+ var _a, _b;
309
+ var format = {};
310
+ var pattern = typeof cell.z === "string" && cell.z.toLowerCase() !== "general"
311
+ ? cell.z
312
+ : undefined;
313
+ if (pattern) {
314
+ format.numberFormat = { type: getNumberFormatType(pattern), pattern: pattern };
315
+ }
316
+ var hasFormat = Object.keys(format).length > 0;
317
+ var style;
318
+ if (enableCellXfsRegistry && hasFormat && pattern) {
319
+ var id = this.formatIds.get(pattern);
320
+ if (id === undefined) {
321
+ id = this.formatIds.size;
322
+ this.formatIds.set(pattern, id);
323
+ }
324
+ style = { sid: "xls:".concat(id) };
325
+ if (!this.cellXfs.has(style.sid)) {
326
+ this.cellXfs.set(style.sid, format);
327
+ }
328
+ }
329
+ var formatFields = style
330
+ ? { ef: style, uf: style }
331
+ : hasFormat
332
+ ? { ef: format, uf: format }
333
+ : {};
334
+ var formula = typeof cell.f === "string" && cell.f.length > 0
335
+ ? "=".concat(cell.f.replace(/^=/, ""))
336
+ : undefined;
337
+ var cellData = null;
338
+ switch (cell.t) {
339
+ case "s":
340
+ case "d": {
341
+ var text = cell.v == null ? "" : String(cell.v);
342
+ cellData = __assign(__assign(__assign({}, formatFields), { ue: formula ? { fv: formula } : { sv: text }, ev: { sv: text } }), (formula ? {} : { fv: text }));
343
+ break;
344
+ }
345
+ case "n": {
346
+ var value = Number(cell.v);
347
+ if (!Number.isFinite(value))
348
+ return null;
349
+ cellData = __assign(__assign(__assign({}, formatFields), { ue: formula ? { fv: formula } : { nv: value }, ev: { nv: value } }), (formula ? {} : { fv: ssfFormat(pattern !== null && pattern !== void 0 ? pattern : "GENERAL", value) }));
350
+ break;
351
+ }
352
+ case "b": {
353
+ var value = Boolean(cell.v);
354
+ cellData = __assign(__assign(__assign({}, formatFields), { ue: formula ? { fv: formula } : { bv: value }, ev: { bv: value } }), (formula ? {} : { fv: value ? "TRUE" : "FALSE" }));
355
+ break;
356
+ }
357
+ case "e": {
358
+ var code = (_a = (typeof cell.v === "number" ? BIFF_ERROR_CODES[cell.v] : undefined)) !== null && _a !== void 0 ? _a : (typeof cell.w === "string" && cell.w.startsWith("#")
359
+ ? cell.w
360
+ : "#VALUE!");
361
+ var errorValue = {
362
+ ev: { type: "Error", name: code, message: code },
363
+ };
364
+ cellData = __assign(__assign(__assign({}, formatFields), { ue: formula ? { fv: formula } : errorValue, ev: errorValue }), (formula ? {} : { fv: code }));
365
+ break;
366
+ }
367
+ case "z":
368
+ default: {
369
+ if (formula) {
370
+ cellData = __assign(__assign({}, formatFields), { ue: { fv: formula } });
371
+ }
372
+ else if (hasFormat) {
373
+ cellData = __assign({}, formatFields);
374
+ }
375
+ else {
376
+ return null;
377
+ }
378
+ }
379
+ }
380
+ if ((_b = cell.l) === null || _b === void 0 ? void 0 : _b.Target) {
381
+ var target = cell.l.Target;
382
+ var tooltip = cell.l.Tooltip ? { tooltip: cell.l.Tooltip } : {};
383
+ cellData.hyperlink = target.startsWith("#")
384
+ ? __assign({ kind: "internal", location: target.slice(1) }, tooltip) : __assign({ kind: "external", url: target }, tooltip);
385
+ }
386
+ if (Array.isArray(cell.c) && cell.c.length > 0) {
387
+ var note = cell.c
388
+ .map(function (comment) { var _a; return (_a = comment === null || comment === void 0 ? void 0 : comment.t) !== null && _a !== void 0 ? _a : ""; })
389
+ .filter(function (text) { return text.length > 0; })
390
+ .join("\n");
391
+ if (note)
392
+ cellData.note = note;
393
+ }
394
+ return cellData;
395
+ };
396
+ XlsPlugin.prototype.processSheetData = function () {
397
+ return __asyncGenerator(this, arguments, function processSheetData_1(chunkSize, enableCellXfsRegistry, _enableSharedStrings) {
398
+ var totalSheets, _loop_1, this_1, index;
399
+ var _this = this;
400
+ if (chunkSize === void 0) { chunkSize = 100; }
401
+ if (enableCellXfsRegistry === void 0) { enableCellXfsRegistry = false; }
402
+ return __generator(this, function (_a) {
403
+ switch (_a.label) {
404
+ case 0:
405
+ totalSheets = this.sheets.length;
406
+ _loop_1 = function (index) {
407
+ var sheet, rows, _b, _c, address, cell, _d, r, c, cellData, row, sortedRows, chunkRows, chunkRowIndices, chunkIndex, startRowIndex, endRowIndex, emit, sortedRows_1, sortedRows_1_1, _e, rowIndex, rowData, e_1_1;
408
+ var e_2, _f, e_1, _g;
409
+ return __generator(this, function (_h) {
410
+ switch (_h.label) {
411
+ case 0:
412
+ sheet = this_1.sheets[index];
413
+ rows = new Map();
414
+ try {
415
+ for (_b = (e_2 = void 0, __values(Object.keys(sheet.worksheet))), _c = _b.next(); !_c.done; _c = _b.next()) {
416
+ address = _c.value;
417
+ if (address.startsWith("!"))
418
+ continue;
419
+ cell = sheet.worksheet[address];
420
+ if (!cell || typeof cell !== "object")
421
+ continue;
422
+ _d = sheetJsUtils.decode_cell(address), r = _d.r, c = _d.c;
423
+ if (r < 0 || c < 0)
424
+ continue;
425
+ cellData = this_1.toCellData(cell, enableCellXfsRegistry);
426
+ if (!cellData)
427
+ continue;
428
+ row = rows.get(r + 1);
429
+ if (!row) {
430
+ row = { values: [] };
431
+ rows.set(r + 1, row);
432
+ }
433
+ row.values[c + 1] = cellData;
434
+ }
435
+ }
436
+ catch (e_2_1) { e_2 = { error: e_2_1 }; }
437
+ finally {
438
+ try {
439
+ if (_c && !_c.done && (_f = _b.return)) _f.call(_b);
440
+ }
441
+ finally { if (e_2) throw e_2.error; }
442
+ }
443
+ sortedRows = Array.from(rows.entries()).sort(function (a, b) { return a[0] - b[0]; });
444
+ chunkRows = [];
445
+ chunkRowIndices = [];
446
+ chunkIndex = 0;
447
+ startRowIndex = -1;
448
+ endRowIndex = -1;
449
+ emit = function (isLastChunk) { return ({
450
+ sheetId: sheet.sheetId,
451
+ title: sheet.title,
452
+ currentSheetIndex: index,
453
+ totalSheets: totalSheets,
454
+ chunkIndex: chunkIndex,
455
+ rows: chunkRows,
456
+ rowIndices: chunkRowIndices,
457
+ startRowIndex: startRowIndex,
458
+ endRowIndex: endRowIndex,
459
+ totalRows: sheet.rowCount,
460
+ isLastChunk: isLastChunk,
461
+ cellXfs: _this.cellXfs,
462
+ }); };
463
+ _h.label = 1;
464
+ case 1:
465
+ _h.trys.push([1, 7, 8, 9]);
466
+ sortedRows_1 = (e_1 = void 0, __values(sortedRows)), sortedRows_1_1 = sortedRows_1.next();
467
+ _h.label = 2;
468
+ case 2:
469
+ if (!!sortedRows_1_1.done) return [3 /*break*/, 6];
470
+ _e = __read(sortedRows_1_1.value, 2), rowIndex = _e[0], rowData = _e[1];
471
+ if (chunkRows.length === 0)
472
+ startRowIndex = rowIndex;
473
+ chunkRows.push(rowData);
474
+ chunkRowIndices.push(rowIndex);
475
+ endRowIndex = rowIndex;
476
+ if (!(chunkRows.length >= chunkSize)) return [3 /*break*/, 5];
477
+ return [4 /*yield*/, __await(emit(false))];
478
+ case 3: return [4 /*yield*/, _h.sent()];
479
+ case 4:
480
+ _h.sent();
481
+ chunkRows = [];
482
+ chunkRowIndices = [];
483
+ chunkIndex += 1;
484
+ startRowIndex = -1;
485
+ endRowIndex = -1;
486
+ _h.label = 5;
487
+ case 5:
488
+ sortedRows_1_1 = sortedRows_1.next();
489
+ return [3 /*break*/, 2];
490
+ case 6: return [3 /*break*/, 9];
491
+ case 7:
492
+ e_1_1 = _h.sent();
493
+ e_1 = { error: e_1_1 };
494
+ return [3 /*break*/, 9];
495
+ case 8:
496
+ try {
497
+ if (sortedRows_1_1 && !sortedRows_1_1.done && (_g = sortedRows_1.return)) _g.call(sortedRows_1);
498
+ }
499
+ finally { if (e_1) throw e_1.error; }
500
+ return [7 /*endfinally*/];
501
+ case 9:
502
+ if (!chunkRows.length) return [3 /*break*/, 12];
503
+ return [4 /*yield*/, __await(emit(true))];
504
+ case 10: return [4 /*yield*/, _h.sent()];
505
+ case 11:
506
+ _h.sent();
507
+ _h.label = 12;
508
+ case 12: return [2 /*return*/];
509
+ }
510
+ });
511
+ };
512
+ this_1 = this;
513
+ index = 0;
514
+ _a.label = 1;
515
+ case 1:
516
+ if (!(index < this.sheets.length)) return [3 /*break*/, 4];
517
+ return [5 /*yield**/, _loop_1(index)];
518
+ case 2:
519
+ _a.sent();
520
+ _a.label = 3;
521
+ case 3:
522
+ index++;
523
+ return [3 /*break*/, 1];
524
+ case 4: return [2 /*return*/];
62
525
  }
63
526
  });
64
527
  });
65
528
  };
66
529
  return XlsPlugin;
67
- }(XlsxPlugin));
530
+ }(BaseWorkbookPlugin));
68
531
  export { XlsPlugin };
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../excel-parser/plugins/xlsb/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../excel-parser/plugins/xlsb/index.ts"],"names":[],"mappings":"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"}
@@ -12,6 +12,7 @@ import { processChart } from "../xlsx/charts";
12
12
  import { processAnchors } from "../xlsx/drawing";
13
13
  import { readAllRecordHeaders } from "./biff-record-reader";
14
14
  import { standardExcelFormatCodeById } from "../xlsx/numfmt";
15
+ import { DATE_1904_OFFSET_DAYS, isEpochShiftedFormat } from "../xlsx/styles";
15
16
  import { extractThemeColors, extractThemeFonts, generateDarkThemeColors, } from "../xlsx/theme";
16
17
  var RT = {
17
18
  BrtCellRk: 0x0002,
@@ -969,8 +970,8 @@ var resolveXf = function (styles, xfIndex) {
969
970
  indent: (_e = xf.indent) !== null && _e !== void 0 ? _e : parent.indent,
970
971
  };
971
972
  };
972
- var toCellData = function (parsed, styles, sharedStrings, enableCellXfsRegistry, enableSharedStrings, cellXfs) {
973
- var _a, _b, _c, _d, _e;
973
+ var toCellData = function (parsed, styles, sharedStrings, enableCellXfsRegistry, enableSharedStrings, cellXfs, use1904) {
974
+ var _a, _b, _c, _d, _e, _f;
974
975
  var xf = resolveXf(styles, parsed.styleRef);
975
976
  var format = {};
976
977
  var pattern = xf
@@ -1060,8 +1061,14 @@ var toCellData = function (parsed, styles, sharedStrings, enableCellXfsRegistry,
1060
1061
  : {})), { ue: ue, ev: { sv: text } }), (parsed.formula ? {} : { fv: text }));
1061
1062
  }
1062
1063
  if (parsed.kind === "n") {
1063
- var value = Number(parsed.value);
1064
- var pattern_1 = (_e = (_d = format.numberFormat) === null || _d === void 0 ? void 0 : _d.pattern) !== null && _e !== void 0 ? _e : "GENERAL";
1064
+ // A 1904-system workbook (`BrtWbProp.fDate1904`) stores date serials
1065
+ // 1462 days below the engine's 1900 system; date-formatted numbers are
1066
+ // converted on the way in, like the XLSX importer does.
1067
+ var value = Number(parsed.value) +
1068
+ (use1904 && isEpochShiftedFormat((_d = format.numberFormat) === null || _d === void 0 ? void 0 : _d.type)
1069
+ ? DATE_1904_OFFSET_DAYS
1070
+ : 0);
1071
+ var pattern_1 = (_f = (_e = format.numberFormat) === null || _e === void 0 ? void 0 : _e.pattern) !== null && _f !== void 0 ? _f : "GENERAL";
1065
1072
  var fv = ssfFormat(pattern_1, value);
1066
1073
  // If there's a formula, use it in ue.fv, otherwise use the numeric value
1067
1074
  var ue = parsed.formula ? { fv: "=".concat(parsed.formula) } : { nv: value };
@@ -2168,7 +2175,7 @@ var XlsbPlugin = /** @class */ (function (_super) {
2168
2175
  row = { values: [] };
2169
2176
  rows.set(parsed.row, row);
2170
2177
  }
2171
- row.values[parsed.col] = toCellData(parsed, this_2.styles, this_2.sharedStrings, enableCellXfsRegistry, enableSharedStrings, this_2.cellXfs);
2178
+ row.values[parsed.col] = toCellData(parsed, this_2.styles, this_2.sharedStrings, enableCellXfsRegistry, enableSharedStrings, this_2.cellXfs, this_2.use1904);
2172
2179
  };
2173
2180
  try {
2174
2181
  for (records_7 = (e_19 = void 0, __values(records)), records_7_1 = records_7.next(); !records_7_1.done; records_7_1 = records_7.next()) {
@@ -0,0 +1,37 @@
1
+ import type { EmbeddedChart, SheetRange } from "@rowsncolumns/spreadsheet";
2
+ import type { StreamingZipParser } from "../../zip-parser-streaming";
3
+ import { type ResolveSheetId, type SheetDimensions } from "./charts";
4
+ /**
5
+ * Excel 2016+ "chartex" charts (`xl/charts/chartEx{N}.xml`, namespace
6
+ * `http://schemas.microsoft.com/office/drawing/2014/chartex`): treemap,
7
+ * sunburst, histogram / pareto, box & whisker, waterfall, funnel. They are
8
+ * anchored through an `mc:AlternateContent` whose `Choice` graphic frame
9
+ * carries `<cx:chart r:id>` instead of `<c:chart>`, and their data lives in
10
+ * `<cx:chartData><cx:data>` dimensions (`strDim type="cat"` for the
11
+ * hierarchy, `numDim type="size"|"val"` for the numbers) referenced by the
12
+ * series through `<cx:dataId>`.
13
+ *
14
+ * The exporter counterpart is `exporter/xlsx/chartex-builder.ts`.
15
+ */
16
+ export declare const CHART_EX_REL_TYPE = "http://schemas.microsoft.com/office/2014/relationships/chartEx";
17
+ export declare const CHART_EX_GRAPHIC_URI = "http://schemas.microsoft.com/office/drawing/2014/chartex";
18
+ /**
19
+ * `<cx:chart r:id>` inside an anchor's `mc:AlternateContent` choice (Excel
20
+ * also writes a plain `xdr:graphicFrame` for some producers — both forms are
21
+ * checked). Returns the `cx:chart` node or undefined for non-chartex anchors.
22
+ */
23
+ export declare function getChartExReferenceFromAnchor(anchor: any): any;
24
+ /**
25
+ * Split a multi-column hierarchy range (Excel lays the treemap hierarchy out
26
+ * as columns, top level first, leaf last) into `parentLabels` (one entry per
27
+ * parent column) and `labels` (the leaf column).
28
+ */
29
+ export declare const splitHierarchyRange: (range: SheetRange) => {
30
+ parentLabels: SheetRange[];
31
+ labels: SheetRange;
32
+ };
33
+ /** Parse a `cx:chartSpace` DOM into an `EmbeddedChart` spec (null when unsupported). */
34
+ export declare function parseChartExSpec(chartSpaceDom: any, sheetId: number, resolveSheetId?: ResolveSheetId): EmbeddedChart["spec"] | null;
35
+ /** Resolve + parse one chartex part referenced from a drawing anchor. */
36
+ export declare function processChartEx(chartTarget: string, drawingPath: string, anchor: any, sheetId: number, zipParser: StreamingZipParser, xmlParser: any, sheetDimensions?: SheetDimensions, resolveSheetId?: ResolveSheetId): Promise<EmbeddedChart | null>;
37
+ //# sourceMappingURL=chartex.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chartex.d.ts","sourceRoot":"","sources":["../../../../../excel-parser/plugins/xlsx/chartex.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEV,aAAa,EACb,UAAU,EACX,MAAM,2BAA2B,CAAC;AAInC,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AACrE,OAAO,EAEL,KAAK,cAAc,EACnB,KAAK,eAAe,EACrB,MAAM,UAAU,CAAC;AAElB;;;;;;;;;;;GAWG;AAEH,eAAO,MAAM,iBAAiB,mEACoC,CAAC;AACnE,eAAO,MAAM,oBAAoB,6DAC2B,CAAC;AAyB7D;;;;GAIG;AACH,wBAAgB,6BAA6B,CAAC,MAAM,EAAE,GAAG,GAAG,GAAG,CAoB9D;AA8BD;;;;GAIG;AACH,eAAO,MAAM,mBAAmB,GAC9B,OAAO,UAAU,KAChB;IAAE,YAAY,EAAE,UAAU,EAAE,CAAC;IAAC,MAAM,EAAE,UAAU,CAAA;CAalD,CAAC;AAWF,wFAAwF;AACxF,wBAAgB,gBAAgB,CAC9B,aAAa,EAAE,GAAG,EAClB,OAAO,EAAE,MAAM,EACf,cAAc,CAAC,EAAE,cAAc,GAC9B,aAAa,CAAC,MAAM,CAAC,GAAG,IAAI,CA0D9B;AAED,yEAAyE;AACzE,wBAAsB,cAAc,CAClC,WAAW,EAAE,MAAM,EACnB,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,GAAG,EACX,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,kBAAkB,EAC7B,SAAS,EAAE,GAAG,EACd,eAAe,CAAC,EAAE,eAAe,EACjC,cAAc,CAAC,EAAE,cAAc,GAC9B,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC,CAsB/B"}