@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.
- package/dist/cjs/excel-parser/interface.d.ts +5 -1
- package/dist/cjs/excel-parser/interface.d.ts.map +1 -1
- package/dist/cjs/excel-parser/plugins/base/index.d.ts +2 -0
- package/dist/cjs/excel-parser/plugins/base/index.d.ts.map +1 -1
- package/dist/cjs/excel-parser/plugins/base/index.js +3 -0
- package/dist/cjs/excel-parser/plugins/xls/index.d.ts +55 -9
- package/dist/cjs/excel-parser/plugins/xls/index.d.ts.map +1 -1
- package/dist/cjs/excel-parser/plugins/xls/index.js +487 -24
- package/dist/cjs/excel-parser/plugins/xlsb/index.d.ts.map +1 -1
- package/dist/cjs/excel-parser/plugins/xlsb/index.js +12 -5
- package/dist/cjs/excel-parser/plugins/xlsx/chartex.d.ts +37 -0
- package/dist/cjs/excel-parser/plugins/xlsx/chartex.d.ts.map +1 -0
- package/dist/cjs/excel-parser/plugins/xlsx/chartex.js +244 -0
- package/dist/cjs/excel-parser/plugins/xlsx/form-controls.d.ts +70 -0
- package/dist/cjs/excel-parser/plugins/xlsx/form-controls.d.ts.map +1 -0
- package/dist/cjs/excel-parser/plugins/xlsx/form-controls.js +295 -0
- package/dist/cjs/excel-parser/plugins/xlsx/index.d.ts +9 -1
- package/dist/cjs/excel-parser/plugins/xlsx/index.d.ts.map +1 -1
- package/dist/cjs/excel-parser/plugins/xlsx/index.js +251 -104
- package/dist/cjs/excel-parser/plugins/xlsx/styles.d.ts +15 -1
- package/dist/cjs/excel-parser/plugins/xlsx/styles.d.ts.map +1 -1
- package/dist/cjs/excel-parser/plugins/xlsx/styles.js +90 -4
- package/dist/cjs/excel-parser/registry.d.ts +7 -0
- package/dist/cjs/excel-parser/registry.d.ts.map +1 -1
- package/dist/cjs/excel-parser/registry.js +28 -1
- package/dist/cjs/excel-parser/types.d.ts +10 -1
- package/dist/cjs/excel-parser/types.d.ts.map +1 -1
- package/dist/cjs/excel-parser/workbook.d.ts +2 -0
- package/dist/cjs/excel-parser/workbook.d.ts.map +1 -1
- package/dist/cjs/excel-parser/workbook.js +20 -14
- package/dist/cjs/excel-parser/worker.js +128 -130
- package/dist/cjs/exporter/xlsx/chart-builder.d.ts.map +1 -1
- package/dist/cjs/exporter/xlsx/chart-builder.js +5 -33
- package/dist/cjs/exporter/xlsx/chartex-builder.d.ts +36 -0
- package/dist/cjs/exporter/xlsx/chartex-builder.d.ts.map +1 -0
- package/dist/cjs/exporter/xlsx/chartex-builder.js +109 -0
- package/dist/cjs/exporter/xlsx/form-controls-builder.d.ts +61 -0
- package/dist/cjs/exporter/xlsx/form-controls-builder.d.ts.map +1 -0
- package/dist/cjs/exporter/xlsx/form-controls-builder.js +197 -0
- package/dist/cjs/exporter/xlsx/xlsx-export.d.ts.map +1 -1
- package/dist/cjs/exporter/xlsx/xlsx-export.js +431 -193
- package/dist/cjs/tsconfig.cjs.tsbuildinfo +1 -1
- package/dist/esm/excel-parser/interface.d.ts +5 -1
- package/dist/esm/excel-parser/interface.d.ts.map +1 -1
- package/dist/esm/excel-parser/plugins/base/index.d.ts +2 -0
- package/dist/esm/excel-parser/plugins/base/index.d.ts.map +1 -1
- package/dist/esm/excel-parser/plugins/base/index.js +3 -0
- package/dist/esm/excel-parser/plugins/xls/index.d.ts +55 -9
- package/dist/esm/excel-parser/plugins/xls/index.d.ts.map +1 -1
- package/dist/esm/excel-parser/plugins/xls/index.js +429 -23
- package/dist/esm/excel-parser/plugins/xlsb/index.d.ts.map +1 -1
- package/dist/esm/excel-parser/plugins/xlsb/index.js +10 -3
- package/dist/esm/excel-parser/plugins/xlsx/chartex.d.ts +37 -0
- package/dist/esm/excel-parser/plugins/xlsx/chartex.d.ts.map +1 -0
- package/dist/esm/excel-parser/plugins/xlsx/chartex.js +199 -0
- package/dist/esm/excel-parser/plugins/xlsx/form-controls.d.ts +70 -0
- package/dist/esm/excel-parser/plugins/xlsx/form-controls.d.ts.map +1 -0
- package/dist/esm/excel-parser/plugins/xlsx/form-controls.js +246 -0
- package/dist/esm/excel-parser/plugins/xlsx/index.d.ts +9 -1
- package/dist/esm/excel-parser/plugins/xlsx/index.d.ts.map +1 -1
- package/dist/esm/excel-parser/plugins/xlsx/index.js +92 -6
- package/dist/esm/excel-parser/plugins/xlsx/styles.d.ts +15 -1
- package/dist/esm/excel-parser/plugins/xlsx/styles.d.ts.map +1 -1
- package/dist/esm/excel-parser/plugins/xlsx/styles.js +80 -0
- package/dist/esm/excel-parser/registry.d.ts +7 -0
- package/dist/esm/excel-parser/registry.d.ts.map +1 -1
- package/dist/esm/excel-parser/registry.js +18 -1
- package/dist/esm/excel-parser/types.d.ts +10 -1
- package/dist/esm/excel-parser/types.d.ts.map +1 -1
- package/dist/esm/excel-parser/workbook.d.ts +2 -0
- package/dist/esm/excel-parser/workbook.d.ts.map +1 -1
- package/dist/esm/excel-parser/workbook.js +16 -10
- package/dist/esm/excel-parser/worker.js +10 -18
- package/dist/esm/exporter/xlsx/chart-builder.d.ts.map +1 -1
- package/dist/esm/exporter/xlsx/chart-builder.js +0 -28
- package/dist/esm/exporter/xlsx/chartex-builder.d.ts +36 -0
- package/dist/esm/exporter/xlsx/chartex-builder.d.ts.map +1 -0
- package/dist/esm/exporter/xlsx/chartex-builder.js +97 -0
- package/dist/esm/exporter/xlsx/form-controls-builder.d.ts +61 -0
- package/dist/esm/exporter/xlsx/form-controls-builder.d.ts.map +1 -0
- package/dist/esm/exporter/xlsx/form-controls-builder.js +173 -0
- package/dist/esm/exporter/xlsx/xlsx-export.d.ts.map +1 -1
- package/dist/esm/exporter/xlsx/xlsx-export.js +228 -19
- package/dist/esm/tsconfig.esm.tsbuildinfo +1 -1
- package/package.json +3 -3
- 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 {
|
|
4
|
-
|
|
5
|
-
var
|
|
6
|
-
var
|
|
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
|
-
*
|
|
31
|
-
*
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
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
|
-
|
|
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,
|
|
135
|
+
XlsPlugin.prototype.load = function (buffer, _password) {
|
|
43
136
|
return __awaiter(this, void 0, void 0, function () {
|
|
44
|
-
var header, kind;
|
|
45
|
-
|
|
46
|
-
|
|
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 =
|
|
143
|
+
header = _g.sent();
|
|
50
144
|
if (startsWith(header, ZIP_SIGNATURE)) {
|
|
51
|
-
|
|
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 =
|
|
154
|
+
kind = _g.sent();
|
|
57
155
|
if (kind === "encrypted-ooxml") {
|
|
58
156
|
throw new Error("PASSWORD_REQUIRED");
|
|
59
157
|
}
|
|
60
|
-
|
|
61
|
-
|
|
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
|
-
}(
|
|
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":"AAAA,OAAO,KAAK,EACV,KAAK,EAEL,2BAA2B,EAE5B,MAAM,4BAA4B,CAAC;AACpC,OAAO,KAAK,EACV,WAAW,EAGX,qBAAqB,EACrB,wBAAwB,EAExB,aAAa,EACb,UAAU,EACV,KAAK,EACL,gBAAgB,EAChB,SAAS,EACV,MAAM,2BAA2B,CAAC;AAenC,OAAO,KAAK,EACV,0BAA0B,EAC1B,sBAAsB,EACvB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;
|
|
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
|
-
|
|
1064
|
-
|
|
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"}
|