@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
|
@@ -0,0 +1,246 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Excel form controls (`<controls>` in the worksheet + `xl/ctrlProps/*` +
|
|
3
|
+
* the legacy VML shape). Parsed into `EmbeddedObject`s with an
|
|
4
|
+
* {@link EmbedFormControlSpec} so the exporter can write the same three
|
|
5
|
+
* parts back (`exporter/xlsx/form-controls-builder.ts`). The grid does not
|
|
6
|
+
* run the control; the spec is a faithful, opaque carrier of what Excel
|
|
7
|
+
* stored.
|
|
8
|
+
*/
|
|
9
|
+
const EMU_PER_PIXEL = 9525;
|
|
10
|
+
/** Grid defaults used to size a control from its cell-span anchor. */
|
|
11
|
+
const DEFAULT_COLUMN_WIDTH_PX = 100;
|
|
12
|
+
const DEFAULT_ROW_HEIGHT_PX = 20;
|
|
13
|
+
export const CTRL_PROP_REL_TYPE = "http://schemas.openxmlformats.org/officeDocument/2006/relationships/ctrlProp";
|
|
14
|
+
export const VML_DRAWING_REL_TYPE = "http://schemas.openxmlformats.org/officeDocument/2006/relationships/vmlDrawing";
|
|
15
|
+
const asArray = (value) => value == null ? [] : Array.isArray(value) ? value : [value];
|
|
16
|
+
/** Read a child by local name, tolerating any namespace prefix. */
|
|
17
|
+
const childByLocalName = (node, localName) => {
|
|
18
|
+
if (!node || typeof node !== "object")
|
|
19
|
+
return undefined;
|
|
20
|
+
if (node[localName] !== undefined)
|
|
21
|
+
return node[localName];
|
|
22
|
+
for (const key of Object.keys(node)) {
|
|
23
|
+
const colon = key.indexOf(":");
|
|
24
|
+
if (colon >= 0 && key.slice(colon + 1) === localName) {
|
|
25
|
+
return node[key];
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
return undefined;
|
|
29
|
+
};
|
|
30
|
+
/** Text of a leaf element (`t$` when it carries attributes, else the value). */
|
|
31
|
+
const textOf = (node) => {
|
|
32
|
+
if (node == null)
|
|
33
|
+
return undefined;
|
|
34
|
+
if (typeof node === "object") {
|
|
35
|
+
const inner = node.t$;
|
|
36
|
+
return inner == null ? undefined : String(inner);
|
|
37
|
+
}
|
|
38
|
+
return String(node);
|
|
39
|
+
};
|
|
40
|
+
const numberOf = (node) => {
|
|
41
|
+
const text = textOf(node);
|
|
42
|
+
const value = text == null ? Number.NaN : Number(text);
|
|
43
|
+
return Number.isFinite(value) ? value : 0;
|
|
44
|
+
};
|
|
45
|
+
const attrs = (node) => {
|
|
46
|
+
const raw = node?.a$;
|
|
47
|
+
const out = {};
|
|
48
|
+
if (!raw || typeof raw !== "object")
|
|
49
|
+
return out;
|
|
50
|
+
for (const [key, value] of Object.entries(raw)) {
|
|
51
|
+
if (value == null)
|
|
52
|
+
continue;
|
|
53
|
+
out[key] = String(value);
|
|
54
|
+
}
|
|
55
|
+
return out;
|
|
56
|
+
};
|
|
57
|
+
const readCellAnchor = (node) => {
|
|
58
|
+
if (!node)
|
|
59
|
+
return undefined;
|
|
60
|
+
const col = childByLocalName(node, "col");
|
|
61
|
+
const row = childByLocalName(node, "row");
|
|
62
|
+
if (col === undefined || row === undefined)
|
|
63
|
+
return undefined;
|
|
64
|
+
return {
|
|
65
|
+
col: numberOf(col),
|
|
66
|
+
colOff: numberOf(childByLocalName(node, "colOff")),
|
|
67
|
+
row: numberOf(row),
|
|
68
|
+
rowOff: numberOf(childByLocalName(node, "rowOff")),
|
|
69
|
+
};
|
|
70
|
+
};
|
|
71
|
+
/**
|
|
72
|
+
* `<controlPr><anchor><from>…</from><to>…</to></anchor>` → the engine's
|
|
73
|
+
* pixel overlay position (1-based anchor cell, EMU offsets → px, size from
|
|
74
|
+
* the cell span at the grid defaults — the same approximation the drawing
|
|
75
|
+
* importer uses for `twoCellAnchor`s).
|
|
76
|
+
*/
|
|
77
|
+
export const controlAnchorToOverlayPosition = (from, to) => {
|
|
78
|
+
const offsetXPixels = Math.round(from.colOff / EMU_PER_PIXEL);
|
|
79
|
+
const offsetYPixels = Math.round(from.rowOff / EMU_PER_PIXEL);
|
|
80
|
+
const overlay = {
|
|
81
|
+
anchorCell: { rowIndex: from.row + 1, columnIndex: from.col + 1 },
|
|
82
|
+
};
|
|
83
|
+
if (offsetXPixels)
|
|
84
|
+
overlay.offsetXPixels = offsetXPixels;
|
|
85
|
+
if (offsetYPixels)
|
|
86
|
+
overlay.offsetYPixels = offsetYPixels;
|
|
87
|
+
if (to) {
|
|
88
|
+
const width = (to.col - from.col) * DEFAULT_COLUMN_WIDTH_PX +
|
|
89
|
+
(to.colOff - from.colOff) / EMU_PER_PIXEL;
|
|
90
|
+
const height = (to.row - from.row) * DEFAULT_ROW_HEIGHT_PX +
|
|
91
|
+
(to.rowOff - from.rowOff) / EMU_PER_PIXEL;
|
|
92
|
+
if (width > 0)
|
|
93
|
+
overlay.widthPixels = Math.round(width);
|
|
94
|
+
if (height > 0)
|
|
95
|
+
overlay.heightPixels = Math.round(height);
|
|
96
|
+
}
|
|
97
|
+
return overlay;
|
|
98
|
+
};
|
|
99
|
+
/**
|
|
100
|
+
* Parse an `xl/ctrlProps/ctrlPropN.xml` part: `objectType`, every other
|
|
101
|
+
* `formControlPr` attribute verbatim, and the literal `itemLst` items.
|
|
102
|
+
*/
|
|
103
|
+
export const parseFormControlPr = (ctrlPropDom) => {
|
|
104
|
+
const root = childByLocalName(ctrlPropDom, "formControlPr");
|
|
105
|
+
if (!root)
|
|
106
|
+
return undefined;
|
|
107
|
+
const { objectType, ...properties } = attrs(root);
|
|
108
|
+
if (!objectType)
|
|
109
|
+
return undefined;
|
|
110
|
+
// Namespace declarations ride along as attributes in fast-xml-parser.
|
|
111
|
+
for (const key of Object.keys(properties)) {
|
|
112
|
+
if (key === "xmlns" || key.startsWith("xmlns:"))
|
|
113
|
+
delete properties[key];
|
|
114
|
+
}
|
|
115
|
+
const itemLst = childByLocalName(root, "itemLst");
|
|
116
|
+
const listItems = asArray(childByLocalName(itemLst, "item"))
|
|
117
|
+
.map((item) => attrs(item).val)
|
|
118
|
+
.filter((val) => typeof val === "string");
|
|
119
|
+
return {
|
|
120
|
+
objectType,
|
|
121
|
+
properties,
|
|
122
|
+
...(listItems.length ? { listItems } : {}),
|
|
123
|
+
};
|
|
124
|
+
};
|
|
125
|
+
/**
|
|
126
|
+
* Captions live only in the legacy VML part: `<v:shape id="_x0000_s1025">
|
|
127
|
+
* … <v:textbox><div>Check Box 1</div></v:textbox>`. Returns shapeId → text.
|
|
128
|
+
* VML is scanned textually — Excel's VML is not reliably well-formed XML.
|
|
129
|
+
*/
|
|
130
|
+
export const parseVmlControlCaptions = (vml) => {
|
|
131
|
+
const captions = new Map();
|
|
132
|
+
if (!vml)
|
|
133
|
+
return captions;
|
|
134
|
+
const shapeRe = /<v:shape\b([^>]*)>([\s\S]*?)<\/v:shape>/g;
|
|
135
|
+
let match;
|
|
136
|
+
while ((match = shapeRe.exec(vml))) {
|
|
137
|
+
const idMatch = /\bid="_x0000_s(\d+)"/.exec(match[1]);
|
|
138
|
+
if (!idMatch)
|
|
139
|
+
continue;
|
|
140
|
+
const body = match[2];
|
|
141
|
+
if (!/<x:ClientData\b/.test(body))
|
|
142
|
+
continue;
|
|
143
|
+
const textbox = /<v:textbox\b[^>]*>([\s\S]*?)<\/v:textbox>/.exec(body);
|
|
144
|
+
if (!textbox)
|
|
145
|
+
continue;
|
|
146
|
+
const text = textbox[1]
|
|
147
|
+
.replace(/<br\s*\/?>/gi, "\n")
|
|
148
|
+
.replace(/<[^>]+>/g, "")
|
|
149
|
+
.replace(/&/g, "&")
|
|
150
|
+
.replace(/</g, "<")
|
|
151
|
+
.replace(/>/g, ">")
|
|
152
|
+
.replace(/"/g, '"')
|
|
153
|
+
.replace(/&#(\d+);/g, (_, code) => String.fromCodePoint(Number(code)))
|
|
154
|
+
.trim();
|
|
155
|
+
if (text)
|
|
156
|
+
captions.set(Number(idMatch[1]), text);
|
|
157
|
+
}
|
|
158
|
+
return captions;
|
|
159
|
+
};
|
|
160
|
+
/**
|
|
161
|
+
* `<controls>` from a worksheet DOM, whether wrapped in
|
|
162
|
+
* `<mc:AlternateContent><mc:Choice Requires="x14">` (Excel) or bare.
|
|
163
|
+
*/
|
|
164
|
+
export const readWorksheetControls = (sheetDom) => {
|
|
165
|
+
const worksheet = childByLocalName(sheetDom, "worksheet") ?? sheetDom;
|
|
166
|
+
const controls = childByLocalName(worksheet, "controls");
|
|
167
|
+
if (!controls)
|
|
168
|
+
return [];
|
|
169
|
+
const controlNodes = [...asArray(childByLocalName(controls, "control"))];
|
|
170
|
+
for (const alternate of asArray(childByLocalName(controls, "AlternateContent"))) {
|
|
171
|
+
for (const choice of asArray(childByLocalName(alternate, "Choice"))) {
|
|
172
|
+
controlNodes.push(...asArray(childByLocalName(choice, "control")));
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
return controlNodes.map((node) => {
|
|
176
|
+
const a = attrs(node);
|
|
177
|
+
const controlPr = childByLocalName(node, "controlPr");
|
|
178
|
+
const anchor = childByLocalName(controlPr, "anchor");
|
|
179
|
+
const anchorAttrs = attrs(anchor);
|
|
180
|
+
const shapeId = Number(a.shapeId);
|
|
181
|
+
return {
|
|
182
|
+
...(Number.isFinite(shapeId) && a.shapeId ? { shapeId } : {}),
|
|
183
|
+
...(a.name ? { name: a.name } : {}),
|
|
184
|
+
...(a["r:id"] ?? a.id ? { relId: a["r:id"] ?? a.id } : {}),
|
|
185
|
+
controlProperties: attrs(controlPr),
|
|
186
|
+
...(anchorAttrs.moveWithCells !== undefined
|
|
187
|
+
? { moveWithCells: anchorAttrs.moveWithCells === "1" || anchorAttrs.moveWithCells === "true" }
|
|
188
|
+
: {}),
|
|
189
|
+
...(anchorAttrs.sizeWithCells !== undefined
|
|
190
|
+
? { sizeWithCells: anchorAttrs.sizeWithCells === "1" || anchorAttrs.sizeWithCells === "true" }
|
|
191
|
+
: {}),
|
|
192
|
+
from: readCellAnchor(childByLocalName(anchor, "from")),
|
|
193
|
+
to: readCellAnchor(childByLocalName(anchor, "to")),
|
|
194
|
+
};
|
|
195
|
+
});
|
|
196
|
+
};
|
|
197
|
+
/**
|
|
198
|
+
* Assemble the sheet's form controls. `loadCtrlProp` resolves a control's
|
|
199
|
+
* `r:id` to its parsed `ctrlProp` DOM (undefined when the part is missing —
|
|
200
|
+
* the control is then skipped, Excel would repair it the same way).
|
|
201
|
+
*/
|
|
202
|
+
export const buildFormControlEmbeds = ({ controls, sheetId, ctrlProps, captions, }) => {
|
|
203
|
+
const embeds = [];
|
|
204
|
+
controls.forEach((control, index) => {
|
|
205
|
+
const parsed = control.relId ? ctrlProps.get(control.relId) : undefined;
|
|
206
|
+
if (!parsed || !control.from)
|
|
207
|
+
return;
|
|
208
|
+
const spec = {
|
|
209
|
+
type: "formControl",
|
|
210
|
+
objectType: parsed.objectType,
|
|
211
|
+
properties: parsed.properties,
|
|
212
|
+
};
|
|
213
|
+
if (control.name)
|
|
214
|
+
spec.name = control.name;
|
|
215
|
+
if (control.shapeId !== undefined)
|
|
216
|
+
spec.shapeId = control.shapeId;
|
|
217
|
+
const caption = control.shapeId !== undefined ? captions.get(control.shapeId) : undefined;
|
|
218
|
+
if (caption)
|
|
219
|
+
spec.text = caption;
|
|
220
|
+
if (parsed.listItems)
|
|
221
|
+
spec.listItems = parsed.listItems;
|
|
222
|
+
if (Object.keys(control.controlProperties).length) {
|
|
223
|
+
spec.controlProperties = control.controlProperties;
|
|
224
|
+
}
|
|
225
|
+
if (control.moveWithCells !== undefined)
|
|
226
|
+
spec.moveWithCells = control.moveWithCells;
|
|
227
|
+
if (control.sizeWithCells !== undefined)
|
|
228
|
+
spec.sizeWithCells = control.sizeWithCells;
|
|
229
|
+
embeds.push({
|
|
230
|
+
embedId: `control-${sheetId}-${control.shapeId ?? index + 1}`,
|
|
231
|
+
spec,
|
|
232
|
+
position: {
|
|
233
|
+
sheetId,
|
|
234
|
+
overlayPosition: controlAnchorToOverlayPosition(control.from, control.to),
|
|
235
|
+
},
|
|
236
|
+
});
|
|
237
|
+
});
|
|
238
|
+
return embeds;
|
|
239
|
+
};
|
|
240
|
+
/** The `r:id` of a worksheet's `<legacyDrawing>` (VML part), if any. */
|
|
241
|
+
export const readLegacyDrawingRelId = (sheetDom) => {
|
|
242
|
+
const worksheet = childByLocalName(sheetDom, "worksheet") ?? sheetDom;
|
|
243
|
+
const legacy = childByLocalName(worksheet, "legacyDrawing");
|
|
244
|
+
const a = attrs(legacy);
|
|
245
|
+
return a["r:id"] ?? a.id;
|
|
246
|
+
};
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import type { CellFormat, ConditionalFormatRule, DataValidationRuleRecord, EmbeddedChart, EmbeddedObject, NamedRange, Sheet, Slicer, SpreadsheetTheme, TableView } from "@rowsncolumns/spreadsheet";
|
|
2
|
-
import type { CommentThread, TextFormat, TextFormatRun } from "@rowsncolumns/common-types";
|
|
1
|
+
import type { CellFormat, ConditionalFormatRule, DataValidationRuleRecord, EmbeddedChart, EmbeddedObject, NamedRange, ProtectedRange, Sheet, Slicer, SpreadsheetTheme, TableView } from "@rowsncolumns/spreadsheet";
|
|
2
|
+
import type { NamedCellStyle, CommentThread, TextFormat, TextFormatRun } from "@rowsncolumns/common-types";
|
|
3
3
|
import { XMLParser } from "fast-xml-parser";
|
|
4
4
|
import type { IWorkbookPlugin } from "../../interface";
|
|
5
5
|
import type { ExternalLink, ProcessSheetDataForSheetOptions, ProcessSheetDataResult, SheetCatalogEntry, WorkbookProperties } from "../../types";
|
|
@@ -158,6 +158,18 @@ export declare class XlsxPlugin extends BaseWorkbookPlugin implements IWorkbookP
|
|
|
158
158
|
* `getDataValidations()` aggregates these per-sheet caches, keeping ids
|
|
159
159
|
* stable across per-sheet and workbook-wide callers.
|
|
160
160
|
*/
|
|
161
|
+
/**
|
|
162
|
+
* `<protectedRanges>` per sheet, populated while `getSheets` builds each
|
|
163
|
+
* `Sheet` (the element sits after `<sheetData>` in the worksheet part, so it
|
|
164
|
+
* rides the same geometry pass). Read back via `getProtectedRanges`.
|
|
165
|
+
*/
|
|
166
|
+
private protectedRangesBySheet;
|
|
167
|
+
/**
|
|
168
|
+
* The builtin `_xlnm.Print_Area` / `_xlnm.Print_Titles` defined names,
|
|
169
|
+
* hoisted out of `namedRanges` (they are sheet-scoped facets, not user
|
|
170
|
+
* names) and merged into each sheet's `printSettings` by `getSheets()`.
|
|
171
|
+
*/
|
|
172
|
+
private printNamesBySheetId;
|
|
161
173
|
private dataValidationsBySheetCache;
|
|
162
174
|
/** Per-sheet memo for conditional formatting, mirroring the DV cache. */
|
|
163
175
|
private conditionalFormattingBySheetCache;
|
|
@@ -240,6 +252,8 @@ export declare class XlsxPlugin extends BaseWorkbookPlugin implements IWorkbookP
|
|
|
240
252
|
getSheetData(rid: string): Promise<any>;
|
|
241
253
|
getStyles(): any;
|
|
242
254
|
getTheme(): SpreadsheetTheme;
|
|
255
|
+
/** `<cellStyles>` resolved to cell formats (toolbar "Workbook styles" gallery). */
|
|
256
|
+
getNamedCellStyles(): NamedCellStyle[];
|
|
243
257
|
/**
|
|
244
258
|
* The workbook default font — styles.xml fonts[0], the font every cell
|
|
245
259
|
* without an explicit font inherits. Exporters pass this through so the
|
|
@@ -253,6 +267,12 @@ export declare class XlsxPlugin extends BaseWorkbookPlugin implements IWorkbookP
|
|
|
253
267
|
getSharedStrings(): string[];
|
|
254
268
|
getRelations(): Promise<Record<string, Relationship>>;
|
|
255
269
|
_getSheets(): any[];
|
|
270
|
+
/**
|
|
271
|
+
* Resolve a builtin print name to its sheet (`localSheetId` indexes the
|
|
272
|
+
* `<sheets>` order; a name without scope falls back to the sheet named in
|
|
273
|
+
* the formula) and record the parsed print area / titles for `getSheets()`.
|
|
274
|
+
*/
|
|
275
|
+
private stashBuiltinPrintName;
|
|
256
276
|
_getNamedRanges(): NamedRange[];
|
|
257
277
|
/**
|
|
258
278
|
* Returns true if the workbook signals that Excel should perform a full
|
|
@@ -276,6 +296,12 @@ export declare class XlsxPlugin extends BaseWorkbookPlugin implements IWorkbookP
|
|
|
276
296
|
releaseSheetCaches(sheetId: number): void;
|
|
277
297
|
private processOneSheet;
|
|
278
298
|
getDrawings(): Promise<EmbeddedObjectWithPosition[]>;
|
|
299
|
+
/**
|
|
300
|
+
* Form controls: `<controls><control r:id>` → `xl/ctrlProps/ctrlPropN.xml`
|
|
301
|
+
* (+ the caption from the sheet's legacy VML part), as `formControl`
|
|
302
|
+
* embeds. Nothing is rendered interactively — they round-trip.
|
|
303
|
+
*/
|
|
304
|
+
_getFormControls(rid: string, sheetId: number, sheetData: any): Promise<EmbeddedObject[]>;
|
|
279
305
|
getCharts(): Promise<EmbeddedChart[]>;
|
|
280
306
|
/**
|
|
281
307
|
* Phase D1 — extract every pivot table across every worksheet.
|
|
@@ -299,6 +325,13 @@ export declare class XlsxPlugin extends BaseWorkbookPlugin implements IWorkbookP
|
|
|
299
325
|
getDataValidations(): Promise<DataValidationRuleRecord[]>;
|
|
300
326
|
getDataValidationsForSheet(sheetId: number): Promise<DataValidationRuleRecord[]>;
|
|
301
327
|
private parseDataValidationsForSheet;
|
|
328
|
+
/**
|
|
329
|
+
* Allow-edit ranges (`<protectedRanges>/<protectedRange>`) in the model the
|
|
330
|
+
* `protect-range` command writes: `protectedRangeId` = the source `name`,
|
|
331
|
+
* `range` = the first `sqref` area plus `sheetId`. Available after
|
|
332
|
+
* `getSheets()`; sheet-level `<sheetProtection>` rides `Sheet.sheetProtection`.
|
|
333
|
+
*/
|
|
334
|
+
getProtectedRanges(sheetId?: number): ProtectedRange[];
|
|
302
335
|
getNamedRanges(): NamedRange[];
|
|
303
336
|
/**
|
|
304
337
|
* Parse the workbook's metadata files (docProps/core.xml + docProps/app.xml)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../excel-parser/plugins/xlsx/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAGV,UAAU,EAEV,qBAAqB,EACrB,wBAAwB,EAExB,aAAa,EACb,cAAc,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../excel-parser/plugins/xlsx/index.ts"],"names":[],"mappings":"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"}
|