@rowsncolumns/toolkit 24.4.2 → 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/cfb-decryptor.d.ts +6 -0
- package/dist/cjs/excel-parser/cfb-decryptor.d.ts.map +1 -1
- package/dist/cjs/excel-parser/cfb-decryptor.js +6 -0
- package/dist/cjs/excel-parser/helpers.d.ts +9 -1
- package/dist/cjs/excel-parser/helpers.d.ts.map +1 -1
- package/dist/cjs/excel-parser/helpers.js +37 -0
- package/dist/cjs/excel-parser/interface.d.ts +15 -2
- 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/ods/index.d.ts +19 -0
- package/dist/cjs/excel-parser/plugins/ods/index.d.ts.map +1 -1
- package/dist/cjs/excel-parser/plugins/ods/index.js +676 -304
- package/dist/cjs/excel-parser/plugins/ods/styles.d.ts +43 -1
- package/dist/cjs/excel-parser/plugins/ods/styles.d.ts.map +1 -1
- package/dist/cjs/excel-parser/plugins/ods/styles.js +343 -45
- package/dist/cjs/excel-parser/plugins/xls/index.d.ts +55 -1
- package/dist/cjs/excel-parser/plugins/xls/index.d.ts.map +1 -1
- package/dist/cjs/excel-parser/plugins/xls/index.js +518 -6
- package/dist/cjs/excel-parser/plugins/xlsb/index.d.ts +4 -0
- package/dist/cjs/excel-parser/plugins/xlsb/index.d.ts.map +1 -1
- package/dist/cjs/excel-parser/plugins/xlsb/index.js +33 -14
- 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/charts.d.ts +10 -0
- package/dist/cjs/excel-parser/plugins/xlsx/charts.d.ts.map +1 -1
- package/dist/cjs/excel-parser/plugins/xlsx/charts.js +68 -9
- package/dist/cjs/excel-parser/plugins/xlsx/drawing.d.ts +28 -1
- package/dist/cjs/excel-parser/plugins/xlsx/drawing.d.ts.map +1 -1
- package/dist/cjs/excel-parser/plugins/xlsx/drawing.js +155 -20
- 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 +35 -2
- package/dist/cjs/excel-parser/plugins/xlsx/index.d.ts.map +1 -1
- package/dist/cjs/excel-parser/plugins/xlsx/index.js +737 -257
- package/dist/cjs/excel-parser/plugins/xlsx/pivots.d.ts.map +1 -1
- package/dist/cjs/excel-parser/plugins/xlsx/pivots.js +125 -37
- package/dist/cjs/excel-parser/plugins/xlsx/sheet-views.d.ts +3 -0
- package/dist/cjs/excel-parser/plugins/xlsx/sheet-views.d.ts.map +1 -1
- package/dist/cjs/excel-parser/plugins/xlsx/sheet-views.js +4 -1
- 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 +102 -6
- 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 +29 -0
- package/dist/cjs/excel-parser/types.d.ts +17 -2
- package/dist/cjs/excel-parser/types.d.ts.map +1 -1
- package/dist/cjs/excel-parser/workbook.d.ts +3 -0
- package/dist/cjs/excel-parser/workbook.d.ts.map +1 -1
- package/dist/cjs/excel-parser/workbook.js +24 -14
- package/dist/cjs/excel-parser/worker.js +131 -131
- package/dist/cjs/exporter/ods/ods-export.d.ts.map +1 -1
- package/dist/cjs/exporter/ods/ods-export.js +432 -175
- package/dist/cjs/exporter/xlsx/chart-builder.d.ts.map +1 -1
- package/dist/cjs/exporter/xlsx/chart-builder.js +215 -39
- 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/pivot-builder.d.ts +8 -0
- package/dist/cjs/exporter/xlsx/pivot-builder.d.ts.map +1 -1
- package/dist/cjs/exporter/xlsx/pivot-builder.js +141 -42
- package/dist/cjs/exporter/xlsx/style-builder.js +9 -3
- package/dist/cjs/exporter/xlsx/threaded-comments-builder.d.ts +7 -1
- package/dist/cjs/exporter/xlsx/threaded-comments-builder.d.ts.map +1 -1
- package/dist/cjs/exporter/xlsx/threaded-comments-builder.js +15 -3
- package/dist/cjs/exporter/xlsx/xlsx-export.d.ts +11 -2
- package/dist/cjs/exporter/xlsx/xlsx-export.d.ts.map +1 -1
- package/dist/cjs/exporter/xlsx/xlsx-export.js +991 -297
- package/dist/cjs/helpers/implicit-intersection.d.ts +16 -0
- package/dist/cjs/helpers/implicit-intersection.d.ts.map +1 -0
- package/dist/cjs/helpers/implicit-intersection.js +197 -0
- package/dist/cjs/print-settings.d.ts +105 -0
- package/dist/cjs/print-settings.d.ts.map +1 -0
- package/dist/cjs/print-settings.js +494 -0
- package/dist/cjs/tsconfig.cjs.tsbuildinfo +1 -1
- package/dist/esm/excel-parser/cfb-decryptor.d.ts +6 -0
- package/dist/esm/excel-parser/cfb-decryptor.d.ts.map +1 -1
- package/dist/esm/excel-parser/cfb-decryptor.js +6 -0
- package/dist/esm/excel-parser/helpers.d.ts +9 -1
- package/dist/esm/excel-parser/helpers.d.ts.map +1 -1
- package/dist/esm/excel-parser/helpers.js +34 -0
- package/dist/esm/excel-parser/interface.d.ts +15 -2
- 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/ods/index.d.ts +19 -0
- package/dist/esm/excel-parser/plugins/ods/index.d.ts.map +1 -1
- package/dist/esm/excel-parser/plugins/ods/index.js +347 -33
- package/dist/esm/excel-parser/plugins/ods/styles.d.ts +43 -1
- package/dist/esm/excel-parser/plugins/ods/styles.d.ts.map +1 -1
- package/dist/esm/excel-parser/plugins/ods/styles.js +276 -2
- package/dist/esm/excel-parser/plugins/xls/index.d.ts +55 -1
- package/dist/esm/excel-parser/plugins/xls/index.d.ts.map +1 -1
- package/dist/esm/excel-parser/plugins/xls/index.js +441 -3
- package/dist/esm/excel-parser/plugins/xlsb/index.d.ts +4 -0
- package/dist/esm/excel-parser/plugins/xlsb/index.d.ts.map +1 -1
- package/dist/esm/excel-parser/plugins/xlsb/index.js +30 -9
- 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/charts.d.ts +10 -0
- package/dist/esm/excel-parser/plugins/xlsx/charts.d.ts.map +1 -1
- package/dist/esm/excel-parser/plugins/xlsx/charts.js +69 -6
- package/dist/esm/excel-parser/plugins/xlsx/drawing.d.ts +28 -1
- package/dist/esm/excel-parser/plugins/xlsx/drawing.d.ts.map +1 -1
- package/dist/esm/excel-parser/plugins/xlsx/drawing.js +99 -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 +35 -2
- package/dist/esm/excel-parser/plugins/xlsx/index.d.ts.map +1 -1
- package/dist/esm/excel-parser/plugins/xlsx/index.js +454 -32
- package/dist/esm/excel-parser/plugins/xlsx/pivots.d.ts.map +1 -1
- package/dist/esm/excel-parser/plugins/xlsx/pivots.js +86 -6
- package/dist/esm/excel-parser/plugins/xlsx/sheet-views.d.ts +3 -0
- package/dist/esm/excel-parser/plugins/xlsx/sheet-views.d.ts.map +1 -1
- package/dist/esm/excel-parser/plugins/xlsx/sheet-views.js +2 -0
- 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 +92 -2
- 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 +19 -0
- package/dist/esm/excel-parser/types.d.ts +17 -2
- package/dist/esm/excel-parser/types.d.ts.map +1 -1
- package/dist/esm/excel-parser/workbook.d.ts +3 -0
- package/dist/esm/excel-parser/workbook.d.ts.map +1 -1
- package/dist/esm/excel-parser/workbook.js +19 -10
- package/dist/esm/excel-parser/worker.js +12 -18
- package/dist/esm/exporter/ods/ods-export.d.ts.map +1 -1
- package/dist/esm/exporter/ods/ods-export.js +306 -35
- package/dist/esm/exporter/xlsx/chart-builder.d.ts.map +1 -1
- package/dist/esm/exporter/xlsx/chart-builder.js +161 -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/pivot-builder.d.ts +8 -0
- package/dist/esm/exporter/xlsx/pivot-builder.d.ts.map +1 -1
- package/dist/esm/exporter/xlsx/pivot-builder.js +104 -19
- package/dist/esm/exporter/xlsx/style-builder.js +9 -3
- package/dist/esm/exporter/xlsx/threaded-comments-builder.d.ts +7 -1
- package/dist/esm/exporter/xlsx/threaded-comments-builder.d.ts.map +1 -1
- package/dist/esm/exporter/xlsx/threaded-comments-builder.js +15 -3
- package/dist/esm/exporter/xlsx/xlsx-export.d.ts +11 -2
- package/dist/esm/exporter/xlsx/xlsx-export.d.ts.map +1 -1
- package/dist/esm/exporter/xlsx/xlsx-export.js +675 -64
- package/dist/esm/helpers/implicit-intersection.d.ts +16 -0
- package/dist/esm/helpers/implicit-intersection.d.ts.map +1 -0
- package/dist/esm/helpers/implicit-intersection.js +184 -0
- package/dist/esm/print-settings.d.ts +105 -0
- package/dist/esm/print-settings.d.ts.map +1 -0
- package/dist/esm/print-settings.js +422 -0
- package/dist/esm/tsconfig.esm.tsbuildinfo +1 -1
- package/package.json +3 -3
- package/xlsx.d.ts +14 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"drawing.d.ts","sourceRoot":"","sources":["../../../../../excel-parser/plugins/xlsx/drawing.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAGV,cAAc,EAEd,cAAc,
|
|
1
|
+
{"version":3,"file":"drawing.d.ts","sourceRoot":"","sources":["../../../../../excel-parser/plugins/xlsx/drawing.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAGV,cAAc,EAEd,cAAc,EACd,cAAc,EAYf,MAAM,2BAA2B,CAAC;AAEnC,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAGjD,OAAO,EAAE,KAAK,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAoDrE,MAAM,MAAM,0BAA0B,GAAG,cAAc,GAAG;IACxD,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB,CAAC;AAEF,4EAA4E;AAC5E,QAAA,MAAM,sBAAsB;;;;CAIlB,CAAC;AAEX,KAAK,iBAAiB,GAAG,MAAM,OAAO,sBAAsB,CAAC;AAK7D;;;;;;;GAOG;AACH,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,GAAG,EACZ,UAAU,EAAE,MAAM,GACjB,KAAK,CAAC;IACP,IAAI,EAAE,CAAC,OAAO,sBAAsB,CAAC,CAAC,iBAAiB,CAAC,CAAC;IACzD,IAAI,EAAE,GAAG,CAAC;CACX,CAAC,CAkCD;AAED;;;;;;;;;GASG;AACH,wBAAsB,cAAc,CAClC,OAAO,EAAE,GAAG,EACZ,UAAU,EAAE,MAAM,EAClB,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,kBAAkB,EAC7B,SAAS,EAAE,SAAS,GACnB,OAAO,CAAC,0BAA0B,EAAE,CAAC,CA8dvC;AASD;;;;;GAKG;AACH,wBAAgB,uBAAuB,CACrC,OAAO,EAAE,GAAG,GACX,IAAI,CAAC,cAAc,EAAE,MAAM,GAAG,YAAY,GAAG,UAAU,GAAG,cAAc,CAAC,CAuC3E;AA6OD;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,GAAG,GAAG,OAAO,CASlD;AAED,wEAAwE;AACxE,wBAAgB,cAAc,CAAC,KAAK,EAAE,GAAG,GAAG,cAAc,CA8CzD;AA8MD;;;;;;;;;GASG;AACH,wBAAgB,4BAA4B,CAC1C,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,MAAM,EAClB,eAAe,EAAE,MAAM,EACvB,EAAE,EAAE,MAAM,EACV,EAAE,EAAE,MAAM,GACT,OAAO,CAqBT"}
|
|
@@ -42,6 +42,95 @@ var CELL_IMAGE_OFFSET_THRESHOLD_PX = 1;
|
|
|
42
42
|
function emuToPixels(emuValue) {
|
|
43
43
|
return Math.round(emuValue / EMU_PER_PIXEL);
|
|
44
44
|
}
|
|
45
|
+
/** `processAnchors` anchor-type tags, keyed by the drawing element name. */
|
|
46
|
+
var ANCHOR_KIND_BY_ELEMENT = {
|
|
47
|
+
oneCellAnchor: "oneCellAnchor",
|
|
48
|
+
twoCellAnchor: "twoCellAnchors",
|
|
49
|
+
absoluteAnchor: "absoluteAnchors",
|
|
50
|
+
};
|
|
51
|
+
var ANCHOR_ELEMENT_REGEX = /<(?:[A-Za-z_][\w.-]*:)?(oneCellAnchor|twoCellAnchor|absoluteAnchor)(?=[\s/>])/g;
|
|
52
|
+
/**
|
|
53
|
+
* The `<xdr:wsDr>` anchors in document order — Excel's z-order (first is
|
|
54
|
+
* the back-most object). The unordered parse keeps document order within one
|
|
55
|
+
* element name but groups the three anchor kinds apart, so the kind sequence
|
|
56
|
+
* is read off the raw part and the parsed nodes are dealt out in that order.
|
|
57
|
+
* Anchors the scan does not account for (namespace quirks) trail in their
|
|
58
|
+
* parsed order, so nothing is ever dropped.
|
|
59
|
+
*/
|
|
60
|
+
export function anchorsInDocumentOrder(drawing, drawingXml) {
|
|
61
|
+
var e_1, _a, e_2, _b, e_3, _c, e_4, _d;
|
|
62
|
+
var nodesByElement = {
|
|
63
|
+
oneCellAnchor: [],
|
|
64
|
+
twoCellAnchor: [],
|
|
65
|
+
absoluteAnchor: [],
|
|
66
|
+
};
|
|
67
|
+
try {
|
|
68
|
+
for (var _e = __values(Object.keys(nodesByElement)), _f = _e.next(); !_f.done; _f = _e.next()) {
|
|
69
|
+
var element = _f.value;
|
|
70
|
+
var parsed = get(drawing, "xdr:wsDr.xdr:".concat(element)) || get(drawing, "wsDr.".concat(element));
|
|
71
|
+
if (!parsed)
|
|
72
|
+
continue;
|
|
73
|
+
nodesByElement[element] = Array.isArray(parsed) ? parsed : [parsed];
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
catch (e_1_1) { e_1 = { error: e_1_1 }; }
|
|
77
|
+
finally {
|
|
78
|
+
try {
|
|
79
|
+
if (_f && !_f.done && (_a = _e.return)) _a.call(_e);
|
|
80
|
+
}
|
|
81
|
+
finally { if (e_1) throw e_1.error; }
|
|
82
|
+
}
|
|
83
|
+
var cursor = {
|
|
84
|
+
oneCellAnchor: 0,
|
|
85
|
+
twoCellAnchor: 0,
|
|
86
|
+
absoluteAnchor: 0,
|
|
87
|
+
};
|
|
88
|
+
var ordered = [];
|
|
89
|
+
try {
|
|
90
|
+
for (var _g = __values(drawingXml.matchAll(ANCHOR_ELEMENT_REGEX)), _h = _g.next(); !_h.done; _h = _g.next()) {
|
|
91
|
+
var match = _h.value;
|
|
92
|
+
var element = match[1];
|
|
93
|
+
var node = nodesByElement[element][cursor[element]];
|
|
94
|
+
if (node === undefined)
|
|
95
|
+
continue;
|
|
96
|
+
cursor[element] += 1;
|
|
97
|
+
ordered.push({ kind: ANCHOR_KIND_BY_ELEMENT[element], node: node });
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
catch (e_2_1) { e_2 = { error: e_2_1 }; }
|
|
101
|
+
finally {
|
|
102
|
+
try {
|
|
103
|
+
if (_h && !_h.done && (_b = _g.return)) _b.call(_g);
|
|
104
|
+
}
|
|
105
|
+
finally { if (e_2) throw e_2.error; }
|
|
106
|
+
}
|
|
107
|
+
try {
|
|
108
|
+
for (var _j = __values(Object.keys(nodesByElement)), _k = _j.next(); !_k.done; _k = _j.next()) {
|
|
109
|
+
var element = _k.value;
|
|
110
|
+
try {
|
|
111
|
+
for (var _l = (e_4 = void 0, __values(nodesByElement[element].slice(cursor[element]))), _m = _l.next(); !_m.done; _m = _l.next()) {
|
|
112
|
+
var node = _m.value;
|
|
113
|
+
ordered.push({ kind: ANCHOR_KIND_BY_ELEMENT[element], node: node });
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
catch (e_4_1) { e_4 = { error: e_4_1 }; }
|
|
117
|
+
finally {
|
|
118
|
+
try {
|
|
119
|
+
if (_m && !_m.done && (_d = _l.return)) _d.call(_l);
|
|
120
|
+
}
|
|
121
|
+
finally { if (e_4) throw e_4.error; }
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
catch (e_3_1) { e_3 = { error: e_3_1 }; }
|
|
126
|
+
finally {
|
|
127
|
+
try {
|
|
128
|
+
if (_k && !_k.done && (_c = _j.return)) _c.call(_j);
|
|
129
|
+
}
|
|
130
|
+
finally { if (e_3) throw e_3.error; }
|
|
131
|
+
}
|
|
132
|
+
return ordered;
|
|
133
|
+
}
|
|
45
134
|
/**
|
|
46
135
|
* Process different types of image anchors
|
|
47
136
|
* @param anchors The anchor elements from the drawing
|
|
@@ -54,8 +143,8 @@ function emuToPixels(emuValue) {
|
|
|
54
143
|
*/
|
|
55
144
|
export function processAnchors(anchors, anchorType, drawingPath, sheetId, zipParser, xmlParser) {
|
|
56
145
|
return __awaiter(this, void 0, void 0, function () {
|
|
57
|
-
var images, anchorArray, _loop_1, anchorArray_1, anchorArray_1_1, anchor,
|
|
58
|
-
var
|
|
146
|
+
var images, anchorArray, _loop_1, anchorArray_1, anchorArray_1_1, anchor, e_5_1;
|
|
147
|
+
var e_5, _a;
|
|
59
148
|
var _b;
|
|
60
149
|
return __generator(this, function (_c) {
|
|
61
150
|
switch (_c.label) {
|
|
@@ -368,12 +457,7 @@ export function processAnchors(anchors, anchorType, drawingPath, sheetId, zipPar
|
|
|
368
457
|
images.push({
|
|
369
458
|
isInsideCell: isInsideCell,
|
|
370
459
|
embedId: uuid(),
|
|
371
|
-
spec: {
|
|
372
|
-
id: imageId,
|
|
373
|
-
imageUrl: createDataUrl(imageData, imageType),
|
|
374
|
-
type: "image",
|
|
375
|
-
description: imageName,
|
|
376
|
-
},
|
|
460
|
+
spec: __assign({ id: imageId, imageUrl: createDataUrl(imageData, imageType), type: "image", description: imageName }, parsePictureAdjustments(picture)),
|
|
377
461
|
position: position,
|
|
378
462
|
draggable: true,
|
|
379
463
|
lockAspectRatio: true,
|
|
@@ -399,20 +483,71 @@ export function processAnchors(anchors, anchorType, drawingPath, sheetId, zipPar
|
|
|
399
483
|
return [3 /*break*/, 2];
|
|
400
484
|
case 5: return [3 /*break*/, 8];
|
|
401
485
|
case 6:
|
|
402
|
-
|
|
403
|
-
|
|
486
|
+
e_5_1 = _c.sent();
|
|
487
|
+
e_5 = { error: e_5_1 };
|
|
404
488
|
return [3 /*break*/, 8];
|
|
405
489
|
case 7:
|
|
406
490
|
try {
|
|
407
491
|
if (anchorArray_1_1 && !anchorArray_1_1.done && (_a = anchorArray_1.return)) _a.call(anchorArray_1);
|
|
408
492
|
}
|
|
409
|
-
finally { if (
|
|
493
|
+
finally { if (e_5) throw e_5.error; }
|
|
410
494
|
return [7 /*endfinally*/];
|
|
411
495
|
case 8: return [2 /*return*/, images];
|
|
412
496
|
}
|
|
413
497
|
});
|
|
414
498
|
});
|
|
415
499
|
}
|
|
500
|
+
/** DrawingML per-mille-percent (100000 = 100%) → fraction, or undefined. */
|
|
501
|
+
var pctToFraction = function (value) {
|
|
502
|
+
if (value === undefined || value === null || value === "")
|
|
503
|
+
return undefined;
|
|
504
|
+
var n = Number(value);
|
|
505
|
+
return Number.isFinite(n) ? n / 100000 : undefined;
|
|
506
|
+
};
|
|
507
|
+
/**
|
|
508
|
+
* Picture-format adjustments off an `<xdr:pic>`: `<a:blipFill><a:srcRect>`
|
|
509
|
+
* (crop), `<a:blip><a:lum bright contrast>` (brightness / contrast) and
|
|
510
|
+
* `<a:blip><a:alphaModFix amt>` (opacity → `transparency`). Only present
|
|
511
|
+
* values are returned so an untouched picture stays a bare image spec.
|
|
512
|
+
*/
|
|
513
|
+
export function parsePictureAdjustments(picture) {
|
|
514
|
+
var _a, _b, _c, _d, _e, _f;
|
|
515
|
+
var blipFill = (_b = (_a = get(picture, "xdr:blipFill")) !== null && _a !== void 0 ? _a : get(picture, "blipFill")) !== null && _b !== void 0 ? _b : undefined;
|
|
516
|
+
var blip = (_c = get(blipFill, "a:blip")) !== null && _c !== void 0 ? _c : get(blipFill, "blip");
|
|
517
|
+
var out = {};
|
|
518
|
+
var srcRect = (_d = get(blipFill, "a:srcRect.a$")) !== null && _d !== void 0 ? _d : get(blipFill, "srcRect.a$");
|
|
519
|
+
if (srcRect) {
|
|
520
|
+
var crop = {};
|
|
521
|
+
var left = pctToFraction(srcRect.l);
|
|
522
|
+
var top_1 = pctToFraction(srcRect.t);
|
|
523
|
+
var right = pctToFraction(srcRect.r);
|
|
524
|
+
var bottom = pctToFraction(srcRect.b);
|
|
525
|
+
if (left)
|
|
526
|
+
crop.left = left;
|
|
527
|
+
if (top_1)
|
|
528
|
+
crop.top = top_1;
|
|
529
|
+
if (right)
|
|
530
|
+
crop.right = right;
|
|
531
|
+
if (bottom)
|
|
532
|
+
crop.bottom = bottom;
|
|
533
|
+
if (Object.keys(crop).length)
|
|
534
|
+
out.crop = crop;
|
|
535
|
+
}
|
|
536
|
+
var lum = (_e = get(blip, "a:lum.a$")) !== null && _e !== void 0 ? _e : get(blip, "lum.a$");
|
|
537
|
+
if (lum) {
|
|
538
|
+
var brightness = pctToFraction(lum.bright);
|
|
539
|
+
var contrast = pctToFraction(lum.contrast);
|
|
540
|
+
if (brightness)
|
|
541
|
+
out.brightness = brightness;
|
|
542
|
+
if (contrast)
|
|
543
|
+
out.contrast = contrast;
|
|
544
|
+
}
|
|
545
|
+
var alpha = pctToFraction((_f = get(blip, "a:alphaModFix.a$.amt")) !== null && _f !== void 0 ? _f : get(blip, "alphaModFix.a$.amt"));
|
|
546
|
+
if (alpha !== undefined && alpha < 1) {
|
|
547
|
+
out.transparency = Math.round((1 - alpha) * 100000) / 100000;
|
|
548
|
+
}
|
|
549
|
+
return out;
|
|
550
|
+
}
|
|
416
551
|
/**
|
|
417
552
|
* Parse color from DrawingML color element
|
|
418
553
|
* Supports both RGB (srgbClr) and theme colors (schemeClr)
|
|
@@ -521,7 +656,7 @@ function parseColorOpacity(colorElement) {
|
|
|
521
656
|
}
|
|
522
657
|
/** `<a:prstGeom>` → geometry preset + `<a:avLst>` adjust guides. */
|
|
523
658
|
function parseShapeGeometry(spPr) {
|
|
524
|
-
var
|
|
659
|
+
var e_6, _a;
|
|
525
660
|
var _b;
|
|
526
661
|
var prstGeom = get(spPr, "a:prstGeom");
|
|
527
662
|
var prst = get(prstGeom, "a$.prst");
|
|
@@ -539,12 +674,12 @@ function parseShapeGeometry(spPr) {
|
|
|
539
674
|
}
|
|
540
675
|
}
|
|
541
676
|
}
|
|
542
|
-
catch (
|
|
677
|
+
catch (e_6_1) { e_6 = { error: e_6_1 }; }
|
|
543
678
|
finally {
|
|
544
679
|
try {
|
|
545
680
|
if (_d && !_d.done && (_a = _c.return)) _a.call(_c);
|
|
546
681
|
}
|
|
547
|
-
finally { if (
|
|
682
|
+
finally { if (e_6) throw e_6.error; }
|
|
548
683
|
}
|
|
549
684
|
return { preset: (_b = PRESET_RENAMES[prst]) !== null && _b !== void 0 ? _b : prst, adjustments: adjustments };
|
|
550
685
|
}
|
|
@@ -731,7 +866,7 @@ export function parseShapeSpec(shape) {
|
|
|
731
866
|
* @returns EmbedTextBoxSpec object
|
|
732
867
|
*/
|
|
733
868
|
function parseTextBoxContent(txBody, shape) {
|
|
734
|
-
var
|
|
869
|
+
var e_7, _a, e_8, _b;
|
|
735
870
|
var richText = [];
|
|
736
871
|
var plainText = "";
|
|
737
872
|
// Get paragraphs
|
|
@@ -766,7 +901,7 @@ function parseTextBoxContent(txBody, shape) {
|
|
|
766
901
|
// Add indentation and bullet to the first run of the paragraph
|
|
767
902
|
var isFirstRun = true;
|
|
768
903
|
try {
|
|
769
|
-
for (var runArray_1 = (
|
|
904
|
+
for (var runArray_1 = (e_8 = void 0, __values(runArray)), runArray_1_1 = runArray_1.next(); !runArray_1_1.done; runArray_1_1 = runArray_1.next()) {
|
|
770
905
|
var run = runArray_1_1.value;
|
|
771
906
|
var text = get(run, "a:t.t$") || get(run, "a:t") || "";
|
|
772
907
|
// Handle tab characters
|
|
@@ -832,12 +967,12 @@ function parseTextBoxContent(txBody, shape) {
|
|
|
832
967
|
});
|
|
833
968
|
}
|
|
834
969
|
}
|
|
835
|
-
catch (
|
|
970
|
+
catch (e_8_1) { e_8 = { error: e_8_1 }; }
|
|
836
971
|
finally {
|
|
837
972
|
try {
|
|
838
973
|
if (runArray_1_1 && !runArray_1_1.done && (_b = runArray_1.return)) _b.call(runArray_1);
|
|
839
974
|
}
|
|
840
|
-
finally { if (
|
|
975
|
+
finally { if (e_8) throw e_8.error; }
|
|
841
976
|
}
|
|
842
977
|
// Add paragraph break (newline) between paragraphs
|
|
843
978
|
if (paragraphArray.indexOf(paragraph) < paragraphArray.length - 1) {
|
|
@@ -846,12 +981,12 @@ function parseTextBoxContent(txBody, shape) {
|
|
|
846
981
|
}
|
|
847
982
|
}
|
|
848
983
|
}
|
|
849
|
-
catch (
|
|
984
|
+
catch (e_7_1) { e_7 = { error: e_7_1 }; }
|
|
850
985
|
finally {
|
|
851
986
|
try {
|
|
852
987
|
if (paragraphArray_1_1 && !paragraphArray_1_1.done && (_a = paragraphArray_1.return)) _a.call(paragraphArray_1);
|
|
853
988
|
}
|
|
854
|
-
finally { if (
|
|
989
|
+
finally { if (e_7) throw e_7.error; }
|
|
855
990
|
}
|
|
856
991
|
// Get shape properties for background, borders, etc.
|
|
857
992
|
var spPr = get(shape, "xdr:spPr") || get(shape, "spPr");
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import type { EmbeddedObject } from "@rowsncolumns/spreadsheet";
|
|
2
|
+
export declare const CTRL_PROP_REL_TYPE = "http://schemas.openxmlformats.org/officeDocument/2006/relationships/ctrlProp";
|
|
3
|
+
export declare const VML_DRAWING_REL_TYPE = "http://schemas.openxmlformats.org/officeDocument/2006/relationships/vmlDrawing";
|
|
4
|
+
type CellAnchor = {
|
|
5
|
+
col: number;
|
|
6
|
+
colOff: number;
|
|
7
|
+
row: number;
|
|
8
|
+
rowOff: number;
|
|
9
|
+
};
|
|
10
|
+
/**
|
|
11
|
+
* `<controlPr><anchor><from>…</from><to>…</to></anchor>` → the engine's
|
|
12
|
+
* pixel overlay position (1-based anchor cell, EMU offsets → px, size from
|
|
13
|
+
* the cell span at the grid defaults — the same approximation the drawing
|
|
14
|
+
* importer uses for `twoCellAnchor`s).
|
|
15
|
+
*/
|
|
16
|
+
export declare const controlAnchorToOverlayPosition: (from: CellAnchor, to: CellAnchor | undefined) => {
|
|
17
|
+
anchorCell: {
|
|
18
|
+
rowIndex: number;
|
|
19
|
+
columnIndex: number;
|
|
20
|
+
};
|
|
21
|
+
offsetXPixels?: number;
|
|
22
|
+
offsetYPixels?: number;
|
|
23
|
+
widthPixels?: number;
|
|
24
|
+
heightPixels?: number;
|
|
25
|
+
};
|
|
26
|
+
/**
|
|
27
|
+
* Parse an `xl/ctrlProps/ctrlPropN.xml` part: `objectType`, every other
|
|
28
|
+
* `formControlPr` attribute verbatim, and the literal `itemLst` items.
|
|
29
|
+
*/
|
|
30
|
+
export declare const parseFormControlPr: (ctrlPropDom: any) => {
|
|
31
|
+
objectType: string;
|
|
32
|
+
properties: Record<string, string>;
|
|
33
|
+
listItems?: string[];
|
|
34
|
+
} | undefined;
|
|
35
|
+
/**
|
|
36
|
+
* Captions live only in the legacy VML part: `<v:shape id="_x0000_s1025">
|
|
37
|
+
* … <v:textbox><div>Check Box 1</div></v:textbox>`. Returns shapeId → text.
|
|
38
|
+
* VML is scanned textually — Excel's VML is not reliably well-formed XML.
|
|
39
|
+
*/
|
|
40
|
+
export declare const parseVmlControlCaptions: (vml: string | undefined) => Map<number, string>;
|
|
41
|
+
export type RawWorksheetControl = {
|
|
42
|
+
shapeId?: number;
|
|
43
|
+
name?: string;
|
|
44
|
+
relId?: string;
|
|
45
|
+
controlProperties: Record<string, string>;
|
|
46
|
+
moveWithCells?: boolean;
|
|
47
|
+
sizeWithCells?: boolean;
|
|
48
|
+
from?: CellAnchor;
|
|
49
|
+
to?: CellAnchor;
|
|
50
|
+
};
|
|
51
|
+
/**
|
|
52
|
+
* `<controls>` from a worksheet DOM, whether wrapped in
|
|
53
|
+
* `<mc:AlternateContent><mc:Choice Requires="x14">` (Excel) or bare.
|
|
54
|
+
*/
|
|
55
|
+
export declare const readWorksheetControls: (sheetDom: any) => RawWorksheetControl[];
|
|
56
|
+
/**
|
|
57
|
+
* Assemble the sheet's form controls. `loadCtrlProp` resolves a control's
|
|
58
|
+
* `r:id` to its parsed `ctrlProp` DOM (undefined when the part is missing —
|
|
59
|
+
* the control is then skipped, Excel would repair it the same way).
|
|
60
|
+
*/
|
|
61
|
+
export declare const buildFormControlEmbeds: ({ controls, sheetId, ctrlProps, captions, }: {
|
|
62
|
+
controls: RawWorksheetControl[];
|
|
63
|
+
sheetId: number;
|
|
64
|
+
ctrlProps: Map<string, ReturnType<typeof parseFormControlPr>>;
|
|
65
|
+
captions: Map<number, string>;
|
|
66
|
+
}) => EmbeddedObject[];
|
|
67
|
+
/** The `r:id` of a worksheet's `<legacyDrawing>` (VML part), if any. */
|
|
68
|
+
export declare const readLegacyDrawingRelId: (sheetDom: any) => string | undefined;
|
|
69
|
+
export {};
|
|
70
|
+
//# sourceMappingURL=form-controls.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"form-controls.d.ts","sourceRoot":"","sources":["../../../../../excel-parser/plugins/xlsx/form-controls.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEV,cAAc,EACf,MAAM,2BAA2B,CAAC;AAgBnC,eAAO,MAAM,kBAAkB,iFACiD,CAAC;AACjF,eAAO,MAAM,oBAAoB,mFACiD,CAAC;AA6CnF,KAAK,UAAU,GAAG;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAe/E;;;;;GAKG;AACH,eAAO,MAAM,8BAA8B,GACzC,MAAM,UAAU,EAChB,IAAI,UAAU,GAAG,SAAS;gBAKZ;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE;oBACrC,MAAM;oBACN,MAAM;kBACR,MAAM;mBACL,MAAM;CAiBxB,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,kBAAkB,GAC7B,aAAa,GAAG,KACf;IACD,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACnC,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;CACtB,GAAG,SAkBH,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,uBAAuB,GAClC,KAAK,MAAM,GAAG,SAAS,KACtB,GAAG,CAAC,MAAM,EAAE,MAAM,CAwBpB,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG;IAChC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,iBAAiB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC1C,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,EAAE,CAAC,EAAE,UAAU,CAAC;CACjB,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,qBAAqB,GAAI,UAAU,GAAG,KAAG,mBAAmB,EA+BxE,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,sBAAsB,GAAI,6CAKpC;IACD,QAAQ,EAAE,mBAAmB,EAAE,CAAC;IAChC,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,OAAO,kBAAkB,CAAC,CAAC,CAAC;IAC9D,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC/B,KAAG,cAAc,EA+BjB,CAAC;AAEF,wEAAwE;AACxE,eAAO,MAAM,sBAAsB,GAAI,UAAU,GAAG,KAAG,MAAM,GAAG,SAK/D,CAAC"}
|
|
@@ -0,0 +1,295 @@
|
|
|
1
|
+
import { __assign, __read, __rest, __spreadArray, __values } from "tslib";
|
|
2
|
+
/**
|
|
3
|
+
* Excel form controls (`<controls>` in the worksheet + `xl/ctrlProps/*` +
|
|
4
|
+
* the legacy VML shape). Parsed into `EmbeddedObject`s with an
|
|
5
|
+
* {@link EmbedFormControlSpec} so the exporter can write the same three
|
|
6
|
+
* parts back (`exporter/xlsx/form-controls-builder.ts`). The grid does not
|
|
7
|
+
* run the control; the spec is a faithful, opaque carrier of what Excel
|
|
8
|
+
* stored.
|
|
9
|
+
*/
|
|
10
|
+
var EMU_PER_PIXEL = 9525;
|
|
11
|
+
/** Grid defaults used to size a control from its cell-span anchor. */
|
|
12
|
+
var DEFAULT_COLUMN_WIDTH_PX = 100;
|
|
13
|
+
var DEFAULT_ROW_HEIGHT_PX = 20;
|
|
14
|
+
export var CTRL_PROP_REL_TYPE = "http://schemas.openxmlformats.org/officeDocument/2006/relationships/ctrlProp";
|
|
15
|
+
export var VML_DRAWING_REL_TYPE = "http://schemas.openxmlformats.org/officeDocument/2006/relationships/vmlDrawing";
|
|
16
|
+
var asArray = function (value) {
|
|
17
|
+
return value == null ? [] : Array.isArray(value) ? value : [value];
|
|
18
|
+
};
|
|
19
|
+
/** Read a child by local name, tolerating any namespace prefix. */
|
|
20
|
+
var childByLocalName = function (node, localName) {
|
|
21
|
+
var e_1, _a;
|
|
22
|
+
if (!node || typeof node !== "object")
|
|
23
|
+
return undefined;
|
|
24
|
+
if (node[localName] !== undefined)
|
|
25
|
+
return node[localName];
|
|
26
|
+
try {
|
|
27
|
+
for (var _b = __values(Object.keys(node)), _c = _b.next(); !_c.done; _c = _b.next()) {
|
|
28
|
+
var key = _c.value;
|
|
29
|
+
var colon = key.indexOf(":");
|
|
30
|
+
if (colon >= 0 && key.slice(colon + 1) === localName) {
|
|
31
|
+
return node[key];
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
catch (e_1_1) { e_1 = { error: e_1_1 }; }
|
|
36
|
+
finally {
|
|
37
|
+
try {
|
|
38
|
+
if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
|
|
39
|
+
}
|
|
40
|
+
finally { if (e_1) throw e_1.error; }
|
|
41
|
+
}
|
|
42
|
+
return undefined;
|
|
43
|
+
};
|
|
44
|
+
/** Text of a leaf element (`t$` when it carries attributes, else the value). */
|
|
45
|
+
var textOf = function (node) {
|
|
46
|
+
if (node == null)
|
|
47
|
+
return undefined;
|
|
48
|
+
if (typeof node === "object") {
|
|
49
|
+
var inner = node.t$;
|
|
50
|
+
return inner == null ? undefined : String(inner);
|
|
51
|
+
}
|
|
52
|
+
return String(node);
|
|
53
|
+
};
|
|
54
|
+
var numberOf = function (node) {
|
|
55
|
+
var text = textOf(node);
|
|
56
|
+
var value = text == null ? Number.NaN : Number(text);
|
|
57
|
+
return Number.isFinite(value) ? value : 0;
|
|
58
|
+
};
|
|
59
|
+
var attrs = function (node) {
|
|
60
|
+
var e_2, _a;
|
|
61
|
+
var raw = node === null || node === void 0 ? void 0 : node.a$;
|
|
62
|
+
var out = {};
|
|
63
|
+
if (!raw || typeof raw !== "object")
|
|
64
|
+
return out;
|
|
65
|
+
try {
|
|
66
|
+
for (var _b = __values(Object.entries(raw)), _c = _b.next(); !_c.done; _c = _b.next()) {
|
|
67
|
+
var _d = __read(_c.value, 2), key = _d[0], value = _d[1];
|
|
68
|
+
if (value == null)
|
|
69
|
+
continue;
|
|
70
|
+
out[key] = String(value);
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
catch (e_2_1) { e_2 = { error: e_2_1 }; }
|
|
74
|
+
finally {
|
|
75
|
+
try {
|
|
76
|
+
if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
|
|
77
|
+
}
|
|
78
|
+
finally { if (e_2) throw e_2.error; }
|
|
79
|
+
}
|
|
80
|
+
return out;
|
|
81
|
+
};
|
|
82
|
+
var readCellAnchor = function (node) {
|
|
83
|
+
if (!node)
|
|
84
|
+
return undefined;
|
|
85
|
+
var col = childByLocalName(node, "col");
|
|
86
|
+
var row = childByLocalName(node, "row");
|
|
87
|
+
if (col === undefined || row === undefined)
|
|
88
|
+
return undefined;
|
|
89
|
+
return {
|
|
90
|
+
col: numberOf(col),
|
|
91
|
+
colOff: numberOf(childByLocalName(node, "colOff")),
|
|
92
|
+
row: numberOf(row),
|
|
93
|
+
rowOff: numberOf(childByLocalName(node, "rowOff")),
|
|
94
|
+
};
|
|
95
|
+
};
|
|
96
|
+
/**
|
|
97
|
+
* `<controlPr><anchor><from>…</from><to>…</to></anchor>` → the engine's
|
|
98
|
+
* pixel overlay position (1-based anchor cell, EMU offsets → px, size from
|
|
99
|
+
* the cell span at the grid defaults — the same approximation the drawing
|
|
100
|
+
* importer uses for `twoCellAnchor`s).
|
|
101
|
+
*/
|
|
102
|
+
export var controlAnchorToOverlayPosition = function (from, to) {
|
|
103
|
+
var offsetXPixels = Math.round(from.colOff / EMU_PER_PIXEL);
|
|
104
|
+
var offsetYPixels = Math.round(from.rowOff / EMU_PER_PIXEL);
|
|
105
|
+
var overlay = {
|
|
106
|
+
anchorCell: { rowIndex: from.row + 1, columnIndex: from.col + 1 },
|
|
107
|
+
};
|
|
108
|
+
if (offsetXPixels)
|
|
109
|
+
overlay.offsetXPixels = offsetXPixels;
|
|
110
|
+
if (offsetYPixels)
|
|
111
|
+
overlay.offsetYPixels = offsetYPixels;
|
|
112
|
+
if (to) {
|
|
113
|
+
var width = (to.col - from.col) * DEFAULT_COLUMN_WIDTH_PX +
|
|
114
|
+
(to.colOff - from.colOff) / EMU_PER_PIXEL;
|
|
115
|
+
var height = (to.row - from.row) * DEFAULT_ROW_HEIGHT_PX +
|
|
116
|
+
(to.rowOff - from.rowOff) / EMU_PER_PIXEL;
|
|
117
|
+
if (width > 0)
|
|
118
|
+
overlay.widthPixels = Math.round(width);
|
|
119
|
+
if (height > 0)
|
|
120
|
+
overlay.heightPixels = Math.round(height);
|
|
121
|
+
}
|
|
122
|
+
return overlay;
|
|
123
|
+
};
|
|
124
|
+
/**
|
|
125
|
+
* Parse an `xl/ctrlProps/ctrlPropN.xml` part: `objectType`, every other
|
|
126
|
+
* `formControlPr` attribute verbatim, and the literal `itemLst` items.
|
|
127
|
+
*/
|
|
128
|
+
export var parseFormControlPr = function (ctrlPropDom) {
|
|
129
|
+
var e_3, _a;
|
|
130
|
+
var root = childByLocalName(ctrlPropDom, "formControlPr");
|
|
131
|
+
if (!root)
|
|
132
|
+
return undefined;
|
|
133
|
+
var _b = attrs(root), objectType = _b.objectType, properties = __rest(_b, ["objectType"]);
|
|
134
|
+
if (!objectType)
|
|
135
|
+
return undefined;
|
|
136
|
+
try {
|
|
137
|
+
// Namespace declarations ride along as attributes in fast-xml-parser.
|
|
138
|
+
for (var _c = __values(Object.keys(properties)), _d = _c.next(); !_d.done; _d = _c.next()) {
|
|
139
|
+
var key = _d.value;
|
|
140
|
+
if (key === "xmlns" || key.startsWith("xmlns:"))
|
|
141
|
+
delete properties[key];
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
catch (e_3_1) { e_3 = { error: e_3_1 }; }
|
|
145
|
+
finally {
|
|
146
|
+
try {
|
|
147
|
+
if (_d && !_d.done && (_a = _c.return)) _a.call(_c);
|
|
148
|
+
}
|
|
149
|
+
finally { if (e_3) throw e_3.error; }
|
|
150
|
+
}
|
|
151
|
+
var itemLst = childByLocalName(root, "itemLst");
|
|
152
|
+
var listItems = asArray(childByLocalName(itemLst, "item"))
|
|
153
|
+
.map(function (item) { return attrs(item).val; })
|
|
154
|
+
.filter(function (val) { return typeof val === "string"; });
|
|
155
|
+
return __assign({ objectType: objectType, properties: properties }, (listItems.length ? { listItems: listItems } : {}));
|
|
156
|
+
};
|
|
157
|
+
/**
|
|
158
|
+
* Captions live only in the legacy VML part: `<v:shape id="_x0000_s1025">
|
|
159
|
+
* … <v:textbox><div>Check Box 1</div></v:textbox>`. Returns shapeId → text.
|
|
160
|
+
* VML is scanned textually — Excel's VML is not reliably well-formed XML.
|
|
161
|
+
*/
|
|
162
|
+
export var parseVmlControlCaptions = function (vml) {
|
|
163
|
+
var captions = new Map();
|
|
164
|
+
if (!vml)
|
|
165
|
+
return captions;
|
|
166
|
+
var shapeRe = /<v:shape\b([^>]*)>([\s\S]*?)<\/v:shape>/g;
|
|
167
|
+
var match;
|
|
168
|
+
while ((match = shapeRe.exec(vml))) {
|
|
169
|
+
var idMatch = /\bid="_x0000_s(\d+)"/.exec(match[1]);
|
|
170
|
+
if (!idMatch)
|
|
171
|
+
continue;
|
|
172
|
+
var body = match[2];
|
|
173
|
+
if (!/<x:ClientData\b/.test(body))
|
|
174
|
+
continue;
|
|
175
|
+
var textbox = /<v:textbox\b[^>]*>([\s\S]*?)<\/v:textbox>/.exec(body);
|
|
176
|
+
if (!textbox)
|
|
177
|
+
continue;
|
|
178
|
+
var text = textbox[1]
|
|
179
|
+
.replace(/<br\s*\/?>/gi, "\n")
|
|
180
|
+
.replace(/<[^>]+>/g, "")
|
|
181
|
+
.replace(/&/g, "&")
|
|
182
|
+
.replace(/</g, "<")
|
|
183
|
+
.replace(/>/g, ">")
|
|
184
|
+
.replace(/"/g, '"')
|
|
185
|
+
.replace(/&#(\d+);/g, function (_, code) { return String.fromCodePoint(Number(code)); })
|
|
186
|
+
.trim();
|
|
187
|
+
if (text)
|
|
188
|
+
captions.set(Number(idMatch[1]), text);
|
|
189
|
+
}
|
|
190
|
+
return captions;
|
|
191
|
+
};
|
|
192
|
+
/**
|
|
193
|
+
* `<controls>` from a worksheet DOM, whether wrapped in
|
|
194
|
+
* `<mc:AlternateContent><mc:Choice Requires="x14">` (Excel) or bare.
|
|
195
|
+
*/
|
|
196
|
+
export var readWorksheetControls = function (sheetDom) {
|
|
197
|
+
var e_4, _a, e_5, _b;
|
|
198
|
+
var _c;
|
|
199
|
+
var worksheet = (_c = childByLocalName(sheetDom, "worksheet")) !== null && _c !== void 0 ? _c : sheetDom;
|
|
200
|
+
var controls = childByLocalName(worksheet, "controls");
|
|
201
|
+
if (!controls)
|
|
202
|
+
return [];
|
|
203
|
+
var controlNodes = __spreadArray([], __read(asArray(childByLocalName(controls, "control"))), false);
|
|
204
|
+
try {
|
|
205
|
+
for (var _d = __values(asArray(childByLocalName(controls, "AlternateContent"))), _e = _d.next(); !_e.done; _e = _d.next()) {
|
|
206
|
+
var alternate = _e.value;
|
|
207
|
+
try {
|
|
208
|
+
for (var _f = (e_5 = void 0, __values(asArray(childByLocalName(alternate, "Choice")))), _g = _f.next(); !_g.done; _g = _f.next()) {
|
|
209
|
+
var choice = _g.value;
|
|
210
|
+
controlNodes.push.apply(controlNodes, __spreadArray([], __read(asArray(childByLocalName(choice, "control"))), false));
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
catch (e_5_1) { e_5 = { error: e_5_1 }; }
|
|
214
|
+
finally {
|
|
215
|
+
try {
|
|
216
|
+
if (_g && !_g.done && (_b = _f.return)) _b.call(_f);
|
|
217
|
+
}
|
|
218
|
+
finally { if (e_5) throw e_5.error; }
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
catch (e_4_1) { e_4 = { error: e_4_1 }; }
|
|
223
|
+
finally {
|
|
224
|
+
try {
|
|
225
|
+
if (_e && !_e.done && (_a = _d.return)) _a.call(_d);
|
|
226
|
+
}
|
|
227
|
+
finally { if (e_4) throw e_4.error; }
|
|
228
|
+
}
|
|
229
|
+
return controlNodes.map(function (node) {
|
|
230
|
+
var _a, _b;
|
|
231
|
+
var a = attrs(node);
|
|
232
|
+
var controlPr = childByLocalName(node, "controlPr");
|
|
233
|
+
var anchor = childByLocalName(controlPr, "anchor");
|
|
234
|
+
var anchorAttrs = attrs(anchor);
|
|
235
|
+
var shapeId = Number(a.shapeId);
|
|
236
|
+
return __assign(__assign(__assign(__assign(__assign(__assign(__assign({}, (Number.isFinite(shapeId) && a.shapeId ? { shapeId: shapeId } : {})), (a.name ? { name: a.name } : {})), (((_a = a["r:id"]) !== null && _a !== void 0 ? _a : a.id) ? { relId: (_b = a["r:id"]) !== null && _b !== void 0 ? _b : a.id } : {})), { controlProperties: attrs(controlPr) }), (anchorAttrs.moveWithCells !== undefined
|
|
237
|
+
? { moveWithCells: anchorAttrs.moveWithCells === "1" || anchorAttrs.moveWithCells === "true" }
|
|
238
|
+
: {})), (anchorAttrs.sizeWithCells !== undefined
|
|
239
|
+
? { sizeWithCells: anchorAttrs.sizeWithCells === "1" || anchorAttrs.sizeWithCells === "true" }
|
|
240
|
+
: {})), { from: readCellAnchor(childByLocalName(anchor, "from")), to: readCellAnchor(childByLocalName(anchor, "to")) });
|
|
241
|
+
});
|
|
242
|
+
};
|
|
243
|
+
/**
|
|
244
|
+
* Assemble the sheet's form controls. `loadCtrlProp` resolves a control's
|
|
245
|
+
* `r:id` to its parsed `ctrlProp` DOM (undefined when the part is missing —
|
|
246
|
+
* the control is then skipped, Excel would repair it the same way).
|
|
247
|
+
*/
|
|
248
|
+
export var buildFormControlEmbeds = function (_a) {
|
|
249
|
+
var controls = _a.controls, sheetId = _a.sheetId, ctrlProps = _a.ctrlProps, captions = _a.captions;
|
|
250
|
+
var embeds = [];
|
|
251
|
+
controls.forEach(function (control, index) {
|
|
252
|
+
var _a;
|
|
253
|
+
var parsed = control.relId ? ctrlProps.get(control.relId) : undefined;
|
|
254
|
+
if (!parsed || !control.from)
|
|
255
|
+
return;
|
|
256
|
+
var spec = {
|
|
257
|
+
type: "formControl",
|
|
258
|
+
objectType: parsed.objectType,
|
|
259
|
+
properties: parsed.properties,
|
|
260
|
+
};
|
|
261
|
+
if (control.name)
|
|
262
|
+
spec.name = control.name;
|
|
263
|
+
if (control.shapeId !== undefined)
|
|
264
|
+
spec.shapeId = control.shapeId;
|
|
265
|
+
var caption = control.shapeId !== undefined ? captions.get(control.shapeId) : undefined;
|
|
266
|
+
if (caption)
|
|
267
|
+
spec.text = caption;
|
|
268
|
+
if (parsed.listItems)
|
|
269
|
+
spec.listItems = parsed.listItems;
|
|
270
|
+
if (Object.keys(control.controlProperties).length) {
|
|
271
|
+
spec.controlProperties = control.controlProperties;
|
|
272
|
+
}
|
|
273
|
+
if (control.moveWithCells !== undefined)
|
|
274
|
+
spec.moveWithCells = control.moveWithCells;
|
|
275
|
+
if (control.sizeWithCells !== undefined)
|
|
276
|
+
spec.sizeWithCells = control.sizeWithCells;
|
|
277
|
+
embeds.push({
|
|
278
|
+
embedId: "control-".concat(sheetId, "-").concat((_a = control.shapeId) !== null && _a !== void 0 ? _a : index + 1),
|
|
279
|
+
spec: spec,
|
|
280
|
+
position: {
|
|
281
|
+
sheetId: sheetId,
|
|
282
|
+
overlayPosition: controlAnchorToOverlayPosition(control.from, control.to),
|
|
283
|
+
},
|
|
284
|
+
});
|
|
285
|
+
});
|
|
286
|
+
return embeds;
|
|
287
|
+
};
|
|
288
|
+
/** The `r:id` of a worksheet's `<legacyDrawing>` (VML part), if any. */
|
|
289
|
+
export var readLegacyDrawingRelId = function (sheetDom) {
|
|
290
|
+
var _a, _b;
|
|
291
|
+
var worksheet = (_a = childByLocalName(sheetDom, "worksheet")) !== null && _a !== void 0 ? _a : sheetDom;
|
|
292
|
+
var legacy = childByLocalName(worksheet, "legacyDrawing");
|
|
293
|
+
var a = attrs(legacy);
|
|
294
|
+
return (_b = a["r:id"]) !== null && _b !== void 0 ? _b : a.id;
|
|
295
|
+
};
|