ooxml-core 1.8.3 → 1.9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/PptxHandler-AT7FVG5Q.mjs +2 -0
- package/dist/{PptxHandler-BL4B7CZO.mjs → PptxHandler-EX4WBIQQ.mjs} +2 -2
- package/dist/PptxHandler-VFSCECPL.cjs +11 -0
- package/dist/automation/index.cjs +7380 -4682
- package/dist/automation/index.mjs +7380 -4682
- package/dist/chunk-AT66SA5M.cjs +44423 -0
- package/dist/{chunk-TTPZITQN.mjs → chunk-FIELY5PI.mjs} +1 -1
- package/dist/{chunk-ZAP5WLEN.mjs → chunk-IGOA57LE.mjs} +1 -1
- package/dist/chunk-LCS3J3QI.mjs +87604 -0
- package/dist/{chunk-NIHPA63A.mjs → chunk-M76PHYRR.mjs} +54 -37
- package/dist/chunk-OB277ZGE.mjs +44107 -0
- package/dist/{chunk-GAGSCAR3.mjs → chunk-OXHMZS7B.mjs} +552 -178
- package/dist/chunk-SWF7KVL5.cjs +87610 -0
- package/dist/{chunk-Z7IQR4S4.mjs → chunk-WSO4T2LJ.mjs} +246 -21
- package/dist/docx/block-parser.d.ts.map +1 -1
- package/dist/docx/cell-blocks.d.ts +4 -0
- package/dist/docx/cell-blocks.d.ts.map +1 -0
- package/dist/docx/document-paragraphs.d.ts.map +1 -1
- package/dist/docx/document-parts.d.ts +2 -0
- package/dist/docx/document-parts.d.ts.map +1 -1
- package/dist/docx/embedded.cjs +189 -20
- package/dist/docx/embedded.mjs +189 -20
- package/dist/docx/index.cjs +219 -24
- package/dist/docx/index.mjs +219 -24
- package/dist/docx/layout/adapt-table.d.ts.map +1 -1
- package/dist/docx/layout/adapter.d.ts.map +1 -1
- package/dist/docx/layout/flow-paragraph.d.ts +5 -0
- package/dist/docx/layout/flow-paragraph.d.ts.map +1 -1
- package/dist/docx/layout/flow-table.d.ts +2 -1
- package/dist/docx/layout/flow-table.d.ts.map +1 -1
- package/dist/docx/layout/footnote-columns.d.ts +22 -0
- package/dist/docx/layout/footnote-columns.d.ts.map +1 -0
- package/dist/docx/layout/footnote-flow.d.ts +27 -0
- package/dist/docx/layout/footnote-flow.d.ts.map +1 -0
- package/dist/docx/layout/footnote-split.d.ts +7 -0
- package/dist/docx/layout/footnote-split.d.ts.map +1 -0
- package/dist/docx/layout/index.cjs +1099 -92
- package/dist/docx/layout/index.mjs +1099 -92
- package/dist/docx/layout/input.d.ts +17 -1
- package/dist/docx/layout/input.d.ts.map +1 -1
- package/dist/docx/layout/legacy-footnote-flow.d.ts +18 -0
- package/dist/docx/layout/legacy-footnote-flow.d.ts.map +1 -0
- package/dist/docx/layout/line-metrics.d.ts.map +1 -1
- package/dist/docx/layout/page-cursor.d.ts +13 -8
- package/dist/docx/layout/page-cursor.d.ts.map +1 -1
- package/dist/docx/layout/page-flow.d.ts.map +1 -1
- package/dist/docx/layout/paragraph-layout.d.ts.map +1 -1
- package/dist/docx/layout/paragraph-tokens.d.ts +2 -0
- package/dist/docx/layout/paragraph-tokens.d.ts.map +1 -1
- package/dist/docx/layout/reference-footnotes.d.ts +7 -0
- package/dist/docx/layout/reference-footnotes.d.ts.map +1 -0
- package/dist/docx/layout/result.d.ts +31 -0
- package/dist/docx/layout/result.d.ts.map +1 -1
- package/dist/docx/layout/section-flow.d.ts +2 -0
- package/dist/docx/layout/section-flow.d.ts.map +1 -1
- package/dist/docx/layout/table-cell-layout.d.ts +11 -0
- package/dist/docx/layout/table-cell-layout.d.ts.map +1 -0
- package/dist/docx/layout/table-footnotes.d.ts +27 -0
- package/dist/docx/layout/table-footnotes.d.ts.map +1 -0
- package/dist/docx/layout/table-layout.d.ts +10 -4
- package/dist/docx/layout/table-layout.d.ts.map +1 -1
- package/dist/docx/load/index.cjs +194 -25
- package/dist/docx/load/index.mjs +194 -25
- package/dist/docx/model-run.d.ts +2 -0
- package/dist/docx/model-run.d.ts.map +1 -1
- package/dist/docx/model.d.ts +7 -0
- package/dist/docx/model.d.ts.map +1 -1
- package/dist/docx/notes.d.ts +5 -0
- package/dist/docx/notes.d.ts.map +1 -1
- package/dist/docx/parse-table.d.ts.map +1 -1
- package/dist/docx/parse.d.ts.map +1 -1
- package/dist/docx/save.d.ts.map +1 -1
- package/dist/docx/section-model.d.ts +2 -0
- package/dist/docx/section-model.d.ts.map +1 -1
- package/dist/docx/sections.d.ts.map +1 -1
- package/dist/docx/settings.d.ts +2 -0
- package/dist/docx/settings.d.ts.map +1 -1
- package/dist/docx/table-model.d.ts +3 -1
- package/dist/docx/table-model.d.ts.map +1 -1
- package/dist/docx/ui/index.cjs +55 -0
- package/dist/docx/ui/index.d.ts +1 -0
- package/dist/docx/ui/index.d.ts.map +1 -1
- package/dist/docx/ui/index.mjs +55 -1
- package/dist/docx/ui/table-structure-guard.d.ts +4 -0
- package/dist/docx/ui/table-structure-guard.d.ts.map +1 -0
- package/dist/docx/write-footnote-columns.d.ts +3 -0
- package/dist/docx/write-footnote-columns.d.ts.map +1 -0
- package/dist/docx/write-notes.d.ts.map +1 -1
- package/dist/docx/write-run.d.ts.map +1 -1
- package/dist/docx/write-sections.d.ts.map +1 -1
- package/dist/index.cjs +8 -5
- package/dist/index.mjs +8 -5
- package/dist/opc/clone-part-graph.d.ts +4 -0
- package/dist/opc/clone-part-graph.d.ts.map +1 -1
- package/dist/opc/index.cjs +8 -5
- package/dist/opc/index.mjs +8 -5
- package/dist/pptx/automation/index.cjs +621 -207
- package/dist/pptx/automation/index.d.ts +3 -3
- package/dist/pptx/automation/index.mjs +5 -5
- package/dist/pptx/chunks/{index-Cn-GzYGp.d.ts → index-B4cnSPNz.d.ts} +33 -4
- package/dist/pptx/chunks/index-B4cnSPNz.d.ts.map +1 -0
- package/dist/pptx/chunks/{index-CKIUurnd.d.ts → index-BZh-IMkN.d.ts} +14 -9
- package/dist/pptx/chunks/{index-CKIUurnd.d.ts.map → index-BZh-IMkN.d.ts.map} +1 -1
- package/dist/pptx/chunks/{text-operations-BHfAm5K9.d.ts → text-operations-BLodkuXE.d.ts} +29 -12
- package/dist/pptx/chunks/text-operations-BLodkuXE.d.ts.map +1 -0
- package/dist/pptx/cli/index.cjs +622 -213
- package/dist/pptx/cli/index.d.ts +1 -1
- package/dist/pptx/cli/index.mjs +4 -4
- package/dist/pptx/converter/index.cjs +53 -36
- package/dist/pptx/converter/index.d.ts +1 -1
- package/dist/pptx/converter/index.mjs +2 -2
- package/dist/pptx/editor/render/find-replace.cjs +416 -45
- package/dist/pptx/editor/render/find-replace.d.ts +35 -4
- package/dist/pptx/editor/render/find-replace.d.ts.map +1 -1
- package/dist/pptx/editor/render/find-replace.mjs +416 -46
- package/dist/pptx/editor/render/slide-operations.cjs +87 -0
- package/dist/pptx/editor/render/slide-operations.d.ts +17 -1
- package/dist/pptx/editor/render/slide-operations.d.ts.map +1 -1
- package/dist/pptx/editor/render/slide-operations.mjs +83 -1
- package/dist/pptx/editor/render/slide-search.cjs +6 -10
- package/dist/pptx/editor/render/slide-search.d.ts +1 -1
- package/dist/pptx/editor/render/slide-search.mjs +6 -10
- package/dist/pptx/editor/render/template-editing.d.ts +1 -1
- package/dist/pptx/editor/render/template-editing.d.ts.map +1 -1
- package/dist/pptx/index.cjs +889 -237
- package/dist/pptx/index.d.ts +4 -4
- package/dist/pptx/index.mjs +5 -5
- package/dist/teams/index.cjs +672 -37
- package/dist/teams/index.mjs +672 -37
- package/dist/visio/accessibility.d.ts +10 -0
- package/dist/visio/accessibility.d.ts.map +1 -0
- package/dist/visio/cell-formula.d.ts +2 -0
- package/dist/visio/cell-formula.d.ts.map +1 -1
- package/dist/visio/connector-curve-aligned.d.ts +5 -0
- package/dist/visio/connector-curve-aligned.d.ts.map +1 -0
- package/dist/visio/connector-curve-spans.d.ts +14 -0
- package/dist/visio/connector-curve-spans.d.ts.map +1 -0
- package/dist/visio/connector-jumps.d.ts +5 -0
- package/dist/visio/connector-jumps.d.ts.map +1 -0
- package/dist/visio/connector-route-walk.d.ts +2 -1
- package/dist/visio/connector-route-walk.d.ts.map +1 -1
- package/dist/visio/edit-alt-text-scope.d.ts +5 -0
- package/dist/visio/edit-alt-text-scope.d.ts.map +1 -0
- package/dist/visio/edit-alt-text.d.ts +3 -0
- package/dist/visio/edit-alt-text.d.ts.map +1 -0
- package/dist/visio/edit-commands.d.ts +7 -2
- package/dist/visio/edit-commands.d.ts.map +1 -1
- package/dist/visio/edit-formatting-commands.d.ts +5 -0
- package/dist/visio/edit-formatting-commands.d.ts.map +1 -1
- package/dist/visio/edit-formatting-paint.d.ts.map +1 -1
- package/dist/visio/edit-formatting-scope.d.ts.map +1 -1
- package/dist/visio/edit-line-jump-cache.d.ts +4 -0
- package/dist/visio/edit-line-jump-cache.d.ts.map +1 -0
- package/dist/visio/edit-master-index.d.ts.map +1 -1
- package/dist/visio/edit-metadata-commands.d.ts +10 -2
- package/dist/visio/edit-metadata-commands.d.ts.map +1 -1
- package/dist/visio/edit-metadata.d.ts +3 -1
- package/dist/visio/edit-metadata.d.ts.map +1 -1
- package/dist/visio/edit-page-alt-text.d.ts +4 -0
- package/dist/visio/edit-page-alt-text.d.ts.map +1 -0
- package/dist/visio/edit-page-layout.d.ts.map +1 -1
- package/dist/visio/edit-page-rename.d.ts.map +1 -1
- package/dist/visio/edit-page-setup-commands.d.ts +7 -1
- package/dist/visio/edit-page-setup-commands.d.ts.map +1 -1
- package/dist/visio/edit-page-size.d.ts.map +1 -1
- package/dist/visio/edit-pages.d.ts.map +1 -1
- package/dist/visio/edit-recalculate-index.d.ts.map +1 -1
- package/dist/visio/edit-scope.d.ts.map +1 -1
- package/dist/visio/edit-shape-create.d.ts.map +1 -1
- package/dist/visio/edit-stencil-connector-write.d.ts.map +1 -1
- package/dist/visio/edit-style-admission.d.ts.map +1 -1
- package/dist/visio/edit-text.d.ts.map +1 -1
- package/dist/visio/edit.d.ts +1 -1
- package/dist/visio/edit.d.ts.map +1 -1
- package/dist/visio/index.cjs +1091 -233
- package/dist/visio/index.d.ts +2 -1
- package/dist/visio/index.d.ts.map +1 -1
- package/dist/visio/index.mjs +1091 -234
- package/dist/visio/line-jumps.d.ts +1 -5
- package/dist/visio/line-jumps.d.ts.map +1 -1
- package/dist/visio/model.d.ts +13 -0
- package/dist/visio/model.d.ts.map +1 -1
- package/dist/visio/page-layout.d.ts +11 -2
- package/dist/visio/page-layout.d.ts.map +1 -1
- package/dist/visio/parser.d.ts.map +1 -1
- package/dist/visio/shape-metadata.d.ts +6 -0
- package/dist/visio/shape-metadata.d.ts.map +1 -1
- package/dist/visio/shapes.d.ts.map +1 -1
- package/dist/visio/text-field-case.d.ts +2 -0
- package/dist/visio/text-field-case.d.ts.map +1 -0
- package/dist/visio/text-field-display.d.ts.map +1 -1
- package/dist/visio/text-field-numeric.d.ts +4 -0
- package/dist/visio/text-field-numeric.d.ts.map +1 -0
- package/dist/visio/ui/connector-preview.d.ts +1 -1
- package/dist/visio/ui/connector-preview.d.ts.map +1 -1
- package/dist/visio/ui/data-graphic-rules.d.ts +2 -0
- package/dist/visio/ui/data-graphic-rules.d.ts.map +1 -1
- package/dist/visio/ui/data-graphics.d.ts +3 -2
- package/dist/visio/ui/data-graphics.d.ts.map +1 -1
- package/dist/visio/ui/edit-commands.d.ts.map +1 -1
- package/dist/visio/ui/index.cjs +16898 -15855
- package/dist/visio/ui/index.mjs +16898 -15856
- package/dist/visio/ui/scene-details.d.ts.map +1 -1
- package/dist/visio/ui/scene-validation.d.ts.map +1 -1
- package/dist/visio/ui/snapshot-scene.d.ts +2 -1
- package/dist/visio/ui/snapshot-scene.d.ts.map +1 -1
- package/dist/visio/xml-attribute-whitespace.d.ts +5 -0
- package/dist/visio/xml-attribute-whitespace.d.ts.map +1 -0
- package/dist/xlsx/edit/index.d.ts +1 -0
- package/dist/xlsx/edit/index.d.ts.map +1 -1
- package/dist/xlsx/edit/insert-guard.d.ts.map +1 -1
- package/dist/xlsx/edit/merge.d.ts.map +1 -1
- package/dist/xlsx/edit/page-breaks.d.ts +5 -0
- package/dist/xlsx/edit/page-breaks.d.ts.map +1 -0
- package/dist/xlsx/edit/pivots.d.ts +8 -0
- package/dist/xlsx/edit/pivots.d.ts.map +1 -0
- package/dist/xlsx/edit/print-titles.d.ts +7 -0
- package/dist/xlsx/edit/print-titles.d.ts.map +1 -0
- package/dist/xlsx/edit/session.d.ts.map +1 -1
- package/dist/xlsx/edit/sheets.d.ts.map +1 -1
- package/dist/xlsx/edit/shift-formulas.d.ts.map +1 -1
- package/dist/xlsx/edit/shift-sheet.d.ts.map +1 -1
- package/dist/xlsx/edit/sparkline-ranges.d.ts +11 -0
- package/dist/xlsx/edit/sparkline-ranges.d.ts.map +1 -0
- package/dist/xlsx/edit/sparkline-xml.d.ts +13 -0
- package/dist/xlsx/edit/sparkline-xml.d.ts.map +1 -0
- package/dist/xlsx/edit/sparklines.d.ts +16 -0
- package/dist/xlsx/edit/sparklines.d.ts.map +1 -0
- package/dist/xlsx/edit/table-edits.d.ts.map +1 -1
- package/dist/xlsx/edit/tables.d.ts.map +1 -1
- package/dist/xlsx/edit/types.d.ts +22 -1
- package/dist/xlsx/edit/types.d.ts.map +1 -1
- package/dist/xlsx/formula/functions/text-regex.d.ts.map +1 -1
- package/dist/xlsx/index.cjs +3415 -1374
- package/dist/xlsx/index.d.ts +1 -0
- package/dist/xlsx/index.d.ts.map +1 -1
- package/dist/xlsx/index.mjs +3396 -1375
- package/dist/xlsx/layout/cell-view.d.ts +2 -0
- package/dist/xlsx/layout/cell-view.d.ts.map +1 -1
- package/dist/xlsx/layout/header-footer.d.ts +58 -0
- package/dist/xlsx/layout/header-footer.d.ts.map +1 -0
- package/dist/xlsx/layout/index.d.ts +5 -0
- package/dist/xlsx/layout/index.d.ts.map +1 -1
- package/dist/xlsx/layout/print-breaks.d.ts +11 -0
- package/dist/xlsx/layout/print-breaks.d.ts.map +1 -0
- package/dist/xlsx/layout/print-layout.d.ts +34 -0
- package/dist/xlsx/layout/print-layout.d.ts.map +1 -0
- package/dist/xlsx/layout/print-merges.d.ts +18 -0
- package/dist/xlsx/layout/print-merges.d.ts.map +1 -0
- package/dist/xlsx/layout/print-repeat.d.ts +12 -0
- package/dist/xlsx/layout/print-repeat.d.ts.map +1 -0
- package/dist/xlsx/layout/print-titles.d.ts +20 -0
- package/dist/xlsx/layout/print-titles.d.ts.map +1 -0
- package/dist/xlsx/layout/sparkline-data.d.ts.map +1 -1
- package/dist/xlsx/layout/sparkline-view.d.ts.map +1 -1
- package/dist/xlsx/load/index.cjs +7831 -6961
- package/dist/xlsx/load/index.mjs +7831 -6961
- package/dist/xlsx/model-pivots.d.ts +46 -0
- package/dist/xlsx/model-pivots.d.ts.map +1 -0
- package/dist/xlsx/model.d.ts +5 -0
- package/dist/xlsx/model.d.ts.map +1 -1
- package/dist/xlsx/pivot/admission.d.ts +5 -0
- package/dist/xlsx/pivot/admission.d.ts.map +1 -0
- package/dist/xlsx/pivot/aggregate.d.ts +19 -0
- package/dist/xlsx/pivot/aggregate.d.ts.map +1 -0
- package/dist/xlsx/pivot/cache-xml.d.ts +9 -0
- package/dist/xlsx/pivot/cache-xml.d.ts.map +1 -0
- package/dist/xlsx/pivot/data.d.ts +12 -0
- package/dist/xlsx/pivot/data.d.ts.map +1 -0
- package/dist/xlsx/pivot/hierarchy.d.ts +7 -0
- package/dist/xlsx/pivot/hierarchy.d.ts.map +1 -0
- package/dist/xlsx/pivot/index.d.ts +3 -0
- package/dist/xlsx/pivot/index.d.ts.map +1 -0
- package/dist/xlsx/pivot/read.d.ts +5 -0
- package/dist/xlsx/pivot/read.d.ts.map +1 -0
- package/dist/xlsx/pivot/table-xml.d.ts +5 -0
- package/dist/xlsx/pivot/table-xml.d.ts.map +1 -0
- package/dist/xlsx/pivot/write.d.ts +11 -0
- package/dist/xlsx/pivot/write.d.ts.map +1 -0
- package/dist/xlsx/read/load.d.ts.map +1 -1
- package/dist/xlsx/read/sheet-props.d.ts.map +1 -1
- package/dist/xlsx/ui/commands/i18n/index.d.ts.map +1 -1
- package/dist/xlsx/ui/commands/i18n/navigation.d.ts.map +1 -1
- package/dist/xlsx/ui/commands/i18n/pivots.d.ts +3 -0
- package/dist/xlsx/ui/commands/i18n/pivots.d.ts.map +1 -0
- package/dist/xlsx/ui/commands/i18n/print-layout.d.ts +3 -0
- package/dist/xlsx/ui/commands/i18n/print-layout.d.ts.map +1 -0
- package/dist/xlsx/ui/commands/i18n/sparklines.d.ts +3 -0
- package/dist/xlsx/ui/commands/i18n/sparklines.d.ts.map +1 -0
- package/dist/xlsx/ui/commands/i18n/tools.d.ts.map +1 -1
- package/dist/xlsx/ui/commands/page-breaks.d.ts +3 -0
- package/dist/xlsx/ui/commands/page-breaks.d.ts.map +1 -0
- package/dist/xlsx/ui/index.cjs +2451 -737
- package/dist/xlsx/ui/index.d.ts +1 -0
- package/dist/xlsx/ui/index.d.ts.map +1 -1
- package/dist/xlsx/ui/index.mjs +2451 -738
- package/dist/xlsx/write/chart-cache.d.ts +8 -0
- package/dist/xlsx/write/chart-cache.d.ts.map +1 -0
- package/dist/xlsx/write/page-setup.d.ts.map +1 -1
- package/dist/xlsx/write/save.d.ts.map +1 -1
- package/dist/xlsx/write/sheet-parts.d.ts +1 -0
- package/dist/xlsx/write/sheet-parts.d.ts.map +1 -1
- package/dist/xlsx/write/workbook-part.d.ts +1 -1
- package/dist/xlsx/write/workbook-part.d.ts.map +1 -1
- package/dist/xlsx/write/worksheet.d.ts.map +1 -1
- package/package.json +1 -1
- package/dist/pptx/chunks/index-Cn-GzYGp.d.ts.map +0 -1
- package/dist/pptx/chunks/text-operations-BHfAm5K9.d.ts.map +0 -1
package/dist/teams/index.cjs
CHANGED
|
@@ -288,9 +288,9 @@ var init_namespaces = __esm({
|
|
|
288
288
|
}
|
|
289
289
|
});
|
|
290
290
|
function parseXml(xml, options = {}) {
|
|
291
|
-
const
|
|
291
|
+
const label3 = options.label ?? "OOXML";
|
|
292
292
|
if (/<!DOCTYPE|<!ENTITY/i.test(xml))
|
|
293
|
-
throw new Error(`${
|
|
293
|
+
throw new Error(`${label3} XML with DTD or entity declarations is not supported`);
|
|
294
294
|
let parseError = "";
|
|
295
295
|
let parsed;
|
|
296
296
|
try {
|
|
@@ -301,12 +301,12 @@ function parseXml(xml, options = {}) {
|
|
|
301
301
|
}).parseFromString(xml, "application/xml");
|
|
302
302
|
} catch (error) {
|
|
303
303
|
throw new Error(
|
|
304
|
-
`Invalid ${
|
|
304
|
+
`Invalid ${label3} XML: ${error instanceof Error ? error.message : String(error)}`,
|
|
305
305
|
{ cause: error }
|
|
306
306
|
);
|
|
307
307
|
}
|
|
308
308
|
if (parseError || !parsed.documentElement)
|
|
309
|
-
throw new Error(`Invalid ${
|
|
309
|
+
throw new Error(`Invalid ${label3} XML: ${parseError || "missing root element"}`);
|
|
310
310
|
return parsed;
|
|
311
311
|
}
|
|
312
312
|
function named(element2, local, ns, lenient = true) {
|
|
@@ -940,19 +940,19 @@ var init_opc = __esm({
|
|
|
940
940
|
|
|
941
941
|
// xlsx/address.ts
|
|
942
942
|
function columnLabel(col) {
|
|
943
|
-
let
|
|
943
|
+
let label3 = "";
|
|
944
944
|
let n = col + 1;
|
|
945
945
|
while (n > 0) {
|
|
946
946
|
const rem = (n - 1) % 26;
|
|
947
|
-
|
|
947
|
+
label3 = String.fromCharCode(65 + rem) + label3;
|
|
948
948
|
n = Math.floor((n - 1) / 26);
|
|
949
949
|
}
|
|
950
|
-
return
|
|
950
|
+
return label3;
|
|
951
951
|
}
|
|
952
|
-
function columnIndex(
|
|
953
|
-
if (!/^[A-Za-z]{1,3}$/.test(
|
|
952
|
+
function columnIndex(label3) {
|
|
953
|
+
if (!/^[A-Za-z]{1,3}$/.test(label3)) return -1;
|
|
954
954
|
let n = 0;
|
|
955
|
-
for (const ch of
|
|
955
|
+
for (const ch of label3.toUpperCase()) n = n * 26 + (ch.charCodeAt(0) - 64);
|
|
956
956
|
return n - 1;
|
|
957
957
|
}
|
|
958
958
|
function parseAddress(ref) {
|
|
@@ -1006,12 +1006,13 @@ function formatRange(range) {
|
|
|
1006
1006
|
function quoteSheetName(name) {
|
|
1007
1007
|
return /^[A-Za-z_][A-Za-z0-9_.]*$/.test(name) && !parseAddress(name) ? name : `'${name.replace(/'/g, "''")}'`;
|
|
1008
1008
|
}
|
|
1009
|
-
var MAX_ROW, MAX_COL, formatAddress, cellKey;
|
|
1009
|
+
var MAX_ROW, MAX_COL, formatAddress, rangeSize, cellKey;
|
|
1010
1010
|
var init_address = __esm({
|
|
1011
1011
|
"xlsx/address.ts"() {
|
|
1012
1012
|
MAX_ROW = 1048575;
|
|
1013
1013
|
MAX_COL = 16383;
|
|
1014
1014
|
formatAddress = (address2) => `${columnLabel(address2.col)}${address2.row + 1}`;
|
|
1015
|
+
rangeSize = (range) => (range.end.row - range.start.row + 1) * (range.end.col - range.start.col + 1);
|
|
1015
1016
|
cellKey = (row2, col) => row2 * (MAX_COL + 1) + col;
|
|
1016
1017
|
}
|
|
1017
1018
|
});
|
|
@@ -2617,10 +2618,10 @@ function titleXml(context, title) {
|
|
|
2617
2618
|
function labelOptionsXml(context, options) {
|
|
2618
2619
|
return numberFormatXml(options.numberFormat) + shapePropertiesXml(context, options.spPr) + textBodyXml(context, options.txPr) + valXml("dLblPos", options.position) + valXml("showLegendKey", options.showLegendKey) + valXml("showVal", options.showValue) + valXml("showCatName", options.showCategoryName) + valXml("showSerName", options.showSeriesName) + valXml("showPercent", options.showPercent) + valXml("showBubbleSize", options.showBubbleSize) + (options.separator === void 0 ? "" : textElement("separator", options.separator));
|
|
2619
2620
|
}
|
|
2620
|
-
function labelXml(context,
|
|
2621
|
+
function labelXml(context, label3) {
|
|
2621
2622
|
return elementXml(
|
|
2622
2623
|
"dLbl",
|
|
2623
|
-
valXml("idx",
|
|
2624
|
+
valXml("idx", label3.index) + valXml("delete", label3.deleted) + layoutXml(context, label3.layout) + chartTextXml(context, label3.tx, false) + labelOptionsXml(context, label3) + raw(context, label3.extLst)
|
|
2624
2625
|
);
|
|
2625
2626
|
}
|
|
2626
2627
|
function dataLabelsXml(context, labels) {
|
|
@@ -2628,7 +2629,7 @@ function dataLabelsXml(context, labels) {
|
|
|
2628
2629
|
const leaderLines = labels.leaderLines ? elementXml("leaderLines", shapePropertiesXml(context, labels.leaderLines.spPr)) : "";
|
|
2629
2630
|
return elementXml(
|
|
2630
2631
|
"dLbls",
|
|
2631
|
-
labels.labels.map((
|
|
2632
|
+
labels.labels.map((label3) => labelXml(context, label3)).join("") + valXml("delete", labels.deleted) + labelOptionsXml(context, labels) + valXml("showLeaderLines", labels.showLeaderLines) + leaderLines + raw(context, labels.extLst)
|
|
2632
2633
|
);
|
|
2633
2634
|
}
|
|
2634
2635
|
var textElement, dataSourceXml;
|
|
@@ -2659,12 +2660,12 @@ function dataTableXml(context, table2) {
|
|
|
2659
2660
|
}
|
|
2660
2661
|
function displayUnitsXml(context, units) {
|
|
2661
2662
|
if (!units) return "";
|
|
2662
|
-
const
|
|
2663
|
+
const label3 = units.label;
|
|
2663
2664
|
return elementXml(
|
|
2664
2665
|
"dispUnits",
|
|
2665
|
-
valXml("custUnit", units.customUnit) + (units.customUnit === void 0 ? valXml("builtInUnit", units.builtInUnit) : "") + (
|
|
2666
|
+
valXml("custUnit", units.customUnit) + (units.customUnit === void 0 ? valXml("builtInUnit", units.builtInUnit) : "") + (label3 ? elementXml(
|
|
2666
2667
|
"dispUnitsLbl",
|
|
2667
|
-
layoutXml(context,
|
|
2668
|
+
layoutXml(context, label3.layout) + chartTextXml(context, label3.tx, false) + shapePropertiesXml(context, label3.spPr) + textBodyXml(context, label3.txPr)
|
|
2668
2669
|
) : "") + raw(context, units.extLst)
|
|
2669
2670
|
);
|
|
2670
2671
|
}
|
|
@@ -2875,10 +2876,10 @@ function parseDisplayUnits(context, element2) {
|
|
|
2875
2876
|
if (!element2) return void 0;
|
|
2876
2877
|
reportUnmodelled(context, element2, DISPLAY_UNITS);
|
|
2877
2878
|
const labelElement = cChild(element2, "dispUnitsLbl");
|
|
2878
|
-
let
|
|
2879
|
+
let label3;
|
|
2879
2880
|
if (labelElement) {
|
|
2880
2881
|
reportUnmodelled(context, labelElement, DISPLAY_UNITS_LABEL);
|
|
2881
|
-
|
|
2882
|
+
label3 = assignDefined(
|
|
2882
2883
|
{},
|
|
2883
2884
|
{
|
|
2884
2885
|
layout: manualLayout(labelElement),
|
|
@@ -2893,7 +2894,7 @@ function parseDisplayUnits(context, element2) {
|
|
|
2893
2894
|
{
|
|
2894
2895
|
builtInUnit: cVal(element2, "builtInUnit"),
|
|
2895
2896
|
customUnit: cNumber(context, element2, "custUnit"),
|
|
2896
|
-
label:
|
|
2897
|
+
label: label3,
|
|
2897
2898
|
extLst: extensionList(element2)
|
|
2898
2899
|
}
|
|
2899
2900
|
);
|
|
@@ -7292,10 +7293,11 @@ function usedRange(sheet) {
|
|
|
7292
7293
|
if (maxRow < 0) return void 0;
|
|
7293
7294
|
return { start: { row: minRow, col: minCol }, end: { row: maxRow, col: maxCol } };
|
|
7294
7295
|
}
|
|
7295
|
-
var getCell;
|
|
7296
|
+
var getCell, getValue;
|
|
7296
7297
|
var init_cells = __esm({
|
|
7297
7298
|
"xlsx/cells.ts"() {
|
|
7298
7299
|
getCell = (sheet, row2, col) => sheet.rows.get(row2)?.get(col);
|
|
7300
|
+
getValue = (sheet, row2, col) => getCell(sheet, row2, col)?.value ?? null;
|
|
7299
7301
|
}
|
|
7300
7302
|
});
|
|
7301
7303
|
|
|
@@ -15839,13 +15841,27 @@ var init_text_regex = __esm({
|
|
|
15839
15841
|
"REGEXEXTRACT",
|
|
15840
15842
|
C36,
|
|
15841
15843
|
"REGEXEXTRACT(text, pattern, [return_mode], [case_sensitivity])",
|
|
15842
|
-
"
|
|
15844
|
+
"Extracts the first match (0), all matches (1), or the first match\u2019s capture groups (2).",
|
|
15843
15845
|
2,
|
|
15844
15846
|
4,
|
|
15845
15847
|
(args) => {
|
|
15846
|
-
|
|
15847
|
-
|
|
15848
|
-
|
|
15848
|
+
const mode = optNum(args, 2, 0);
|
|
15849
|
+
if (mode !== 0 && mode !== 1 && mode !== 2) fail(ERR.VALUE);
|
|
15850
|
+
const regex = compile(str(args[1]), caseMode(args, 3), mode === 1);
|
|
15851
|
+
const text = str(args[0]);
|
|
15852
|
+
if (mode === 1) {
|
|
15853
|
+
const matches2 = [];
|
|
15854
|
+
for (const match3 of text.matchAll(regex)) {
|
|
15855
|
+
checkArraySize(matches2.length + 1, 1);
|
|
15856
|
+
matches2.push(match3[0]);
|
|
15857
|
+
}
|
|
15858
|
+
return matches2.length ? new Matrix(matches2.map((match3) => [match3])) : fail(ERR.NA);
|
|
15859
|
+
}
|
|
15860
|
+
const match2 = regex.exec(text);
|
|
15861
|
+
if (!match2) fail(ERR.NA);
|
|
15862
|
+
if (mode === 0) return match2[0];
|
|
15863
|
+
if (match2.length === 1) fail(ERR.VALUE);
|
|
15864
|
+
return new Matrix([match2.slice(1).map((group) => group ?? "")]);
|
|
15849
15865
|
}
|
|
15850
15866
|
),
|
|
15851
15867
|
spec(
|
|
@@ -17524,7 +17540,7 @@ function definedNamesOf(workbook) {
|
|
|
17524
17540
|
});
|
|
17525
17541
|
return names2;
|
|
17526
17542
|
}
|
|
17527
|
-
function workbookXml(workbook, sheets, activeTab, sourceXml) {
|
|
17543
|
+
function workbookXml(workbook, sheets, activeTab, sourceXml, pivotCachesXml) {
|
|
17528
17544
|
const kept = /* @__PURE__ */ new Map();
|
|
17529
17545
|
if (sourceXml) {
|
|
17530
17546
|
try {
|
|
@@ -17568,7 +17584,7 @@ function workbookXml(workbook, sheets, activeTab, sourceXml) {
|
|
|
17568
17584
|
const iterate = workbook.iterate ? ` iterate="1" iterateCount="${workbook.iterate.count}" iterateDelta="${workbook.iterate.delta}"` : "";
|
|
17569
17585
|
const owned = ["fullCalcOnLoad", "calcId", "calcMode", "iterate", "iterateCount", "iterateDelta"];
|
|
17570
17586
|
out += `<calcPr${copyAttrs(calc, owned)} calcId="191029"${mode}${iterate} fullCalcOnLoad="1"/>`;
|
|
17571
|
-
out += raw2(KEPT_TAIL);
|
|
17587
|
+
out += pivotCachesXml === void 0 ? raw2(KEPT_TAIL) : raw2(KEPT_TAIL.slice(0, 2)) + pivotCachesXml + raw2(KEPT_TAIL.slice(3));
|
|
17572
17588
|
return `${out}</workbook>`;
|
|
17573
17589
|
}
|
|
17574
17590
|
var KEPT_BEFORE_SHEETS, KEPT_AFTER_SHEETS, KEPT_TAIL, copyAttrs;
|
|
@@ -17996,6 +18012,11 @@ function readHeaderFooter(node) {
|
|
|
17996
18012
|
function readPageSetup(margins, setup, headerFooter, fitToPage) {
|
|
17997
18013
|
const page = {};
|
|
17998
18014
|
if (setup) {
|
|
18015
|
+
if (/^(1|true)$/.test(att(setup, "useFirstPageNumber") ?? "")) {
|
|
18016
|
+
page.firstPageNumber = numAttr(setup, "firstPageNumber") ?? 1;
|
|
18017
|
+
}
|
|
18018
|
+
const order = att(setup, "pageOrder");
|
|
18019
|
+
if (order === "downThenOver" || order === "overThenDown") page.pageOrder = order;
|
|
17999
18020
|
const orientation = att(setup, "orientation");
|
|
18000
18021
|
if (orientation && ORIENTATIONS.has(orientation))
|
|
18001
18022
|
page.orientation = orientation;
|
|
@@ -18493,9 +18514,9 @@ var init_gradient_preset_data = __esm({
|
|
|
18493
18514
|
var init_gradient_presets = __esm({
|
|
18494
18515
|
"drawingml/gradient-presets.ts"() {
|
|
18495
18516
|
init_gradient_preset_data();
|
|
18496
|
-
OFFICE_GRADIENT_PRESET_DATA.map(([
|
|
18517
|
+
OFFICE_GRADIENT_PRESET_DATA.map(([label3], index2) => ({
|
|
18497
18518
|
id: index2 + 1,
|
|
18498
|
-
label:
|
|
18519
|
+
label: label3
|
|
18499
18520
|
}));
|
|
18500
18521
|
}
|
|
18501
18522
|
});
|
|
@@ -18731,8 +18752,8 @@ function parseTable(xml, partName) {
|
|
|
18731
18752
|
if (id !== void 0 && Number.isInteger(id) && id >= 0) column.sourceId = id;
|
|
18732
18753
|
const fn = att(node, "totalsRowFunction");
|
|
18733
18754
|
if (fn && fn !== "none") column.totalsRowFunction = fn;
|
|
18734
|
-
const
|
|
18735
|
-
if (
|
|
18755
|
+
const label3 = att(node, "totalsRowLabel");
|
|
18756
|
+
if (label3 !== void 0) column.totalsRowLabel = label3;
|
|
18736
18757
|
const calculated = xFirst(node, "calculatedColumnFormula");
|
|
18737
18758
|
if (calculated) column.calculatedColumnFormula = stripFuturePrefixes(xText(calculated));
|
|
18738
18759
|
return column;
|
|
@@ -18814,20 +18835,28 @@ function setupXml(sheet, page) {
|
|
|
18814
18835
|
const source2 = snapshotElement(sheet, "pageSetup");
|
|
18815
18836
|
const fit = page.fitToWidth !== void 0 || page.fitToHeight !== void 0;
|
|
18816
18837
|
const pick2 = (p) => ({
|
|
18838
|
+
firstPageNumber: p.firstPageNumber,
|
|
18839
|
+
pageOrder: p.pageOrder,
|
|
18817
18840
|
orientation: p.orientation,
|
|
18818
18841
|
paperSize: p.paperSize,
|
|
18819
18842
|
scale: p.scale,
|
|
18820
18843
|
fitToWidth: p.fitToWidth,
|
|
18821
18844
|
fitToHeight: p.fitToHeight
|
|
18822
18845
|
});
|
|
18823
|
-
const modelled = fit || page.orientation !== void 0 || page.paperSize !== void 0 || page.scale !== void 0;
|
|
18846
|
+
const modelled = page.firstPageNumber !== void 0 || page.pageOrder !== void 0 || fit || page.orientation !== void 0 || page.paperSize !== void 0 || page.scale !== void 0;
|
|
18824
18847
|
if (!source2 && !modelled) return "";
|
|
18825
18848
|
if (source2) {
|
|
18826
18849
|
const before = readPageSetup(void 0, source2, void 0, fit) ?? {};
|
|
18827
18850
|
if (sameModel(pick2(before), pick2(page))) return snapshotXml(sheet, "pageSetup") ?? "";
|
|
18828
18851
|
}
|
|
18829
18852
|
const fitValues = fit ? { fitToWidth: page.fitToWidth, fitToHeight: page.fitToHeight } : {};
|
|
18853
|
+
const numbering = page.firstPageNumber !== void 0 || !source2 || readPageSetup(void 0, source2, void 0, fit)?.firstPageNumber !== void 0 ? {
|
|
18854
|
+
firstPageNumber: page.firstPageNumber,
|
|
18855
|
+
useFirstPageNumber: page.firstPageNumber !== void 0 ? true : void 0
|
|
18856
|
+
} : {};
|
|
18830
18857
|
return `<pageSetup${mergedAttrs(source2, {
|
|
18858
|
+
...numbering,
|
|
18859
|
+
pageOrder: page.pageOrder,
|
|
18831
18860
|
paperSize: page.paperSize,
|
|
18832
18861
|
scale: page.scale,
|
|
18833
18862
|
...fitValues,
|
|
@@ -18983,6 +19012,76 @@ var init_sheet_data = __esm({
|
|
|
18983
19012
|
}
|
|
18984
19013
|
});
|
|
18985
19014
|
|
|
19015
|
+
// xlsx/layout/sparkline-data.ts
|
|
19016
|
+
function resolveSparklineRange(workbook, sheet, formula) {
|
|
19017
|
+
const ref = formula.trim().replace(/^=/, "");
|
|
19018
|
+
const bang = ref.lastIndexOf("!");
|
|
19019
|
+
let target = sheet;
|
|
19020
|
+
if (bang >= 0) {
|
|
19021
|
+
const raw2 = ref.slice(0, bang);
|
|
19022
|
+
const name = /^'.*'$/.test(raw2) ? raw2.slice(1, -1).replace(/''/g, "'") : raw2;
|
|
19023
|
+
target = sheetByName(workbook, name);
|
|
19024
|
+
}
|
|
19025
|
+
const range = parseRange(ref.slice(bang + 1).replace(/\$/g, ""));
|
|
19026
|
+
return target && range ? { sheet: target, range: normalizeRange(range) } : void 0;
|
|
19027
|
+
}
|
|
19028
|
+
var init_sparkline_data = __esm({
|
|
19029
|
+
"xlsx/layout/sparkline-data.ts"() {
|
|
19030
|
+
init_address();
|
|
19031
|
+
init_workbook();
|
|
19032
|
+
}
|
|
19033
|
+
});
|
|
19034
|
+
|
|
19035
|
+
// xlsx/write/chart-cache.ts
|
|
19036
|
+
function referenceValues(workbook, sheet, ref, maxCells = MAX_CHART_CACHE_CELLS) {
|
|
19037
|
+
if (!ref) return void 0;
|
|
19038
|
+
const target = resolveSparklineRange(workbook, sheet, ref);
|
|
19039
|
+
if (!target) return void 0;
|
|
19040
|
+
const { range } = target;
|
|
19041
|
+
const count2 = rangeSize(range);
|
|
19042
|
+
if (!Number.isSafeInteger(count2) || count2 < 1 || count2 > maxCells || range.end.row > MAX_ROW || range.end.col > MAX_COL)
|
|
19043
|
+
return void 0;
|
|
19044
|
+
const values2 = [];
|
|
19045
|
+
for (let row2 = range.start.row; row2 <= range.end.row; row2++)
|
|
19046
|
+
for (let col = range.start.col; col <= range.end.col; col++)
|
|
19047
|
+
values2.push(getValue(target.sheet, row2, col));
|
|
19048
|
+
return values2;
|
|
19049
|
+
}
|
|
19050
|
+
function categoryValue(value) {
|
|
19051
|
+
if (value === null) return "";
|
|
19052
|
+
if (typeof value === "boolean") return value ? "TRUE" : "FALSE";
|
|
19053
|
+
if (typeof value === "object") return value.error;
|
|
19054
|
+
if (typeof value === "number" && !Number.isFinite(value)) return "";
|
|
19055
|
+
return value;
|
|
19056
|
+
}
|
|
19057
|
+
function chartWithCurrentCaches(workbook, sheet, chart) {
|
|
19058
|
+
return {
|
|
19059
|
+
...chart,
|
|
19060
|
+
series: chart.series.map((series) => {
|
|
19061
|
+
const values2 = referenceValues(workbook, sheet, series.valuesRef);
|
|
19062
|
+
const categories = referenceValues(workbook, sheet, series.categoriesRef);
|
|
19063
|
+
const name = referenceValues(workbook, sheet, series.nameRef, 1);
|
|
19064
|
+
return {
|
|
19065
|
+
...series,
|
|
19066
|
+
...name === void 0 ? {} : { name: String(categoryValue(name[0] ?? null)) },
|
|
19067
|
+
values: values2?.map(
|
|
19068
|
+
(value) => typeof value === "number" && Number.isFinite(value) ? value : null
|
|
19069
|
+
) ?? series.values,
|
|
19070
|
+
categories: categories?.map(categoryValue) ?? series.categories
|
|
19071
|
+
};
|
|
19072
|
+
})
|
|
19073
|
+
};
|
|
19074
|
+
}
|
|
19075
|
+
var MAX_CHART_CACHE_CELLS;
|
|
19076
|
+
var init_chart_cache = __esm({
|
|
19077
|
+
"xlsx/write/chart-cache.ts"() {
|
|
19078
|
+
init_address();
|
|
19079
|
+
init_cells();
|
|
19080
|
+
init_sparkline_data();
|
|
19081
|
+
MAX_CHART_CACHE_CELLS = 1e4;
|
|
19082
|
+
}
|
|
19083
|
+
});
|
|
19084
|
+
|
|
18986
19085
|
// xlsx/write/vml-ids.ts
|
|
18987
19086
|
function vmlIdmapBlocks(xml) {
|
|
18988
19087
|
const blocks = [];
|
|
@@ -19474,7 +19573,10 @@ function writeSheetDrawing(ctx, sheet, partName, rels, sourceDrawing) {
|
|
|
19474
19573
|
}
|
|
19475
19574
|
}
|
|
19476
19575
|
const target = sourceDrawing && !writer.has(sourceDrawing) ? sourceDrawing : writer.uniqueName((n) => `xl/drawings/drawing${n}.xml`, ctx.reserved);
|
|
19477
|
-
|
|
19576
|
+
const drawings = sheet.drawings.map(
|
|
19577
|
+
(object) => object.kind === "chart" && (!object.partName || !source2?.has(object.partName)) ? chartWithCurrentCaches(ctx.workbook, sheet, object) : object
|
|
19578
|
+
);
|
|
19579
|
+
if (!writeDrawing(writer, target, drawings, sourceDrawing)) return "";
|
|
19478
19580
|
return `<drawing r:id="${rels.add(RELATIONSHIP_TYPES.drawing, relativeTarget(partName, target))}"/>`;
|
|
19479
19581
|
}
|
|
19480
19582
|
var init_sheet_parts = __esm({
|
|
@@ -19484,6 +19586,7 @@ var init_sheet_parts = __esm({
|
|
|
19484
19586
|
init_drawing3();
|
|
19485
19587
|
init_package2();
|
|
19486
19588
|
init_tables();
|
|
19589
|
+
init_chart_cache();
|
|
19487
19590
|
init_comments2();
|
|
19488
19591
|
init_drawing();
|
|
19489
19592
|
init_snapshot();
|
|
@@ -19703,6 +19806,8 @@ function writeWorksheet(ctx, sheet, index2, partName) {
|
|
|
19703
19806
|
const ids = sourceRelIds(source2, sheet.partName);
|
|
19704
19807
|
for (const [id, rel] of source2.rels(sheet.partName)) {
|
|
19705
19808
|
const target = source2.target(sheet.partName, rel);
|
|
19809
|
+
if (rel.type === RELATIONSHIP_TYPES.pivotTable && target && sheet.preserved.get("source:pivotTables")?.includes(target))
|
|
19810
|
+
continue;
|
|
19706
19811
|
if (rel.type === RELATIONSHIP_TYPES.drawing && id === ids.drawing) sourceDrawing = target;
|
|
19707
19812
|
if (REGENERATED.has(rel.type) || rel.type === RELATIONSHIP_TYPES.vmlDrawing && id === ids.legacy)
|
|
19708
19813
|
continue;
|
|
@@ -19757,6 +19862,7 @@ function writeWorksheet(ctx, sheet, index2, partName) {
|
|
|
19757
19862
|
blocks.set("drawing", writeSheetDrawing(ctx, sheet, partName, rels, sourceDrawing));
|
|
19758
19863
|
blocks.set("legacyDrawing", writeComments(ctx, sheet, index2, partName, rels));
|
|
19759
19864
|
blocks.set("tableParts", tableParts);
|
|
19865
|
+
ctx.pivots?.writeSheet(writer, sheet, partName, rels);
|
|
19760
19866
|
blocks.set("extLst", conditionalExtensionsXml(sheet));
|
|
19761
19867
|
for (const [key, list] of sheet.preserved) {
|
|
19762
19868
|
if (key.startsWith("source:") || !ORDER2.includes(key) || (blocks.get(key) ?? "") !== "")
|
|
@@ -19842,6 +19948,532 @@ var init_worksheet2 = __esm({
|
|
|
19842
19948
|
}
|
|
19843
19949
|
});
|
|
19844
19950
|
|
|
19951
|
+
// xlsx/edit/sparkline-ranges.ts
|
|
19952
|
+
function checkedSparklineRange(raw2) {
|
|
19953
|
+
const range = normalizeRange(raw2);
|
|
19954
|
+
for (const point of [range.start, range.end])
|
|
19955
|
+
if (!Number.isInteger(point.row) || !Number.isInteger(point.col) || point.row < 0 || point.col < 0 || point.row > MAX_ROW || point.col > MAX_COL)
|
|
19956
|
+
throw new RangeError("The reference is not valid.");
|
|
19957
|
+
return range;
|
|
19958
|
+
}
|
|
19959
|
+
function sparklineDataRange(workbook, sheet, source2) {
|
|
19960
|
+
let ast;
|
|
19961
|
+
try {
|
|
19962
|
+
ast = parseFormula(source2.trim().replace(/^=/, ""));
|
|
19963
|
+
} catch {
|
|
19964
|
+
throw new Error("The reference is not valid.");
|
|
19965
|
+
}
|
|
19966
|
+
if (ast.type !== "ref" || !ast.ref || !["cell", "area"].includes(ast.ref.kind) || ast.prefix?.book || ast.prefix?.sheet2 || ast.spill)
|
|
19967
|
+
throw new Error("The reference is not valid.");
|
|
19968
|
+
const index2 = ast.prefix ? workbook.sheets.findIndex((ws) => ws.name.toLowerCase() === ast.prefix.sheet.toLowerCase()) : sheet;
|
|
19969
|
+
if (!workbook.sheets[index2]) throw new Error("The reference is not valid.");
|
|
19970
|
+
return { sheet: index2, range: checkedSparklineRange({ start: ast.ref.start, end: ast.ref.end }) };
|
|
19971
|
+
}
|
|
19972
|
+
var init_sparkline_ranges = __esm({
|
|
19973
|
+
"xlsx/edit/sparkline-ranges.ts"() {
|
|
19974
|
+
init_address();
|
|
19975
|
+
init_parser();
|
|
19976
|
+
}
|
|
19977
|
+
});
|
|
19978
|
+
|
|
19979
|
+
// xlsx/pivot/data.ts
|
|
19980
|
+
function pivotValueKey(value) {
|
|
19981
|
+
return value === null || value === "" ? "blank" : isCellError(value) ? `error:${value.error}` : `${typeof value}:${String(value).toLowerCase()}`;
|
|
19982
|
+
}
|
|
19983
|
+
function pivotItems(pivot, field) {
|
|
19984
|
+
const index2 = pivot.fields.indexOf(field);
|
|
19985
|
+
const items = /* @__PURE__ */ new Map();
|
|
19986
|
+
for (const record of pivot.records) {
|
|
19987
|
+
const value = record[index2] ?? null;
|
|
19988
|
+
const key = pivotValueKey(value);
|
|
19989
|
+
if (!items.has(key)) items.set(key, value);
|
|
19990
|
+
}
|
|
19991
|
+
const rank3 = (value) => value === null || value === "" ? 4 : isCellError(value) ? 3 : typeof value === "boolean" ? 2 : typeof value === "string" ? 1 : 0;
|
|
19992
|
+
return [...items.values()].sort(
|
|
19993
|
+
(a2, b) => rank3(a2) - rank3(b) || (typeof a2 === "number" && typeof b === "number" ? a2 - b : String(pivotItemLabel(a2)).localeCompare(String(pivotItemLabel(b)), "en", {
|
|
19994
|
+
sensitivity: "base",
|
|
19995
|
+
numeric: true
|
|
19996
|
+
}))
|
|
19997
|
+
);
|
|
19998
|
+
}
|
|
19999
|
+
function pivotItemLabel(value) {
|
|
20000
|
+
if (value === null || value === "") return "(blank)";
|
|
20001
|
+
if (typeof value === "boolean") return value ? "TRUE" : "FALSE";
|
|
20002
|
+
return isCellError(value) ? value.error : value;
|
|
20003
|
+
}
|
|
20004
|
+
function validatePivotFields(pivot) {
|
|
20005
|
+
const used = [
|
|
20006
|
+
pivot.rowField,
|
|
20007
|
+
...pivot.secondRowField ? [pivot.secondRowField] : [],
|
|
20008
|
+
...pivot.columnField ? [pivot.columnField] : [],
|
|
20009
|
+
pivot.valueField
|
|
20010
|
+
];
|
|
20011
|
+
if (pivot.layout !== void 0 && !["tabular", "compact", "outline"].includes(pivot.layout) || pivot.subtotalPosition !== void 0 && !["top", "bottom"].includes(pivot.subtotalPosition) || !PIVOT_AGGREGATES.includes(pivot.aggregate) || used.some((field) => !pivot.fields.includes(field)) || new Set([pivot.rowField, pivot.secondRowField, pivot.columnField].filter(Boolean)).size !== [pivot.rowField, pivot.secondRowField, pivot.columnField].filter(Boolean).length || pivot.subtotals !== void 0 && typeof pivot.subtotals !== "boolean" || pivot.repeatLabels !== void 0 && typeof pivot.repeatLabels !== "boolean")
|
|
20012
|
+
throw new Error("Choose valid PivotTable fields; row and column fields must differ.");
|
|
20013
|
+
}
|
|
20014
|
+
var PIVOT_AGGREGATES;
|
|
20015
|
+
var init_data = __esm({
|
|
20016
|
+
"xlsx/pivot/data.ts"() {
|
|
20017
|
+
init_model();
|
|
20018
|
+
PIVOT_AGGREGATES = ["sum", "count", "average", "min", "max"];
|
|
20019
|
+
}
|
|
20020
|
+
});
|
|
20021
|
+
|
|
20022
|
+
// xlsx/pivot/cache-xml.ts
|
|
20023
|
+
function pivotCacheData(pivot) {
|
|
20024
|
+
const items = pivot.fields.map(() => []);
|
|
20025
|
+
const indices = pivot.fields.map(() => /* @__PURE__ */ new Map());
|
|
20026
|
+
for (const record of pivot.records)
|
|
20027
|
+
pivot.fields.forEach((_field, index2) => {
|
|
20028
|
+
const value = record[index2] ?? null;
|
|
20029
|
+
const key = pivotValueKey(value);
|
|
20030
|
+
if (!indices[index2].has(key)) {
|
|
20031
|
+
indices[index2].set(key, items[index2].length);
|
|
20032
|
+
items[index2].push(value);
|
|
20033
|
+
}
|
|
20034
|
+
});
|
|
20035
|
+
return { items, indices };
|
|
20036
|
+
}
|
|
20037
|
+
function valueXml(value) {
|
|
20038
|
+
if (value === null || value === "") return "<m/>";
|
|
20039
|
+
if (isCellError(value)) return `<e${attrs({ v: value.error })}/>`;
|
|
20040
|
+
if (typeof value === "string") return `<s${attrs({ v: encodeEscapes(value) })}/>`;
|
|
20041
|
+
if (typeof value === "boolean") return `<b v="${value ? 1 : 0}"/>`;
|
|
20042
|
+
if (!Number.isFinite(value)) throw new Error("The PivotTable cache contains an invalid value.");
|
|
20043
|
+
return `<n v="${value}"/>`;
|
|
20044
|
+
}
|
|
20045
|
+
function pivotCacheDefinitionXml(pivot, workbook, data, recordRel) {
|
|
20046
|
+
const source2 = sparklineDataRange(workbook, 0, pivot.source);
|
|
20047
|
+
const fields = pivot.fields.map((name, index2) => {
|
|
20048
|
+
const items = data.items[index2];
|
|
20049
|
+
const types = new Set(
|
|
20050
|
+
items.map((value) => value === null || value === "" ? "blank" : typeof value)
|
|
20051
|
+
);
|
|
20052
|
+
const nums = items.filter((value) => typeof value === "number");
|
|
20053
|
+
const text = items.some((item) => item !== null && item !== "" && typeof item !== "number");
|
|
20054
|
+
return `<cacheField${attrs({ name: encodeEscapes(name), numFmtId: 0 })}><sharedItems${attrs({ count: items.length, containsString: !nums.length || text, containsNumber: !!nums.length, containsInteger: nums.length > 0 && nums.every(Number.isInteger), containsBlank: types.has("blank"), containsMixedTypes: nums.length > 0 && text, containsSemiMixedTypes: !nums.length || types.size > 1 })}>${items.map(valueXml).join("")}</sharedItems></cacheField>`;
|
|
20055
|
+
}).join("");
|
|
20056
|
+
return `${XML_HEADER}<pivotCacheDefinition xmlns="${NS.x}" xmlns:r="${NS.r}" r:id="${recordRel}" createdVersion="6" refreshedVersion="6" minRefreshableVersion="3" recordCount="${pivot.records.length}"><cacheSource type="worksheet"><worksheetSource${attrs({ ref: formatRange(source2.range), sheet: workbook.sheets[source2.sheet].name })}/></cacheSource><cacheFields count="${pivot.fields.length}">${fields}</cacheFields></pivotCacheDefinition>`;
|
|
20057
|
+
}
|
|
20058
|
+
function pivotCacheRecordsXml(pivot, data) {
|
|
20059
|
+
const records = pivot.records.map(
|
|
20060
|
+
(record) => `<r>${pivot.fields.map((_field, index2) => `<x v="${data.indices[index2].get(pivotValueKey(record[index2] ?? null))}"/>`).join("")}</r>`
|
|
20061
|
+
).join("");
|
|
20062
|
+
return `${XML_HEADER}<pivotCacheRecords xmlns="${NS.x}" count="${pivot.records.length}">${records}</pivotCacheRecords>`;
|
|
20063
|
+
}
|
|
20064
|
+
var init_cache_xml = __esm({
|
|
20065
|
+
"xlsx/pivot/cache-xml.ts"() {
|
|
20066
|
+
init_xml2();
|
|
20067
|
+
init_model();
|
|
20068
|
+
init_address();
|
|
20069
|
+
init_sparkline_ranges();
|
|
20070
|
+
init_xml_out();
|
|
20071
|
+
init_data();
|
|
20072
|
+
}
|
|
20073
|
+
});
|
|
20074
|
+
|
|
20075
|
+
// xlsx/pivot/hierarchy.ts
|
|
20076
|
+
function hierarchicalPivotGrid(pivot, aggregate3) {
|
|
20077
|
+
const rowItems = pivotItems(pivot, pivot.rowField);
|
|
20078
|
+
const secondRowItems = pivotItems(pivot, pivot.secondRowField);
|
|
20079
|
+
const columnItems = pivot.columnField ? pivotItems(pivot, pivot.columnField) : [];
|
|
20080
|
+
const outerField = pivot.fields.indexOf(pivot.rowField);
|
|
20081
|
+
const innerField = pivot.fields.indexOf(pivot.secondRowField);
|
|
20082
|
+
const columnField = pivot.columnField ? pivot.fields.indexOf(pivot.columnField) : -1;
|
|
20083
|
+
const valueField = pivot.fields.indexOf(pivot.valueField);
|
|
20084
|
+
const layout2 = pivot.layout ?? "tabular";
|
|
20085
|
+
const compact = layout2 === "compact";
|
|
20086
|
+
const top = layout2 !== "tabular" && pivot.subtotals !== false && (pivot.subtotalPosition ?? "top") === "top";
|
|
20087
|
+
const bottom = pivot.subtotals !== false && !top;
|
|
20088
|
+
const rowLabelColumns = compact ? 1 : 2;
|
|
20089
|
+
const groups = /* @__PURE__ */ new Map();
|
|
20090
|
+
const details = /* @__PURE__ */ new Map();
|
|
20091
|
+
const children2 = /* @__PURE__ */ new Map();
|
|
20092
|
+
const innerIndices = new Map(secondRowItems.map((item, index2) => [pivotValueKey(item), index2]));
|
|
20093
|
+
const buckets = /* @__PURE__ */ new Map();
|
|
20094
|
+
const collect = (map, key, record) => {
|
|
20095
|
+
const list = map.get(key);
|
|
20096
|
+
if (list) list.push(record);
|
|
20097
|
+
else map.set(key, [record]);
|
|
20098
|
+
};
|
|
20099
|
+
for (const record of pivot.records) {
|
|
20100
|
+
const outer = pivotValueKey(record[outerField] ?? null);
|
|
20101
|
+
const inner = pivotValueKey(record[innerField] ?? null);
|
|
20102
|
+
collect(groups, outer, record);
|
|
20103
|
+
collect(details, JSON.stringify([outer, inner]), record);
|
|
20104
|
+
if (!children2.has(outer)) children2.set(outer, /* @__PURE__ */ new Set());
|
|
20105
|
+
children2.get(outer).add(inner);
|
|
20106
|
+
if (pivot.columnField) {
|
|
20107
|
+
const column = pivotValueKey(record[columnField] ?? null);
|
|
20108
|
+
for (const key of [[], [outer], [outer, inner]])
|
|
20109
|
+
collect(buckets, JSON.stringify([...key, column]), record);
|
|
20110
|
+
}
|
|
20111
|
+
}
|
|
20112
|
+
const rows = details.size + rowItems.length * (Number(layout2 !== "tabular") + Number(bottom)) + 3;
|
|
20113
|
+
if (rows * (columnItems.length + 3) > 1e6)
|
|
20114
|
+
throw new Error("The PivotTable result is too large.");
|
|
20115
|
+
const labels = compact ? ["Row Labels"] : [pivot.rowField, pivot.secondRowField];
|
|
20116
|
+
const values2 = pivot.columnField ? [
|
|
20117
|
+
[
|
|
20118
|
+
pivot.valueCaption,
|
|
20119
|
+
...compact ? [] : [null],
|
|
20120
|
+
compact ? "Column Labels" : pivot.columnField,
|
|
20121
|
+
...columnItems.slice(1).map(() => null),
|
|
20122
|
+
null
|
|
20123
|
+
],
|
|
20124
|
+
[...labels, ...columnItems.map(label2), "Grand Total"]
|
|
20125
|
+
] : [[...labels, pivot.valueCaption]];
|
|
20126
|
+
const indents = values2.map(() => 0);
|
|
20127
|
+
const rowEntries = [];
|
|
20128
|
+
const append = (labels2, numbers4, entry3, indent = 0) => {
|
|
20129
|
+
values2.push([...labels2, ...numbers4]);
|
|
20130
|
+
rowEntries.push(entry3);
|
|
20131
|
+
indents.push(indent);
|
|
20132
|
+
};
|
|
20133
|
+
const numbers3 = (keys, records) => [
|
|
20134
|
+
...columnItems.map(
|
|
20135
|
+
(column) => aggregate3(
|
|
20136
|
+
buckets.get(JSON.stringify([...keys, pivotValueKey(column)])) ?? [],
|
|
20137
|
+
valueField,
|
|
20138
|
+
pivot.aggregate
|
|
20139
|
+
)
|
|
20140
|
+
),
|
|
20141
|
+
aggregate3(records, valueField, pivot.aggregate)
|
|
20142
|
+
];
|
|
20143
|
+
rowItems.forEach((outer, outerIndex) => {
|
|
20144
|
+
const key = pivotValueKey(outer);
|
|
20145
|
+
if (layout2 !== "tabular")
|
|
20146
|
+
append(
|
|
20147
|
+
[label2(outer), ...compact ? [] : [null]],
|
|
20148
|
+
top ? numbers3([key], groups.get(key) ?? []) : Array(columnItems.length + 1).fill(null),
|
|
20149
|
+
{ indices: [outerIndex] }
|
|
20150
|
+
);
|
|
20151
|
+
let first2 = true;
|
|
20152
|
+
[...children2.get(key)].sort((a2, b) => innerIndices.get(a2) - innerIndices.get(b)).forEach((innerKey) => {
|
|
20153
|
+
const innerIndex = innerIndices.get(innerKey);
|
|
20154
|
+
const inner = secondRowItems[innerIndex];
|
|
20155
|
+
const keys = [key, innerKey];
|
|
20156
|
+
const records = details.get(JSON.stringify(keys));
|
|
20157
|
+
if (!records) return;
|
|
20158
|
+
append(
|
|
20159
|
+
compact ? [label2(inner)] : [
|
|
20160
|
+
pivot.repeatLabels || layout2 === "tabular" && first2 ? label2(outer) : null,
|
|
20161
|
+
label2(inner)
|
|
20162
|
+
],
|
|
20163
|
+
numbers3(keys, records),
|
|
20164
|
+
{ indices: [outerIndex, innerIndex] },
|
|
20165
|
+
compact ? 1 : 0
|
|
20166
|
+
);
|
|
20167
|
+
first2 = false;
|
|
20168
|
+
});
|
|
20169
|
+
if (bottom) {
|
|
20170
|
+
const caption = String(label2(outer));
|
|
20171
|
+
append(
|
|
20172
|
+
[`${caption} Total`, ...compact ? [] : [null]],
|
|
20173
|
+
numbers3([key], groups.get(key) ?? []),
|
|
20174
|
+
{ indices: [outerIndex], type: "default" }
|
|
20175
|
+
);
|
|
20176
|
+
}
|
|
20177
|
+
});
|
|
20178
|
+
append(["Grand Total", ...compact ? [] : [null]], numbers3([], pivot.records), {
|
|
20179
|
+
indices: [0],
|
|
20180
|
+
type: "grand"
|
|
20181
|
+
});
|
|
20182
|
+
return {
|
|
20183
|
+
values: values2,
|
|
20184
|
+
rowItems,
|
|
20185
|
+
secondRowItems,
|
|
20186
|
+
columnItems,
|
|
20187
|
+
rowEntries,
|
|
20188
|
+
firstDataRow: pivot.columnField ? 2 : 1,
|
|
20189
|
+
rowLabelColumns,
|
|
20190
|
+
indents
|
|
20191
|
+
};
|
|
20192
|
+
}
|
|
20193
|
+
var label2;
|
|
20194
|
+
var init_hierarchy2 = __esm({
|
|
20195
|
+
"xlsx/pivot/hierarchy.ts"() {
|
|
20196
|
+
init_data();
|
|
20197
|
+
label2 = pivotItemLabel;
|
|
20198
|
+
}
|
|
20199
|
+
});
|
|
20200
|
+
|
|
20201
|
+
// xlsx/pivot/aggregate.ts
|
|
20202
|
+
function aggregate2(records, field, type) {
|
|
20203
|
+
if (!records.length) return null;
|
|
20204
|
+
const values2 = records.map((record) => record[field] ?? null);
|
|
20205
|
+
if (type === "count") return values2.filter((value) => value !== null && value !== "").length;
|
|
20206
|
+
const error = values2.find(isCellError);
|
|
20207
|
+
if (error) return error;
|
|
20208
|
+
const numbers3 = values2.filter((value) => typeof value === "number");
|
|
20209
|
+
if (!numbers3.length) return type === "average" ? { error: "#DIV/0!" } : 0;
|
|
20210
|
+
if (type === "min") return numbers3.reduce((a2, b) => Math.min(a2, b));
|
|
20211
|
+
if (type === "max") return numbers3.reduce((a2, b) => Math.max(a2, b));
|
|
20212
|
+
const sum2 = numbers3.reduce((total2, value) => total2 + value, 0);
|
|
20213
|
+
return type === "average" ? sum2 / numbers3.length : sum2;
|
|
20214
|
+
}
|
|
20215
|
+
function pivotGrid(pivot) {
|
|
20216
|
+
validatePivotFields(pivot);
|
|
20217
|
+
if (pivot.secondRowField) return hierarchicalPivotGrid(pivot, aggregate2);
|
|
20218
|
+
const rowItems = pivotItems(pivot, pivot.rowField);
|
|
20219
|
+
const columnItems = pivot.columnField ? pivotItems(pivot, pivot.columnField) : [];
|
|
20220
|
+
if ((rowItems.length + 3) * (columnItems.length + 2) > 1e6)
|
|
20221
|
+
throw new Error("The PivotTable result is too large.");
|
|
20222
|
+
const rowField = pivot.fields.indexOf(pivot.rowField);
|
|
20223
|
+
const colField = pivot.columnField ? pivot.fields.indexOf(pivot.columnField) : -1;
|
|
20224
|
+
const valueField = pivot.fields.indexOf(pivot.valueField);
|
|
20225
|
+
const groups = /* @__PURE__ */ new Map();
|
|
20226
|
+
const cells2 = /* @__PURE__ */ new Map();
|
|
20227
|
+
const columns = /* @__PURE__ */ new Map();
|
|
20228
|
+
const collect = (map, key, record) => {
|
|
20229
|
+
const found = map.get(key);
|
|
20230
|
+
if (found) found.push(record);
|
|
20231
|
+
else map.set(key, [record]);
|
|
20232
|
+
};
|
|
20233
|
+
for (const record of pivot.records) {
|
|
20234
|
+
const key = pivotValueKey(record[rowField] ?? null);
|
|
20235
|
+
collect(groups, key, record);
|
|
20236
|
+
if (pivot.columnField) {
|
|
20237
|
+
const col = pivotValueKey(record[colField] ?? null);
|
|
20238
|
+
collect(columns, col, record);
|
|
20239
|
+
collect(cells2, JSON.stringify([key, col]), record);
|
|
20240
|
+
}
|
|
20241
|
+
}
|
|
20242
|
+
const label3 = pivotItemLabel;
|
|
20243
|
+
const values2 = pivot.columnField ? [
|
|
20244
|
+
[
|
|
20245
|
+
pivot.valueCaption,
|
|
20246
|
+
pivot.layout === "compact" ? "Column Labels" : pivot.columnField,
|
|
20247
|
+
...columnItems.slice(1).map(() => null),
|
|
20248
|
+
null
|
|
20249
|
+
],
|
|
20250
|
+
[
|
|
20251
|
+
pivot.layout === "compact" ? "Row Labels" : pivot.rowField,
|
|
20252
|
+
...columnItems.map(label3),
|
|
20253
|
+
"Grand Total"
|
|
20254
|
+
]
|
|
20255
|
+
] : [[pivot.layout === "compact" ? "Row Labels" : pivot.rowField, pivot.valueCaption]];
|
|
20256
|
+
for (const row2 of rowItems) {
|
|
20257
|
+
const records = groups.get(pivotValueKey(row2)) ?? [];
|
|
20258
|
+
values2.push([
|
|
20259
|
+
label3(row2),
|
|
20260
|
+
...columnItems.map(
|
|
20261
|
+
(col) => aggregate2(
|
|
20262
|
+
cells2.get(JSON.stringify([pivotValueKey(row2), pivotValueKey(col)])) ?? [],
|
|
20263
|
+
valueField,
|
|
20264
|
+
pivot.aggregate
|
|
20265
|
+
)
|
|
20266
|
+
),
|
|
20267
|
+
aggregate2(records, valueField, pivot.aggregate)
|
|
20268
|
+
]);
|
|
20269
|
+
}
|
|
20270
|
+
values2.push([
|
|
20271
|
+
"Grand Total",
|
|
20272
|
+
...columnItems.map(
|
|
20273
|
+
(col) => aggregate2(columns.get(pivotValueKey(col)) ?? [], valueField, pivot.aggregate)
|
|
20274
|
+
),
|
|
20275
|
+
aggregate2(pivot.records, valueField, pivot.aggregate)
|
|
20276
|
+
]);
|
|
20277
|
+
return { values: values2, rowItems, columnItems, firstDataRow: pivot.columnField ? 2 : 1 };
|
|
20278
|
+
}
|
|
20279
|
+
var init_aggregate = __esm({
|
|
20280
|
+
"xlsx/pivot/aggregate.ts"() {
|
|
20281
|
+
init_model();
|
|
20282
|
+
init_data();
|
|
20283
|
+
init_hierarchy2();
|
|
20284
|
+
}
|
|
20285
|
+
});
|
|
20286
|
+
|
|
20287
|
+
// xlsx/pivot/table-xml.ts
|
|
20288
|
+
function pivotTableXml(pivot, cacheId, cache2) {
|
|
20289
|
+
const grid = pivotGrid(pivot);
|
|
20290
|
+
const row2 = pivot.fields.indexOf(pivot.rowField);
|
|
20291
|
+
const second = pivot.secondRowField ? pivot.fields.indexOf(pivot.secondRowField) : -1;
|
|
20292
|
+
const col = pivot.columnField ? pivot.fields.indexOf(pivot.columnField) : -1;
|
|
20293
|
+
const value = pivot.fields.indexOf(pivot.valueField);
|
|
20294
|
+
const compact = pivot.layout === "compact";
|
|
20295
|
+
const outline = pivot.layout === "compact" || pivot.layout === "outline";
|
|
20296
|
+
const top = (pivot.subtotalPosition ?? (outline ? "top" : "bottom")) === "top";
|
|
20297
|
+
const fields = pivot.fields.map((_field, index2) => {
|
|
20298
|
+
const items2 = index2 === row2 ? grid.rowItems : index2 === second ? grid.secondRowItems : index2 === col ? grid.columnItems : void 0;
|
|
20299
|
+
const subtotal = !(index2 === row2 && pivot.subtotals === false);
|
|
20300
|
+
const repeated = pivot.repeatLabels && (index2 === row2 || index2 === second) ? '<extLst><ext uri="{2946ED86-A175-432a-8AC1-64E0C546D7DE}"><x14:pivotField xmlns:x14="http://schemas.microsoft.com/office/spreadsheetml/2009/9/main" fillDownLabels="1"/></ext></extLst>' : "";
|
|
20301
|
+
return `<pivotField${attrs({ axis: index2 === row2 || index2 === second ? "axisRow" : index2 === col ? "axisCol" : void 0, dataField: index2 === value ? true : void 0, compact, outline, showAll: false, subtotalTop: index2 === row2 ? top : void 0, defaultSubtotal: subtotal ? void 0 : false })}>${items2 ? `<items count="${items2.length + Number(subtotal)}">${items2.map((item) => `<item x="${cache2.indices[index2].get(pivotValueKey(item))}"/>`).join("")}${subtotal ? '<item t="default"/>' : ""}</items>` : ""}${repeated}</pivotField>`;
|
|
20302
|
+
}).join("");
|
|
20303
|
+
const items = (count2) => Array.from({ length: count2 }, (_v, i) => `<i><x v="${i}"/></i>`).join("") + '<i t="grand"><x/></i>';
|
|
20304
|
+
const header = grid.firstDataRow - 1;
|
|
20305
|
+
const rowIndices = [row2, ...second >= 0 ? [second] : []];
|
|
20306
|
+
let previous = [];
|
|
20307
|
+
const rowItems = grid.rowEntries?.map((entry3) => {
|
|
20308
|
+
let prefix = 0;
|
|
20309
|
+
if (!entry3.type)
|
|
20310
|
+
while (prefix < entry3.indices.length - 1 && entry3.indices[prefix] === previous[prefix])
|
|
20311
|
+
prefix++;
|
|
20312
|
+
previous = entry3.type ? [] : entry3.indices;
|
|
20313
|
+
return `<i${attrs({ t: entry3.type, r: prefix || void 0 })}>${entry3.indices.slice(prefix).map((index2) => `<x${attrs({ v: index2 || void 0 })}/>`).join("")}</i>`;
|
|
20314
|
+
}).join("") ?? items(grid.rowItems.length);
|
|
20315
|
+
let body = `<location${attrs({ ref: formatRange(pivot.location), firstHeaderRow: header, firstDataRow: grid.firstDataRow, firstDataCol: grid.rowLabelColumns ?? 1 })}/><pivotFields count="${pivot.fields.length}">${fields}</pivotFields><rowFields count="${rowIndices.length}">${rowIndices.map((index2) => `<field x="${index2}"/>`).join("")}</rowFields><rowItems count="${grid.rowEntries?.length ?? grid.rowItems.length + 1}">${rowItems}</rowItems>`;
|
|
20316
|
+
if (col >= 0)
|
|
20317
|
+
body += `<colFields count="1"><field x="${col}"/></colFields><colItems count="${grid.columnItems.length + 1}">${items(grid.columnItems.length)}</colItems>`;
|
|
20318
|
+
else body += '<colItems count="1"><i><x/></i></colItems>';
|
|
20319
|
+
body += `<dataFields count="1"><dataField${attrs({ name: encodeEscapes(pivot.valueCaption), fld: value, subtotal: pivot.aggregate, baseField: 0, baseItem: 0 })}/></dataFields>`;
|
|
20320
|
+
const doc = parseXml(
|
|
20321
|
+
pivot.sourceXml ?? `<pivotTableDefinition xmlns="${NS.x}" dataCaption="Values" updatedVersion="6" minRefreshableVersion="3" createdVersion="6"><pivotTableStyleInfo name="PivotStyleLight16" showRowHeaders="1" showColHeaders="1" showRowStripes="0" showColStripes="0" showLastColumn="1"/></pivotTableDefinition>`
|
|
20322
|
+
);
|
|
20323
|
+
const root = doc.documentElement;
|
|
20324
|
+
root.setAttribute("name", pivot.name);
|
|
20325
|
+
root.setAttribute("cacheId", String(cacheId));
|
|
20326
|
+
root.setAttribute("compact", compact ? "1" : "0");
|
|
20327
|
+
root.setAttribute("compactData", compact ? "1" : "0");
|
|
20328
|
+
root.setAttribute("outline", outline ? "1" : "0");
|
|
20329
|
+
root.setAttribute("outlineData", outline ? "1" : "0");
|
|
20330
|
+
if (compact) root.setAttribute("indent", "0");
|
|
20331
|
+
root.setAttribute("rowGrandTotals", "1");
|
|
20332
|
+
root.setAttribute("colGrandTotals", "1");
|
|
20333
|
+
for (const extension of elements(
|
|
20334
|
+
first(root, "extLst", NS.x) ?? parseXml("<root/>").documentElement
|
|
20335
|
+
)) {
|
|
20336
|
+
const definition = first(
|
|
20337
|
+
extension,
|
|
20338
|
+
"pivotTableDefinition",
|
|
20339
|
+
"http://schemas.microsoft.com/office/spreadsheetml/2009/9/main"
|
|
20340
|
+
);
|
|
20341
|
+
if (definition?.hasAttribute("fillDownLabelsDefault"))
|
|
20342
|
+
definition.setAttribute("fillDownLabelsDefault", pivot.repeatLabels ? "1" : "0");
|
|
20343
|
+
}
|
|
20344
|
+
const replaced = /* @__PURE__ */ new Set([
|
|
20345
|
+
"location",
|
|
20346
|
+
"pivotFields",
|
|
20347
|
+
"rowFields",
|
|
20348
|
+
"rowItems",
|
|
20349
|
+
"colFields",
|
|
20350
|
+
"colItems",
|
|
20351
|
+
"dataFields"
|
|
20352
|
+
]);
|
|
20353
|
+
for (const child3 of elements(root)) if (replaced.has(child3.localName)) root.removeChild(child3);
|
|
20354
|
+
const replacement = parseXml(`<root xmlns="${NS.x}">${body}</root>`).documentElement;
|
|
20355
|
+
const before = root.firstChild;
|
|
20356
|
+
for (const child3 of elements(replacement)) root.insertBefore(doc.importNode(child3, true), before);
|
|
20357
|
+
return XML_HEADER + buildXml(root);
|
|
20358
|
+
}
|
|
20359
|
+
var init_table_xml = __esm({
|
|
20360
|
+
"xlsx/pivot/table-xml.ts"() {
|
|
20361
|
+
init_xml2();
|
|
20362
|
+
init_address();
|
|
20363
|
+
init_xml_out();
|
|
20364
|
+
init_aggregate();
|
|
20365
|
+
init_data();
|
|
20366
|
+
}
|
|
20367
|
+
});
|
|
20368
|
+
|
|
20369
|
+
// xlsx/pivot/write.ts
|
|
20370
|
+
var TYPES, PivotWritePlan;
|
|
20371
|
+
var init_write = __esm({
|
|
20372
|
+
"xlsx/pivot/write.ts"() {
|
|
20373
|
+
init_opc();
|
|
20374
|
+
init_xml2();
|
|
20375
|
+
init_xml_util();
|
|
20376
|
+
init_package_writer();
|
|
20377
|
+
init_drawing();
|
|
20378
|
+
init_cache_xml();
|
|
20379
|
+
init_table_xml();
|
|
20380
|
+
TYPES = {
|
|
20381
|
+
table: "application/vnd.openxmlformats-officedocument.spreadsheetml.pivotTable+xml",
|
|
20382
|
+
definition: "application/vnd.openxmlformats-officedocument.spreadsheetml.pivotCacheDefinition+xml",
|
|
20383
|
+
records: "application/vnd.openxmlformats-officedocument.spreadsheetml.pivotCacheRecords+xml"
|
|
20384
|
+
};
|
|
20385
|
+
PivotWritePlan = class {
|
|
20386
|
+
tableParts = /* @__PURE__ */ new Map();
|
|
20387
|
+
cachesXml;
|
|
20388
|
+
constructor(writer, workbook, source2, bookPart, bookRels, reserved) {
|
|
20389
|
+
const sourceCaches = source2?.text(bookPart) ? children(
|
|
20390
|
+
first(parseXml(source2.text(bookPart)).documentElement, "pivotCaches", NS.x) ?? parseXml("<root/>").documentElement,
|
|
20391
|
+
"pivotCache",
|
|
20392
|
+
NS.x
|
|
20393
|
+
) : [];
|
|
20394
|
+
const retained = /* @__PURE__ */ new Set();
|
|
20395
|
+
const owns = workbook.sheets.some((sheet) => sheet.pivotTables !== void 0);
|
|
20396
|
+
for (const sheet of workbook.sheets)
|
|
20397
|
+
if (source2 && sheet.partName)
|
|
20398
|
+
for (const rel of source2.rels(sheet.partName).values()) {
|
|
20399
|
+
if (rel.type !== RELATIONSHIP_TYPES.pivotTable) continue;
|
|
20400
|
+
const part = source2.target(sheet.partName, rel);
|
|
20401
|
+
if (!part) continue;
|
|
20402
|
+
const pivot = sheet.pivotTables?.find((entry3) => entry3.partName === part);
|
|
20403
|
+
if (pivot?.dirty || !pivot && sheet.preserved.get("source:pivotTables")?.includes(part))
|
|
20404
|
+
continue;
|
|
20405
|
+
const xml = source2.text(part);
|
|
20406
|
+
if (xml) retained.add(Number(parseXml(xml).documentElement.getAttribute("cacheId")));
|
|
20407
|
+
}
|
|
20408
|
+
const entries = [];
|
|
20409
|
+
for (const node of sourceCaches) {
|
|
20410
|
+
const id = Number(node.getAttribute("cacheId"));
|
|
20411
|
+
if (owns && !retained.has(id)) continue;
|
|
20412
|
+
const rid = relAttr(node, "id");
|
|
20413
|
+
const rel = rid && source2?.rels(bookPart).get(rid);
|
|
20414
|
+
const part = rel && source2?.target(bookPart, rel);
|
|
20415
|
+
if (rel && rid && part) {
|
|
20416
|
+
bookRels.keep(rid, rel);
|
|
20417
|
+
writer.carry(part);
|
|
20418
|
+
entries.push(selfContainedXml(node));
|
|
20419
|
+
}
|
|
20420
|
+
}
|
|
20421
|
+
let cacheId = Math.max(
|
|
20422
|
+
-1,
|
|
20423
|
+
...sourceCaches.map((node) => Number(node.getAttribute("cacheId"))).filter((id) => Number.isInteger(id) && id >= 0)
|
|
20424
|
+
) + 1;
|
|
20425
|
+
for (const sheet of workbook.sheets)
|
|
20426
|
+
for (const pivot of sheet.pivotTables ?? []) {
|
|
20427
|
+
if (pivot.partName && !pivot.dirty) {
|
|
20428
|
+
this.tableParts.set(pivot, pivot.partName);
|
|
20429
|
+
continue;
|
|
20430
|
+
}
|
|
20431
|
+
const table2 = pivot.partName ?? writer.uniqueName((n) => `xl/pivotTables/pivotTable${n}.xml`, reserved);
|
|
20432
|
+
const definition = writer.uniqueName(
|
|
20433
|
+
(n) => `xl/pivotCache/pivotCacheDefinition${n}.xml`,
|
|
20434
|
+
reserved
|
|
20435
|
+
);
|
|
20436
|
+
const records = writer.uniqueName(
|
|
20437
|
+
(n) => `xl/pivotCache/pivotCacheRecords${n}.xml`,
|
|
20438
|
+
reserved
|
|
20439
|
+
);
|
|
20440
|
+
const cache2 = pivotCacheData(pivot);
|
|
20441
|
+
const cacheRels = new RelationshipSet();
|
|
20442
|
+
const recordRel = cacheRels.add(
|
|
20443
|
+
`${NS.r}/pivotCacheRecords`,
|
|
20444
|
+
relativeTarget(definition, records)
|
|
20445
|
+
);
|
|
20446
|
+
writer.add(records, pivotCacheRecordsXml(pivot, cache2), TYPES.records);
|
|
20447
|
+
writer.add(
|
|
20448
|
+
definition,
|
|
20449
|
+
pivotCacheDefinitionXml(pivot, workbook, cache2, recordRel),
|
|
20450
|
+
TYPES.definition
|
|
20451
|
+
);
|
|
20452
|
+
writer.rels(definition, cacheRels);
|
|
20453
|
+
writer.add(table2, pivotTableXml(pivot, cacheId, cache2), TYPES.table);
|
|
20454
|
+
const tableRels = new RelationshipSet();
|
|
20455
|
+
tableRels.add(RELATIONSHIP_TYPES.pivotCacheDefinition, relativeTarget(table2, definition));
|
|
20456
|
+
writer.rels(table2, tableRels);
|
|
20457
|
+
const rid = bookRels.add(
|
|
20458
|
+
RELATIONSHIP_TYPES.pivotCacheDefinition,
|
|
20459
|
+
relativeTarget(bookPart, definition)
|
|
20460
|
+
);
|
|
20461
|
+
entries.push(`<pivotCache cacheId="${cacheId++}" r:id="${rid}"/>`);
|
|
20462
|
+
this.tableParts.set(pivot, table2);
|
|
20463
|
+
}
|
|
20464
|
+
this.cachesXml = owns ? entries.length ? `<pivotCaches>${entries.join("")}</pivotCaches>` : "" : void 0;
|
|
20465
|
+
}
|
|
20466
|
+
writeSheet(writer, sheet, part, rels) {
|
|
20467
|
+
for (const pivot of sheet.pivotTables ?? []) {
|
|
20468
|
+
const table2 = this.tableParts.get(pivot);
|
|
20469
|
+
writer.carry(table2);
|
|
20470
|
+
rels.add(RELATIONSHIP_TYPES.pivotTable, relativeTarget(part, table2));
|
|
20471
|
+
}
|
|
20472
|
+
}
|
|
20473
|
+
};
|
|
20474
|
+
}
|
|
20475
|
+
});
|
|
20476
|
+
|
|
19845
20477
|
// xlsx/write/save.ts
|
|
19846
20478
|
async function saveXlsx(workbook) {
|
|
19847
20479
|
if (!workbook.sheets.length) throw new Error("A workbook needs at least one sheet");
|
|
@@ -19884,6 +20516,7 @@ async function saveXlsx(workbook) {
|
|
|
19884
20516
|
if (target) writer.carry(target);
|
|
19885
20517
|
}
|
|
19886
20518
|
}
|
|
20519
|
+
ctx.pivots = new PivotWritePlan(writer, workbook, source2, bookPart, rels, reserved);
|
|
19887
20520
|
const states = workbook.sheets.map((sheet) => sheet.state);
|
|
19888
20521
|
if (!states.includes("visible")) states[0] = "visible";
|
|
19889
20522
|
let activeTab = Math.min(Math.max(0, workbook.activeSheet), workbook.sheets.length - 1);
|
|
@@ -19949,7 +20582,7 @@ async function saveXlsx(workbook) {
|
|
|
19949
20582
|
const sourceXml = sourceBook ? source2?.text(sourceBook) : void 0;
|
|
19950
20583
|
writer.add(
|
|
19951
20584
|
bookPart,
|
|
19952
|
-
workbookXml(workbook, sheetRefs, Math.max(0, activeTab), sourceXml),
|
|
20585
|
+
workbookXml(workbook, sheetRefs, Math.max(0, activeTab), sourceXml, ctx.pivots.cachesXml),
|
|
19953
20586
|
keptVba ? CONTENT_TYPES.workbookMacro : CONTENT_TYPES.workbook
|
|
19954
20587
|
);
|
|
19955
20588
|
writer.rels(bookPart, rels);
|
|
@@ -19992,6 +20625,7 @@ var init_save = __esm({
|
|
|
19992
20625
|
init_doc_props();
|
|
19993
20626
|
init_workbook_part2();
|
|
19994
20627
|
init_worksheet2();
|
|
20628
|
+
init_write();
|
|
19995
20629
|
REGENERATED2 = /* @__PURE__ */ new Set([
|
|
19996
20630
|
RELATIONSHIP_TYPES.worksheet,
|
|
19997
20631
|
RELATIONSHIP_TYPES.chartsheet,
|
|
@@ -20002,7 +20636,8 @@ var init_save = __esm({
|
|
|
20002
20636
|
RELATIONSHIP_TYPES.theme,
|
|
20003
20637
|
RELATIONSHIP_TYPES.calcChain,
|
|
20004
20638
|
RELATIONSHIP_TYPES.person,
|
|
20005
|
-
RELATIONSHIP_TYPES.sheetMetadata
|
|
20639
|
+
RELATIONSHIP_TYPES.sheetMetadata,
|
|
20640
|
+
RELATIONSHIP_TYPES.pivotCacheDefinition
|
|
20006
20641
|
]);
|
|
20007
20642
|
SHEET_TYPES = {
|
|
20008
20643
|
[CONTENT_TYPES.chartsheet]: RELATIONSHIP_TYPES.chartsheet,
|
|
@@ -20022,7 +20657,7 @@ var write_exports = {};
|
|
|
20022
20657
|
__export(write_exports, {
|
|
20023
20658
|
saveXlsx: () => saveXlsx
|
|
20024
20659
|
});
|
|
20025
|
-
var
|
|
20660
|
+
var init_write2 = __esm({
|
|
20026
20661
|
"xlsx/write/index.ts"() {
|
|
20027
20662
|
init_save();
|
|
20028
20663
|
}
|
|
@@ -21537,7 +22172,7 @@ function createFileActions(context) {
|
|
|
21537
22172
|
checkFileAbort(options?.signal);
|
|
21538
22173
|
const [{ createWorkbook: createWorkbook2 }, { saveXlsx: saveXlsx2 }] = await Promise.all([
|
|
21539
22174
|
Promise.resolve().then(() => (init_workbook(), workbook_exports)),
|
|
21540
|
-
Promise.resolve().then(() => (
|
|
22175
|
+
Promise.resolve().then(() => (init_write2(), write_exports))
|
|
21541
22176
|
]);
|
|
21542
22177
|
checkFileAbort(options?.signal);
|
|
21543
22178
|
const bytes = await withFileAbort(() => saveXlsx2(createWorkbook2()), options?.signal);
|