@cj-tech-master/excelts 9.4.2 → 9.5.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/browser/index.browser.d.ts +8 -5
- package/dist/browser/index.browser.js +19 -1
- package/dist/browser/index.d.ts +4 -2
- package/dist/browser/index.js +9 -1
- package/dist/browser/modules/excel/chart/cache-populator.d.ts +49 -0
- package/dist/browser/modules/excel/chart/cache-populator.js +1171 -0
- package/dist/browser/modules/excel/chart/chart-api.d.ts +92 -0
- package/dist/browser/modules/excel/chart/chart-api.js +364 -0
- package/dist/browser/modules/excel/chart/chart-builder.d.ts +48 -0
- package/dist/browser/modules/excel/chart/chart-builder.js +2432 -0
- package/dist/browser/modules/excel/chart/chart-ex-builder.d.ts +36 -0
- package/dist/browser/modules/excel/chart/chart-ex-builder.js +903 -0
- package/dist/browser/modules/excel/chart/chart-ex-parser.d.ts +8 -0
- package/dist/browser/modules/excel/chart/chart-ex-parser.js +1205 -0
- package/dist/browser/modules/excel/chart/chart-ex-renderer.d.ts +187 -0
- package/dist/browser/modules/excel/chart/chart-ex-renderer.js +5352 -0
- package/dist/browser/modules/excel/chart/chart-ex-types.d.ts +531 -0
- package/dist/browser/modules/excel/chart/chart-ex-types.js +11 -0
- package/dist/browser/modules/excel/chart/chart-images.d.ts +78 -0
- package/dist/browser/modules/excel/chart/chart-images.js +363 -0
- package/dist/browser/modules/excel/chart/chart-presets.d.ts +392 -0
- package/dist/browser/modules/excel/chart/chart-presets.js +179 -0
- package/dist/browser/modules/excel/chart/chart-renderer.d.ts +550 -0
- package/dist/browser/modules/excel/chart/chart-renderer.js +6440 -0
- package/dist/browser/modules/excel/chart/chart-sidecar.d.ts +21 -0
- package/dist/browser/modules/excel/chart/chart-sidecar.js +427 -0
- package/dist/browser/modules/excel/chart/chart-utils.d.ts +306 -0
- package/dist/browser/modules/excel/chart/chart-utils.js +821 -0
- package/dist/browser/modules/excel/chart/chart.d.ts +504 -0
- package/dist/browser/modules/excel/chart/chart.js +1320 -0
- package/dist/browser/modules/excel/chart/glyph-rasterizer.d.ts +62 -0
- package/dist/browser/modules/excel/chart/glyph-rasterizer.js +658 -0
- package/dist/browser/modules/excel/chart/index.d.ts +54 -0
- package/dist/browser/modules/excel/chart/index.js +46 -0
- package/dist/browser/modules/excel/chart/install.d.ts +44 -0
- package/dist/browser/modules/excel/chart/install.js +91 -0
- package/dist/browser/modules/excel/chart/shape-properties.d.ts +156 -0
- package/dist/browser/modules/excel/chart/shape-properties.js +1557 -0
- package/dist/browser/modules/excel/chart/stroke-font.d.ts +36 -0
- package/dist/browser/modules/excel/chart/stroke-font.js +1556 -0
- package/dist/browser/modules/excel/chart/topojson.d.ts +98 -0
- package/dist/browser/modules/excel/chart/topojson.js +236 -0
- package/dist/browser/modules/excel/chart/types.d.ts +2559 -0
- package/dist/browser/modules/excel/chart/types.js +8 -0
- package/dist/browser/modules/excel/chart-host-registry.d.ts +157 -0
- package/dist/browser/modules/excel/chart-host-registry.js +90 -0
- package/dist/browser/modules/excel/chartsheet.d.ts +102 -0
- package/dist/browser/modules/excel/chartsheet.js +196 -0
- package/dist/browser/modules/excel/defined-names.d.ts +35 -0
- package/dist/browser/modules/excel/defined-names.js +44 -4
- package/dist/browser/modules/excel/errors.d.ts +6 -0
- package/dist/browser/modules/excel/errors.js +9 -0
- package/dist/browser/modules/excel/form-control.d.ts +6 -0
- package/dist/browser/modules/excel/form-control.js +17 -0
- package/dist/browser/modules/excel/image.js +12 -2
- package/dist/browser/modules/excel/pivot-chart.d.ts +7 -0
- package/dist/browser/modules/excel/pivot-chart.js +53 -0
- package/dist/browser/modules/excel/pivot-table.d.ts +55 -0
- package/dist/browser/modules/excel/pivot-table.js +35 -0
- package/dist/browser/modules/excel/range.js +5 -1
- package/dist/browser/modules/excel/sparkline/index.d.ts +7 -0
- package/dist/browser/modules/excel/sparkline/index.js +7 -0
- package/dist/browser/modules/excel/sparkline/sparkline.d.ts +206 -0
- package/dist/browser/modules/excel/sparkline/sparkline.js +750 -0
- package/dist/browser/modules/excel/stream/worksheet-writer.js +3 -2
- package/dist/browser/modules/excel/table.js +42 -6
- package/dist/browser/modules/excel/types.d.ts +72 -0
- package/dist/browser/modules/excel/utils/address.d.ts +18 -0
- package/dist/browser/modules/excel/utils/address.js +28 -0
- package/dist/browser/modules/excel/utils/drawing-utils.js +11 -6
- package/dist/browser/modules/excel/utils/guid.d.ts +15 -0
- package/dist/browser/modules/excel/utils/guid.js +35 -0
- package/dist/browser/modules/excel/utils/ooxml-paths.d.ts +74 -0
- package/dist/browser/modules/excel/utils/ooxml-paths.js +206 -9
- package/dist/browser/modules/excel/utils/ooxml-validator/check-chart-sidecar.d.ts +35 -0
- package/dist/browser/modules/excel/utils/ooxml-validator/check-chart-sidecar.js +101 -0
- package/dist/browser/modules/excel/utils/ooxml-validator/check-chart.d.ts +32 -0
- package/dist/browser/modules/excel/utils/ooxml-validator/check-chart.js +2125 -0
- package/dist/browser/modules/excel/utils/ooxml-validator/check-chartsheet.d.ts +9 -0
- package/dist/browser/modules/excel/utils/ooxml-validator/check-chartsheet.js +26 -0
- package/dist/browser/modules/excel/utils/ooxml-validator/check-content-types.d.ts +16 -0
- package/dist/browser/modules/excel/utils/ooxml-validator/check-content-types.js +181 -0
- package/dist/browser/modules/excel/utils/ooxml-validator/check-drawing.d.ts +34 -0
- package/dist/browser/modules/excel/utils/ooxml-validator/check-drawing.js +267 -0
- package/dist/browser/modules/excel/utils/ooxml-validator/check-pivot.d.ts +14 -0
- package/dist/browser/modules/excel/utils/ooxml-validator/check-pivot.js +104 -0
- package/dist/browser/modules/excel/utils/ooxml-validator/check-relationships.d.ts +18 -0
- package/dist/browser/modules/excel/utils/ooxml-validator/check-relationships.js +184 -0
- package/dist/browser/modules/excel/utils/ooxml-validator/check-structure.d.ts +21 -0
- package/dist/browser/modules/excel/utils/ooxml-validator/check-structure.js +56 -0
- package/dist/browser/modules/excel/utils/ooxml-validator/check-styles.d.ts +15 -0
- package/dist/browser/modules/excel/utils/ooxml-validator/check-styles.js +89 -0
- package/dist/browser/modules/excel/utils/ooxml-validator/check-table.d.ts +31 -0
- package/dist/browser/modules/excel/utils/ooxml-validator/check-table.js +177 -0
- package/dist/browser/modules/excel/utils/ooxml-validator/check-workbook.d.ts +19 -0
- package/dist/browser/modules/excel/utils/ooxml-validator/check-workbook.js +163 -0
- package/dist/browser/modules/excel/utils/ooxml-validator/check-worksheet.d.ts +25 -0
- package/dist/browser/modules/excel/utils/ooxml-validator/check-worksheet.js +569 -0
- package/dist/browser/modules/excel/utils/ooxml-validator/context.d.ts +85 -0
- package/dist/browser/modules/excel/utils/ooxml-validator/context.js +191 -0
- package/dist/browser/modules/excel/utils/ooxml-validator/index.d.ts +31 -0
- package/dist/browser/modules/excel/utils/ooxml-validator/index.js +102 -0
- package/dist/browser/modules/excel/utils/ooxml-validator/path-utils.d.ts +67 -0
- package/dist/browser/modules/excel/utils/ooxml-validator/path-utils.js +156 -0
- package/dist/browser/modules/excel/utils/ooxml-validator/reporter.d.ts +41 -0
- package/dist/browser/modules/excel/utils/ooxml-validator/reporter.js +61 -0
- package/dist/browser/modules/excel/utils/ooxml-validator/types.d.ts +109 -0
- package/dist/browser/modules/excel/utils/ooxml-validator/types.js +12 -0
- package/dist/browser/modules/excel/utils/ooxml-validator/xml-utils.d.ts +38 -0
- package/dist/browser/modules/excel/utils/ooxml-validator/xml-utils.js +100 -0
- package/dist/browser/modules/excel/workbook.browser.d.ts +248 -30
- package/dist/browser/modules/excel/workbook.browser.js +966 -31
- package/dist/browser/modules/excel/workbook.d.ts +43 -0
- package/dist/browser/modules/excel/workbook.js +48 -0
- package/dist/browser/modules/excel/worksheet.d.ts +157 -3
- package/dist/browser/modules/excel/worksheet.js +394 -35
- package/dist/browser/modules/excel/xlsx/rel-type.d.ts +40 -0
- package/dist/browser/modules/excel/xlsx/rel-type.js +41 -1
- package/dist/browser/modules/excel/xlsx/xform/book/defined-name-xform.d.ts +1 -0
- package/dist/browser/modules/excel/xlsx/xform/book/defined-name-xform.js +11 -2
- package/dist/browser/modules/excel/xlsx/xform/book/external-link-xform.js +12 -10
- package/dist/browser/modules/excel/xlsx/xform/book/workbook-xform.js +96 -22
- package/dist/browser/modules/excel/xlsx/xform/chart/chart-space-xform.d.ts +353 -0
- package/dist/browser/modules/excel/xlsx/xform/chart/chart-space-xform.js +6000 -0
- package/dist/browser/modules/excel/xlsx/xform/comment/threaded-comments-xform.d.ts +60 -0
- package/dist/browser/modules/excel/xlsx/xform/comment/threaded-comments-xform.js +213 -0
- package/dist/browser/modules/excel/xlsx/xform/core/content-types-xform.js +150 -11
- package/dist/browser/modules/excel/xlsx/xform/drawing/absolute-anchor-xform.js +20 -1
- package/dist/browser/modules/excel/xlsx/xform/drawing/base-cell-anchor-xform.js +1 -1
- package/dist/browser/modules/excel/xlsx/xform/drawing/drawing-xform.d.ts +30 -0
- package/dist/browser/modules/excel/xlsx/xform/drawing/drawing-xform.js +109 -5
- package/dist/browser/modules/excel/xlsx/xform/drawing/graphic-frame-xform.d.ts +54 -0
- package/dist/browser/modules/excel/xlsx/xform/drawing/graphic-frame-xform.js +225 -0
- package/dist/browser/modules/excel/xlsx/xform/drawing/one-cell-anchor-xform.d.ts +3 -1
- package/dist/browser/modules/excel/xlsx/xform/drawing/one-cell-anchor-xform.js +18 -3
- package/dist/browser/modules/excel/xlsx/xform/drawing/two-cell-anchor-xform.d.ts +46 -0
- package/dist/browser/modules/excel/xlsx/xform/drawing/two-cell-anchor-xform.js +294 -12
- package/dist/browser/modules/excel/xlsx/xform/pivot-table/pivot-table-xform.d.ts +13 -2
- package/dist/browser/modules/excel/xlsx/xform/pivot-table/pivot-table-xform.js +32 -6
- package/dist/browser/modules/excel/xlsx/xform/sheet/chartsheet-xform.d.ts +185 -0
- package/dist/browser/modules/excel/xlsx/xform/sheet/chartsheet-xform.js +441 -0
- package/dist/browser/modules/excel/xlsx/xform/sheet/ext-lst-xform.d.ts +1 -0
- package/dist/browser/modules/excel/xlsx/xform/sheet/ext-lst-xform.js +51 -2
- package/dist/browser/modules/excel/xlsx/xform/sheet/worksheet-xform.js +196 -20
- package/dist/browser/modules/excel/xlsx/xform/table/auto-filter-xform.js +16 -1
- package/dist/browser/modules/excel/xlsx/xform/table/table-column-xform.js +17 -2
- package/dist/browser/modules/excel/xlsx/xform/xsd-values.d.ts +63 -0
- package/dist/browser/modules/excel/xlsx/xform/xsd-values.js +101 -0
- package/dist/browser/modules/excel/xlsx/xlsx.browser.d.ts +115 -21
- package/dist/browser/modules/excel/xlsx/xlsx.browser.js +4422 -78
- package/dist/browser/modules/pdf/builder/document-builder.d.ts +74 -0
- package/dist/browser/modules/pdf/builder/document-builder.js +507 -2
- package/dist/browser/modules/pdf/builder/pdf-editor.js +48 -3
- package/dist/browser/modules/pdf/excel-bridge.d.ts +69 -0
- package/dist/browser/modules/pdf/excel-bridge.js +683 -12
- package/dist/browser/modules/pdf/font/font-manager.d.ts +25 -0
- package/dist/browser/modules/pdf/font/font-manager.js +39 -0
- package/dist/browser/modules/pdf/index.d.ts +5 -2
- package/dist/browser/modules/pdf/index.js +3 -1
- package/dist/browser/modules/pdf/render/chart-surface.d.ts +33 -0
- package/dist/browser/modules/pdf/render/chart-surface.js +200 -0
- package/dist/browser/modules/pdf/render/layout-engine.d.ts +22 -1
- package/dist/browser/modules/pdf/render/layout-engine.js +436 -56
- package/dist/browser/modules/pdf/render/page-renderer.js +169 -28
- package/dist/browser/modules/pdf/render/pdf-exporter.js +117 -7
- package/dist/browser/modules/pdf/types.d.ts +227 -23
- package/dist/browser/modules/pdf/types.js +4 -0
- package/dist/browser/modules/pdf/word-bridge.d.ts +47 -0
- package/dist/browser/modules/pdf/word-bridge.js +304 -0
- package/dist/browser/modules/word/constants.d.ts +179 -0
- package/dist/browser/modules/word/constants.js +231 -0
- package/dist/browser/modules/word/content-types.d.ts +27 -0
- package/dist/browser/modules/word/content-types.js +53 -0
- package/dist/browser/modules/word/digital-signatures.d.ts +87 -0
- package/dist/browser/modules/word/digital-signatures.js +134 -0
- package/dist/browser/modules/word/document.d.ts +728 -0
- package/dist/browser/modules/word/document.js +1795 -0
- package/dist/browser/modules/word/docx-packager.d.ts +14 -0
- package/dist/browser/modules/word/docx-packager.js +822 -0
- package/dist/browser/modules/word/docx-reader.d.ts +11 -0
- package/dist/browser/modules/word/docx-reader.js +4929 -0
- package/dist/browser/modules/word/encryption.d.ts +102 -0
- package/dist/browser/modules/word/encryption.js +274 -0
- package/dist/browser/modules/word/errors.d.ts +49 -0
- package/dist/browser/modules/word/errors.js +68 -0
- package/dist/browser/modules/word/font-obfuscation.d.ts +31 -0
- package/dist/browser/modules/word/font-obfuscation.js +83 -0
- package/dist/browser/modules/word/html-renderer.d.ts +38 -0
- package/dist/browser/modules/word/html-renderer.js +782 -0
- package/dist/browser/modules/word/index.base.d.ts +19 -0
- package/dist/browser/modules/word/index.base.js +51 -0
- package/dist/browser/modules/word/index.browser.d.ts +4 -0
- package/dist/browser/modules/word/index.browser.js +4 -0
- package/dist/browser/modules/word/index.d.ts +4 -0
- package/dist/browser/modules/word/index.js +4 -0
- package/dist/browser/modules/word/internal-utils.d.ts +23 -0
- package/dist/browser/modules/word/internal-utils.js +54 -0
- package/dist/browser/modules/word/relationships.d.ts +31 -0
- package/dist/browser/modules/word/relationships.js +56 -0
- package/dist/browser/modules/word/types.d.ts +2325 -0
- package/dist/browser/modules/word/types.js +10 -0
- package/dist/browser/modules/word/units.d.ts +49 -0
- package/dist/browser/modules/word/units.js +111 -0
- package/dist/browser/modules/word/writers/chart-writer.d.ts +10 -0
- package/dist/browser/modules/word/writers/chart-writer.js +385 -0
- package/dist/browser/modules/word/writers/checkbox-writer.d.ts +9 -0
- package/dist/browser/modules/word/writers/checkbox-writer.js +42 -0
- package/dist/browser/modules/word/writers/comment-writer.d.ts +15 -0
- package/dist/browser/modules/word/writers/comment-writer.js +70 -0
- package/dist/browser/modules/word/writers/document-writer.d.ts +16 -0
- package/dist/browser/modules/word/writers/document-writer.js +461 -0
- package/dist/browser/modules/word/writers/footnote-writer.d.ts +11 -0
- package/dist/browser/modules/word/writers/footnote-writer.js +72 -0
- package/dist/browser/modules/word/writers/header-footer-writer.d.ts +13 -0
- package/dist/browser/modules/word/writers/header-footer-writer.js +129 -0
- package/dist/browser/modules/word/writers/image-writer.d.ts +10 -0
- package/dist/browser/modules/word/writers/image-writer.js +185 -0
- package/dist/browser/modules/word/writers/math-writer.d.ts +9 -0
- package/dist/browser/modules/word/writers/math-writer.js +428 -0
- package/dist/browser/modules/word/writers/numbering-writer.d.ts +10 -0
- package/dist/browser/modules/word/writers/numbering-writer.js +125 -0
- package/dist/browser/modules/word/writers/paragraph-writer.d.ts +13 -0
- package/dist/browser/modules/word/writers/paragraph-writer.js +516 -0
- package/dist/browser/modules/word/writers/parts-writer.d.ts +26 -0
- package/dist/browser/modules/word/writers/parts-writer.js +660 -0
- package/dist/browser/modules/word/writers/run-writer.d.ts +15 -0
- package/dist/browser/modules/word/writers/run-writer.js +649 -0
- package/dist/browser/modules/word/writers/section-writer.d.ts +10 -0
- package/dist/browser/modules/word/writers/section-writer.js +238 -0
- package/dist/browser/modules/word/writers/styles-writer.d.ts +10 -0
- package/dist/browser/modules/word/writers/styles-writer.js +242 -0
- package/dist/browser/modules/word/writers/table-writer.d.ts +10 -0
- package/dist/browser/modules/word/writers/table-writer.js +503 -0
- package/dist/browser/modules/word/writers/textbox-writer.d.ts +9 -0
- package/dist/browser/modules/word/writers/textbox-writer.js +53 -0
- package/dist/browser/modules/word/writers/toc-writer.d.ts +9 -0
- package/dist/browser/modules/word/writers/toc-writer.js +79 -0
- package/dist/browser/modules/xml/encode.d.ts +56 -7
- package/dist/browser/modules/xml/encode.js +157 -11
- package/dist/cjs/index.js +13 -2
- package/dist/cjs/modules/excel/chart/cache-populator.js +1178 -0
- package/dist/cjs/modules/excel/chart/chart-api.js +371 -0
- package/dist/cjs/modules/excel/chart/chart-builder.js +2440 -0
- package/dist/cjs/modules/excel/chart/chart-ex-builder.js +907 -0
- package/dist/cjs/modules/excel/chart/chart-ex-parser.js +1208 -0
- package/dist/cjs/modules/excel/chart/chart-ex-renderer.js +5364 -0
- package/dist/cjs/modules/excel/chart/chart-ex-types.js +12 -0
- package/dist/cjs/modules/excel/chart/chart-images.js +366 -0
- package/dist/cjs/modules/excel/chart/chart-presets.js +184 -0
- package/dist/cjs/modules/excel/chart/chart-renderer.js +6450 -0
- package/dist/cjs/modules/excel/chart/chart-sidecar.js +433 -0
- package/dist/cjs/modules/excel/chart/chart-utils.js +845 -0
- package/dist/cjs/modules/excel/chart/chart.js +1324 -0
- package/dist/cjs/modules/excel/chart/glyph-rasterizer.js +664 -0
- package/dist/cjs/modules/excel/chart/index.js +101 -0
- package/dist/cjs/modules/excel/chart/install.js +95 -0
- package/dist/cjs/modules/excel/chart/shape-properties.js +1577 -0
- package/dist/cjs/modules/excel/chart/stroke-font.js +1559 -0
- package/dist/cjs/modules/excel/chart/topojson.js +239 -0
- package/dist/cjs/modules/excel/chart/types.js +9 -0
- package/dist/cjs/modules/excel/chart-host-registry.js +96 -0
- package/dist/cjs/modules/excel/chartsheet.js +199 -0
- package/dist/cjs/modules/excel/defined-names.js +44 -4
- package/dist/cjs/modules/excel/errors.js +11 -1
- package/dist/cjs/modules/excel/form-control.js +17 -0
- package/dist/cjs/modules/excel/image.js +12 -2
- package/dist/cjs/modules/excel/pivot-chart.js +56 -0
- package/dist/cjs/modules/excel/pivot-table.js +35 -0
- package/dist/cjs/modules/excel/range.js +5 -1
- package/dist/cjs/modules/excel/sparkline/index.js +23 -0
- package/dist/cjs/modules/excel/sparkline/sparkline.js +756 -0
- package/dist/cjs/modules/excel/stream/worksheet-writer.js +3 -2
- package/dist/cjs/modules/excel/table.js +42 -6
- package/dist/cjs/modules/excel/utils/address.js +29 -0
- package/dist/cjs/modules/excel/utils/drawing-utils.js +11 -6
- package/dist/cjs/modules/excel/utils/guid.js +38 -0
- package/dist/cjs/modules/excel/utils/ooxml-paths.js +246 -9
- package/dist/cjs/modules/excel/utils/ooxml-validator/check-chart-sidecar.js +103 -0
- package/dist/cjs/modules/excel/utils/ooxml-validator/check-chart.js +2128 -0
- package/dist/cjs/modules/excel/utils/ooxml-validator/check-chartsheet.js +29 -0
- package/dist/cjs/modules/excel/utils/ooxml-validator/check-content-types.js +184 -0
- package/dist/cjs/modules/excel/utils/ooxml-validator/check-drawing.js +270 -0
- package/dist/cjs/modules/excel/utils/ooxml-validator/check-pivot.js +107 -0
- package/dist/cjs/modules/excel/utils/ooxml-validator/check-relationships.js +188 -0
- package/dist/cjs/modules/excel/utils/ooxml-validator/check-structure.js +60 -0
- package/dist/cjs/modules/excel/utils/ooxml-validator/check-styles.js +92 -0
- package/dist/cjs/modules/excel/utils/ooxml-validator/check-table.js +180 -0
- package/dist/cjs/modules/excel/utils/ooxml-validator/check-workbook.js +166 -0
- package/dist/cjs/modules/excel/utils/ooxml-validator/check-worksheet.js +572 -0
- package/dist/cjs/modules/excel/utils/ooxml-validator/context.js +196 -0
- package/dist/cjs/modules/excel/utils/ooxml-validator/index.js +105 -0
- package/dist/cjs/modules/excel/utils/ooxml-validator/path-utils.js +168 -0
- package/dist/cjs/modules/excel/utils/ooxml-validator/reporter.js +66 -0
- package/dist/cjs/modules/excel/utils/ooxml-validator/types.js +13 -0
- package/dist/cjs/modules/excel/utils/ooxml-validator/xml-utils.js +110 -0
- package/dist/cjs/modules/excel/workbook.browser.js +973 -38
- package/dist/cjs/modules/excel/workbook.js +48 -0
- package/dist/cjs/modules/excel/worksheet.js +393 -34
- package/dist/cjs/modules/excel/xlsx/rel-type.js +41 -1
- package/dist/cjs/modules/excel/xlsx/xform/book/defined-name-xform.js +11 -2
- package/dist/cjs/modules/excel/xlsx/xform/book/external-link-xform.js +12 -10
- package/dist/cjs/modules/excel/xlsx/xform/book/workbook-xform.js +96 -22
- package/dist/cjs/modules/excel/xlsx/xform/chart/chart-space-xform.js +6003 -0
- package/dist/cjs/modules/excel/xlsx/xform/comment/threaded-comments-xform.js +219 -0
- package/dist/cjs/modules/excel/xlsx/xform/core/content-types-xform.js +149 -10
- package/dist/cjs/modules/excel/xlsx/xform/drawing/absolute-anchor-xform.js +20 -1
- package/dist/cjs/modules/excel/xlsx/xform/drawing/base-cell-anchor-xform.js +1 -1
- package/dist/cjs/modules/excel/xlsx/xform/drawing/drawing-xform.js +109 -5
- package/dist/cjs/modules/excel/xlsx/xform/drawing/graphic-frame-xform.js +228 -0
- package/dist/cjs/modules/excel/xlsx/xform/drawing/one-cell-anchor-xform.js +18 -3
- package/dist/cjs/modules/excel/xlsx/xform/drawing/two-cell-anchor-xform.js +294 -12
- package/dist/cjs/modules/excel/xlsx/xform/pivot-table/pivot-table-xform.js +32 -6
- package/dist/cjs/modules/excel/xlsx/xform/sheet/chartsheet-xform.js +444 -0
- package/dist/cjs/modules/excel/xlsx/xform/sheet/ext-lst-xform.js +51 -2
- package/dist/cjs/modules/excel/xlsx/xform/sheet/worksheet-xform.js +195 -19
- package/dist/cjs/modules/excel/xlsx/xform/table/auto-filter-xform.js +16 -1
- package/dist/cjs/modules/excel/xlsx/xform/table/table-column-xform.js +17 -2
- package/dist/cjs/modules/excel/xlsx/xform/xsd-values.js +106 -0
- package/dist/cjs/modules/excel/xlsx/xlsx.browser.js +4420 -76
- package/dist/cjs/modules/pdf/builder/document-builder.js +506 -1
- package/dist/cjs/modules/pdf/builder/pdf-editor.js +48 -3
- package/dist/cjs/modules/pdf/excel-bridge.js +684 -12
- package/dist/cjs/modules/pdf/font/font-manager.js +39 -0
- package/dist/cjs/modules/pdf/index.js +5 -1
- package/dist/cjs/modules/pdf/render/chart-surface.js +203 -0
- package/dist/cjs/modules/pdf/render/layout-engine.js +437 -56
- package/dist/cjs/modules/pdf/render/page-renderer.js +169 -28
- package/dist/cjs/modules/pdf/render/pdf-exporter.js +115 -5
- package/dist/cjs/modules/pdf/types.js +5 -0
- package/dist/cjs/modules/pdf/word-bridge.js +307 -0
- package/dist/cjs/modules/word/constants.js +234 -0
- package/dist/cjs/modules/word/content-types.js +57 -0
- package/dist/cjs/modules/word/digital-signatures.js +140 -0
- package/dist/cjs/modules/word/document.js +1909 -0
- package/dist/cjs/modules/word/docx-packager.js +825 -0
- package/dist/cjs/modules/word/docx-reader.js +4932 -0
- package/dist/cjs/modules/word/encryption.js +282 -0
- package/dist/cjs/modules/word/errors.js +88 -0
- package/dist/cjs/modules/word/font-obfuscation.js +88 -0
- package/dist/cjs/modules/word/html-renderer.js +785 -0
- package/dist/cjs/modules/word/index.base.js +199 -0
- package/dist/cjs/modules/word/index.browser.js +20 -0
- package/dist/cjs/modules/word/index.js +20 -0
- package/dist/cjs/modules/word/internal-utils.js +59 -0
- package/dist/cjs/modules/word/relationships.js +60 -0
- package/dist/cjs/modules/word/types.js +11 -0
- package/dist/cjs/modules/word/units.js +135 -0
- package/dist/cjs/modules/word/writers/chart-writer.js +388 -0
- package/dist/cjs/modules/word/writers/checkbox-writer.js +45 -0
- package/dist/cjs/modules/word/writers/comment-writer.js +74 -0
- package/dist/cjs/modules/word/writers/document-writer.js +465 -0
- package/dist/cjs/modules/word/writers/footnote-writer.js +76 -0
- package/dist/cjs/modules/word/writers/header-footer-writer.js +134 -0
- package/dist/cjs/modules/word/writers/image-writer.js +188 -0
- package/dist/cjs/modules/word/writers/math-writer.js +431 -0
- package/dist/cjs/modules/word/writers/numbering-writer.js +128 -0
- package/dist/cjs/modules/word/writers/paragraph-writer.js +521 -0
- package/dist/cjs/modules/word/writers/parts-writer.js +671 -0
- package/dist/cjs/modules/word/writers/run-writer.js +655 -0
- package/dist/cjs/modules/word/writers/section-writer.js +241 -0
- package/dist/cjs/modules/word/writers/styles-writer.js +245 -0
- package/dist/cjs/modules/word/writers/table-writer.js +506 -0
- package/dist/cjs/modules/word/writers/textbox-writer.js +56 -0
- package/dist/cjs/modules/word/writers/toc-writer.js +82 -0
- package/dist/cjs/modules/xml/encode.js +158 -11
- package/dist/esm/index.browser.js +20 -2
- package/dist/esm/index.js +9 -1
- package/dist/esm/modules/excel/chart/cache-populator.js +1171 -0
- package/dist/esm/modules/excel/chart/chart-api.js +364 -0
- package/dist/esm/modules/excel/chart/chart-builder.js +2432 -0
- package/dist/esm/modules/excel/chart/chart-ex-builder.js +903 -0
- package/dist/esm/modules/excel/chart/chart-ex-parser.js +1205 -0
- package/dist/esm/modules/excel/chart/chart-ex-renderer.js +5352 -0
- package/dist/esm/modules/excel/chart/chart-ex-types.js +11 -0
- package/dist/esm/modules/excel/chart/chart-images.js +363 -0
- package/dist/esm/modules/excel/chart/chart-presets.js +179 -0
- package/dist/esm/modules/excel/chart/chart-renderer.js +6440 -0
- package/dist/esm/modules/excel/chart/chart-sidecar.js +427 -0
- package/dist/esm/modules/excel/chart/chart-utils.js +821 -0
- package/dist/esm/modules/excel/chart/chart.js +1320 -0
- package/dist/esm/modules/excel/chart/glyph-rasterizer.js +658 -0
- package/dist/esm/modules/excel/chart/index.js +46 -0
- package/dist/esm/modules/excel/chart/install.js +91 -0
- package/dist/esm/modules/excel/chart/shape-properties.js +1557 -0
- package/dist/esm/modules/excel/chart/stroke-font.js +1556 -0
- package/dist/esm/modules/excel/chart/topojson.js +236 -0
- package/dist/esm/modules/excel/chart/types.js +8 -0
- package/dist/esm/modules/excel/chart-host-registry.js +90 -0
- package/dist/esm/modules/excel/chartsheet.js +196 -0
- package/dist/esm/modules/excel/defined-names.js +44 -4
- package/dist/esm/modules/excel/errors.js +9 -0
- package/dist/esm/modules/excel/form-control.js +17 -0
- package/dist/esm/modules/excel/image.js +12 -2
- package/dist/esm/modules/excel/pivot-chart.js +53 -0
- package/dist/esm/modules/excel/pivot-table.js +35 -0
- package/dist/esm/modules/excel/range.js +5 -1
- package/dist/esm/modules/excel/sparkline/index.js +7 -0
- package/dist/esm/modules/excel/sparkline/sparkline.js +750 -0
- package/dist/esm/modules/excel/stream/worksheet-writer.js +3 -2
- package/dist/esm/modules/excel/table.js +42 -6
- package/dist/esm/modules/excel/utils/address.js +28 -0
- package/dist/esm/modules/excel/utils/drawing-utils.js +11 -6
- package/dist/esm/modules/excel/utils/guid.js +35 -0
- package/dist/esm/modules/excel/utils/ooxml-paths.js +206 -9
- package/dist/esm/modules/excel/utils/ooxml-validator/check-chart-sidecar.js +101 -0
- package/dist/esm/modules/excel/utils/ooxml-validator/check-chart.js +2125 -0
- package/dist/esm/modules/excel/utils/ooxml-validator/check-chartsheet.js +26 -0
- package/dist/esm/modules/excel/utils/ooxml-validator/check-content-types.js +181 -0
- package/dist/esm/modules/excel/utils/ooxml-validator/check-drawing.js +267 -0
- package/dist/esm/modules/excel/utils/ooxml-validator/check-pivot.js +104 -0
- package/dist/esm/modules/excel/utils/ooxml-validator/check-relationships.js +184 -0
- package/dist/esm/modules/excel/utils/ooxml-validator/check-structure.js +56 -0
- package/dist/esm/modules/excel/utils/ooxml-validator/check-styles.js +89 -0
- package/dist/esm/modules/excel/utils/ooxml-validator/check-table.js +177 -0
- package/dist/esm/modules/excel/utils/ooxml-validator/check-workbook.js +163 -0
- package/dist/esm/modules/excel/utils/ooxml-validator/check-worksheet.js +569 -0
- package/dist/esm/modules/excel/utils/ooxml-validator/context.js +191 -0
- package/dist/esm/modules/excel/utils/ooxml-validator/index.js +102 -0
- package/dist/esm/modules/excel/utils/ooxml-validator/path-utils.js +156 -0
- package/dist/esm/modules/excel/utils/ooxml-validator/reporter.js +61 -0
- package/dist/esm/modules/excel/utils/ooxml-validator/types.js +12 -0
- package/dist/esm/modules/excel/utils/ooxml-validator/xml-utils.js +100 -0
- package/dist/esm/modules/excel/workbook.browser.js +969 -34
- package/dist/esm/modules/excel/workbook.js +48 -0
- package/dist/esm/modules/excel/worksheet.js +394 -35
- package/dist/esm/modules/excel/xlsx/rel-type.js +41 -1
- package/dist/esm/modules/excel/xlsx/xform/book/defined-name-xform.js +11 -2
- package/dist/esm/modules/excel/xlsx/xform/book/external-link-xform.js +12 -10
- package/dist/esm/modules/excel/xlsx/xform/book/workbook-xform.js +96 -22
- package/dist/esm/modules/excel/xlsx/xform/chart/chart-space-xform.js +6000 -0
- package/dist/esm/modules/excel/xlsx/xform/comment/threaded-comments-xform.js +213 -0
- package/dist/esm/modules/excel/xlsx/xform/core/content-types-xform.js +150 -11
- package/dist/esm/modules/excel/xlsx/xform/drawing/absolute-anchor-xform.js +20 -1
- package/dist/esm/modules/excel/xlsx/xform/drawing/base-cell-anchor-xform.js +1 -1
- package/dist/esm/modules/excel/xlsx/xform/drawing/drawing-xform.js +109 -5
- package/dist/esm/modules/excel/xlsx/xform/drawing/graphic-frame-xform.js +225 -0
- package/dist/esm/modules/excel/xlsx/xform/drawing/one-cell-anchor-xform.js +18 -3
- package/dist/esm/modules/excel/xlsx/xform/drawing/two-cell-anchor-xform.js +294 -12
- package/dist/esm/modules/excel/xlsx/xform/pivot-table/pivot-table-xform.js +32 -6
- package/dist/esm/modules/excel/xlsx/xform/sheet/chartsheet-xform.js +441 -0
- package/dist/esm/modules/excel/xlsx/xform/sheet/ext-lst-xform.js +51 -2
- package/dist/esm/modules/excel/xlsx/xform/sheet/worksheet-xform.js +196 -20
- package/dist/esm/modules/excel/xlsx/xform/table/auto-filter-xform.js +16 -1
- package/dist/esm/modules/excel/xlsx/xform/table/table-column-xform.js +17 -2
- package/dist/esm/modules/excel/xlsx/xform/xsd-values.js +101 -0
- package/dist/esm/modules/excel/xlsx/xlsx.browser.js +4422 -78
- package/dist/esm/modules/pdf/builder/document-builder.js +507 -2
- package/dist/esm/modules/pdf/builder/pdf-editor.js +48 -3
- package/dist/esm/modules/pdf/excel-bridge.js +683 -12
- package/dist/esm/modules/pdf/font/font-manager.js +39 -0
- package/dist/esm/modules/pdf/index.js +3 -1
- package/dist/esm/modules/pdf/render/chart-surface.js +200 -0
- package/dist/esm/modules/pdf/render/layout-engine.js +436 -56
- package/dist/esm/modules/pdf/render/page-renderer.js +169 -28
- package/dist/esm/modules/pdf/render/pdf-exporter.js +117 -7
- package/dist/esm/modules/pdf/types.js +4 -0
- package/dist/esm/modules/pdf/word-bridge.js +304 -0
- package/dist/esm/modules/word/constants.js +231 -0
- package/dist/esm/modules/word/content-types.js +53 -0
- package/dist/esm/modules/word/digital-signatures.js +134 -0
- package/dist/esm/modules/word/document.js +1795 -0
- package/dist/esm/modules/word/docx-packager.js +822 -0
- package/dist/esm/modules/word/docx-reader.js +4929 -0
- package/dist/esm/modules/word/encryption.js +274 -0
- package/dist/esm/modules/word/errors.js +68 -0
- package/dist/esm/modules/word/font-obfuscation.js +83 -0
- package/dist/esm/modules/word/html-renderer.js +782 -0
- package/dist/esm/modules/word/index.base.js +51 -0
- package/dist/esm/modules/word/index.browser.js +4 -0
- package/dist/esm/modules/word/index.js +4 -0
- package/dist/esm/modules/word/internal-utils.js +54 -0
- package/dist/esm/modules/word/relationships.js +56 -0
- package/dist/esm/modules/word/types.js +10 -0
- package/dist/esm/modules/word/units.js +111 -0
- package/dist/esm/modules/word/writers/chart-writer.js +385 -0
- package/dist/esm/modules/word/writers/checkbox-writer.js +42 -0
- package/dist/esm/modules/word/writers/comment-writer.js +70 -0
- package/dist/esm/modules/word/writers/document-writer.js +461 -0
- package/dist/esm/modules/word/writers/footnote-writer.js +72 -0
- package/dist/esm/modules/word/writers/header-footer-writer.js +129 -0
- package/dist/esm/modules/word/writers/image-writer.js +185 -0
- package/dist/esm/modules/word/writers/math-writer.js +428 -0
- package/dist/esm/modules/word/writers/numbering-writer.js +125 -0
- package/dist/esm/modules/word/writers/paragraph-writer.js +516 -0
- package/dist/esm/modules/word/writers/parts-writer.js +660 -0
- package/dist/esm/modules/word/writers/run-writer.js +649 -0
- package/dist/esm/modules/word/writers/section-writer.js +238 -0
- package/dist/esm/modules/word/writers/styles-writer.js +242 -0
- package/dist/esm/modules/word/writers/table-writer.js +503 -0
- package/dist/esm/modules/word/writers/textbox-writer.js +53 -0
- package/dist/esm/modules/word/writers/toc-writer.js +79 -0
- package/dist/esm/modules/xml/encode.js +157 -11
- package/dist/iife/excelts.iife.js +11789 -687
- package/dist/iife/excelts.iife.js.map +1 -1
- package/dist/iife/excelts.iife.min.js +52 -44
- package/dist/types/index.browser.d.ts +8 -5
- package/dist/types/index.d.ts +4 -2
- package/dist/types/modules/excel/chart/cache-populator.d.ts +49 -0
- package/dist/types/modules/excel/chart/chart-api.d.ts +92 -0
- package/dist/types/modules/excel/chart/chart-builder.d.ts +48 -0
- package/dist/types/modules/excel/chart/chart-ex-builder.d.ts +36 -0
- package/dist/types/modules/excel/chart/chart-ex-parser.d.ts +8 -0
- package/dist/types/modules/excel/chart/chart-ex-renderer.d.ts +187 -0
- package/dist/types/modules/excel/chart/chart-ex-types.d.ts +531 -0
- package/dist/types/modules/excel/chart/chart-images.d.ts +78 -0
- package/dist/types/modules/excel/chart/chart-presets.d.ts +392 -0
- package/dist/types/modules/excel/chart/chart-renderer.d.ts +550 -0
- package/dist/types/modules/excel/chart/chart-sidecar.d.ts +21 -0
- package/dist/types/modules/excel/chart/chart-utils.d.ts +306 -0
- package/dist/types/modules/excel/chart/chart.d.ts +504 -0
- package/dist/types/modules/excel/chart/glyph-rasterizer.d.ts +62 -0
- package/dist/types/modules/excel/chart/index.d.ts +54 -0
- package/dist/types/modules/excel/chart/install.d.ts +44 -0
- package/dist/types/modules/excel/chart/shape-properties.d.ts +156 -0
- package/dist/types/modules/excel/chart/stroke-font.d.ts +36 -0
- package/dist/types/modules/excel/chart/topojson.d.ts +98 -0
- package/dist/types/modules/excel/chart/types.d.ts +2559 -0
- package/dist/types/modules/excel/chart-host-registry.d.ts +157 -0
- package/dist/types/modules/excel/chartsheet.d.ts +102 -0
- package/dist/types/modules/excel/defined-names.d.ts +35 -0
- package/dist/types/modules/excel/errors.d.ts +6 -0
- package/dist/types/modules/excel/form-control.d.ts +6 -0
- package/dist/types/modules/excel/pivot-chart.d.ts +7 -0
- package/dist/types/modules/excel/pivot-table.d.ts +55 -0
- package/dist/types/modules/excel/sparkline/index.d.ts +7 -0
- package/dist/types/modules/excel/sparkline/sparkline.d.ts +206 -0
- package/dist/types/modules/excel/types.d.ts +72 -0
- package/dist/types/modules/excel/utils/address.d.ts +18 -0
- package/dist/types/modules/excel/utils/guid.d.ts +15 -0
- package/dist/types/modules/excel/utils/ooxml-paths.d.ts +74 -0
- package/dist/types/modules/excel/utils/ooxml-validator/check-chart-sidecar.d.ts +35 -0
- package/dist/types/modules/excel/utils/ooxml-validator/check-chart.d.ts +32 -0
- package/dist/types/modules/excel/utils/ooxml-validator/check-chartsheet.d.ts +9 -0
- package/dist/types/modules/excel/utils/ooxml-validator/check-content-types.d.ts +16 -0
- package/dist/types/modules/excel/utils/ooxml-validator/check-drawing.d.ts +34 -0
- package/dist/types/modules/excel/utils/ooxml-validator/check-pivot.d.ts +14 -0
- package/dist/types/modules/excel/utils/ooxml-validator/check-relationships.d.ts +18 -0
- package/dist/types/modules/excel/utils/ooxml-validator/check-structure.d.ts +21 -0
- package/dist/types/modules/excel/utils/ooxml-validator/check-styles.d.ts +15 -0
- package/dist/types/modules/excel/utils/ooxml-validator/check-table.d.ts +31 -0
- package/dist/types/modules/excel/utils/ooxml-validator/check-workbook.d.ts +19 -0
- package/dist/types/modules/excel/utils/ooxml-validator/check-worksheet.d.ts +25 -0
- package/dist/types/modules/excel/utils/ooxml-validator/context.d.ts +85 -0
- package/dist/types/modules/excel/utils/ooxml-validator/index.d.ts +31 -0
- package/dist/types/modules/excel/utils/ooxml-validator/path-utils.d.ts +67 -0
- package/dist/types/modules/excel/utils/ooxml-validator/reporter.d.ts +41 -0
- package/dist/types/modules/excel/utils/ooxml-validator/types.d.ts +109 -0
- package/dist/types/modules/excel/utils/ooxml-validator/xml-utils.d.ts +38 -0
- package/dist/types/modules/excel/workbook.browser.d.ts +248 -30
- package/dist/types/modules/excel/workbook.d.ts +43 -0
- package/dist/types/modules/excel/worksheet.d.ts +157 -3
- package/dist/types/modules/excel/xlsx/rel-type.d.ts +40 -0
- package/dist/types/modules/excel/xlsx/xform/book/defined-name-xform.d.ts +1 -0
- package/dist/types/modules/excel/xlsx/xform/chart/chart-space-xform.d.ts +353 -0
- package/dist/types/modules/excel/xlsx/xform/comment/threaded-comments-xform.d.ts +60 -0
- package/dist/types/modules/excel/xlsx/xform/drawing/drawing-xform.d.ts +30 -0
- package/dist/types/modules/excel/xlsx/xform/drawing/graphic-frame-xform.d.ts +54 -0
- package/dist/types/modules/excel/xlsx/xform/drawing/one-cell-anchor-xform.d.ts +3 -1
- package/dist/types/modules/excel/xlsx/xform/drawing/two-cell-anchor-xform.d.ts +46 -0
- package/dist/types/modules/excel/xlsx/xform/pivot-table/pivot-table-xform.d.ts +13 -2
- package/dist/types/modules/excel/xlsx/xform/sheet/chartsheet-xform.d.ts +185 -0
- package/dist/types/modules/excel/xlsx/xform/sheet/ext-lst-xform.d.ts +1 -0
- package/dist/types/modules/excel/xlsx/xform/xsd-values.d.ts +63 -0
- package/dist/types/modules/excel/xlsx/xlsx.browser.d.ts +115 -21
- package/dist/types/modules/pdf/builder/document-builder.d.ts +74 -0
- package/dist/types/modules/pdf/excel-bridge.d.ts +69 -0
- package/dist/types/modules/pdf/font/font-manager.d.ts +25 -0
- package/dist/types/modules/pdf/index.d.ts +5 -2
- package/dist/types/modules/pdf/render/chart-surface.d.ts +33 -0
- package/dist/types/modules/pdf/render/layout-engine.d.ts +22 -1
- package/dist/types/modules/pdf/types.d.ts +227 -23
- package/dist/types/modules/pdf/word-bridge.d.ts +47 -0
- package/dist/types/modules/word/constants.d.ts +179 -0
- package/dist/types/modules/word/content-types.d.ts +27 -0
- package/dist/types/modules/word/digital-signatures.d.ts +87 -0
- package/dist/types/modules/word/document.d.ts +728 -0
- package/dist/types/modules/word/docx-packager.d.ts +14 -0
- package/dist/types/modules/word/docx-reader.d.ts +11 -0
- package/dist/types/modules/word/encryption.d.ts +102 -0
- package/dist/types/modules/word/errors.d.ts +49 -0
- package/dist/types/modules/word/font-obfuscation.d.ts +31 -0
- package/dist/types/modules/word/html-renderer.d.ts +38 -0
- package/dist/types/modules/word/index.base.d.ts +19 -0
- package/dist/types/modules/word/index.browser.d.ts +4 -0
- package/dist/types/modules/word/index.d.ts +4 -0
- package/dist/types/modules/word/internal-utils.d.ts +23 -0
- package/dist/types/modules/word/relationships.d.ts +31 -0
- package/dist/types/modules/word/types.d.ts +2325 -0
- package/dist/types/modules/word/units.d.ts +49 -0
- package/dist/types/modules/word/writers/chart-writer.d.ts +10 -0
- package/dist/types/modules/word/writers/checkbox-writer.d.ts +9 -0
- package/dist/types/modules/word/writers/comment-writer.d.ts +15 -0
- package/dist/types/modules/word/writers/document-writer.d.ts +16 -0
- package/dist/types/modules/word/writers/footnote-writer.d.ts +11 -0
- package/dist/types/modules/word/writers/header-footer-writer.d.ts +13 -0
- package/dist/types/modules/word/writers/image-writer.d.ts +10 -0
- package/dist/types/modules/word/writers/math-writer.d.ts +9 -0
- package/dist/types/modules/word/writers/numbering-writer.d.ts +10 -0
- package/dist/types/modules/word/writers/paragraph-writer.d.ts +13 -0
- package/dist/types/modules/word/writers/parts-writer.d.ts +26 -0
- package/dist/types/modules/word/writers/run-writer.d.ts +15 -0
- package/dist/types/modules/word/writers/section-writer.d.ts +10 -0
- package/dist/types/modules/word/writers/styles-writer.d.ts +10 -0
- package/dist/types/modules/word/writers/table-writer.d.ts +10 -0
- package/dist/types/modules/word/writers/textbox-writer.d.ts +9 -0
- package/dist/types/modules/word/writers/toc-writer.d.ts +9 -0
- package/dist/types/modules/xml/encode.d.ts +56 -7
- package/package.json +29 -11
- package/dist/browser/modules/excel/utils/ooxml-validator.d.ts +0 -48
- package/dist/browser/modules/excel/utils/ooxml-validator.js +0 -493
- package/dist/browser/modules/excel/utils/passthrough-manager.d.ts +0 -77
- package/dist/browser/modules/excel/utils/passthrough-manager.js +0 -129
- package/dist/cjs/modules/excel/utils/ooxml-validator.js +0 -499
- package/dist/cjs/modules/excel/utils/passthrough-manager.js +0 -133
- package/dist/esm/modules/excel/utils/ooxml-validator.js +0 -493
- package/dist/esm/modules/excel/utils/passthrough-manager.js +0 -129
- package/dist/types/modules/excel/utils/ooxml-validator.d.ts +0 -48
- package/dist/types/modules/excel/utils/passthrough-manager.d.ts +0 -77
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Chartsheet structure check.
|
|
3
|
+
*
|
|
4
|
+
* A chartsheet (`xl/chartsheets/sheetN.xml`) must contain a `<drawing>`
|
|
5
|
+
* reference — the chart itself is always in the linked drawing part.
|
|
6
|
+
* Without it, Excel shows an empty chart sheet.
|
|
7
|
+
*/
|
|
8
|
+
import type { ValidationContext } from "./context.js";
|
|
9
|
+
export declare function checkChartsheet(ctx: ValidationContext): void;
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Chartsheet structure check.
|
|
3
|
+
*
|
|
4
|
+
* A chartsheet (`xl/chartsheets/sheetN.xml`) must contain a `<drawing>`
|
|
5
|
+
* reference — the chart itself is always in the linked drawing part.
|
|
6
|
+
* Without it, Excel shows an empty chart sheet.
|
|
7
|
+
*/
|
|
8
|
+
import { hasDescendantLocal } from "./xml-utils.js";
|
|
9
|
+
const CHARTSHEET_PATH_RE = /^xl\/chartsheets\/sheet\d+\.xml$/;
|
|
10
|
+
export function checkChartsheet(ctx) {
|
|
11
|
+
for (const [path, entry] of ctx.files()) {
|
|
12
|
+
if (ctx.reporter.capped) {
|
|
13
|
+
return;
|
|
14
|
+
}
|
|
15
|
+
if (entry.type === "directory" || !CHARTSHEET_PATH_RE.test(path)) {
|
|
16
|
+
continue;
|
|
17
|
+
}
|
|
18
|
+
const dom = ctx.readDom(path);
|
|
19
|
+
if (!dom) {
|
|
20
|
+
continue;
|
|
21
|
+
}
|
|
22
|
+
if (!hasDescendantLocal(dom.root, "drawing")) {
|
|
23
|
+
ctx.reporter.error("chartsheet-missing-drawing", `${path}: missing drawing reference`, path);
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Content-types check.
|
|
3
|
+
*
|
|
4
|
+
* OPC requires every part in the package to be resolvable to a
|
|
5
|
+
* content-type via either a `<Default Extension=...>` entry or a
|
|
6
|
+
* `<Override PartName=...>` entry. Excel rejects packages where this
|
|
7
|
+
* mapping has gaps — the classic "repairable content" error.
|
|
8
|
+
*
|
|
9
|
+
* Beyond the OPC-mandatory rules, we also enforce Microsoft's
|
|
10
|
+
* well-known part→type expectations for the common OOXML part layouts
|
|
11
|
+
* (chart, pivot, chartsheet, drawing, etc.). A wrong content-type on
|
|
12
|
+
* these parts is one of the top causes of "Excel cannot open" errors
|
|
13
|
+
* because Excel uses the type string to route parsing.
|
|
14
|
+
*/
|
|
15
|
+
import type { ValidationContext } from "./context.js";
|
|
16
|
+
export declare function checkContentTypes(ctx: ValidationContext): void;
|
|
@@ -0,0 +1,181 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Content-types check.
|
|
3
|
+
*
|
|
4
|
+
* OPC requires every part in the package to be resolvable to a
|
|
5
|
+
* content-type via either a `<Default Extension=...>` entry or a
|
|
6
|
+
* `<Override PartName=...>` entry. Excel rejects packages where this
|
|
7
|
+
* mapping has gaps — the classic "repairable content" error.
|
|
8
|
+
*
|
|
9
|
+
* Beyond the OPC-mandatory rules, we also enforce Microsoft's
|
|
10
|
+
* well-known part→type expectations for the common OOXML part layouts
|
|
11
|
+
* (chart, pivot, chartsheet, drawing, etc.). A wrong content-type on
|
|
12
|
+
* these parts is one of the top causes of "Excel cannot open" errors
|
|
13
|
+
* because Excel uses the type string to route parsing.
|
|
14
|
+
*/
|
|
15
|
+
import { getExtension, isLegalPartName, stripLeadingSlash } from "./path-utils.js";
|
|
16
|
+
// -----------------------------------------------------------------------------
|
|
17
|
+
// Well-known content types
|
|
18
|
+
// -----------------------------------------------------------------------------
|
|
19
|
+
const CT = {
|
|
20
|
+
workbook: "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml",
|
|
21
|
+
styles: "application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml",
|
|
22
|
+
sharedStrings: "application/vnd.openxmlformats-officedocument.spreadsheetml.sharedStrings+xml",
|
|
23
|
+
theme: "application/vnd.openxmlformats-officedocument.theme+xml",
|
|
24
|
+
worksheet: "application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml",
|
|
25
|
+
chartsheet: "application/vnd.openxmlformats-officedocument.spreadsheetml.chartsheet+xml",
|
|
26
|
+
chart: "application/vnd.openxmlformats-officedocument.drawingml.chart+xml",
|
|
27
|
+
chartEx: "application/vnd.ms-office.chartex+xml",
|
|
28
|
+
chartStyle: "application/vnd.ms-office.chartstyle+xml",
|
|
29
|
+
chartColors: "application/vnd.ms-office.chartcolorstyle+xml",
|
|
30
|
+
drawing: "application/vnd.openxmlformats-officedocument.drawing+xml",
|
|
31
|
+
pivotTable: "application/vnd.openxmlformats-officedocument.spreadsheetml.pivotTable+xml",
|
|
32
|
+
pivotCacheDefinition: "application/vnd.openxmlformats-officedocument.spreadsheetml.pivotCacheDefinition+xml",
|
|
33
|
+
pivotCacheRecords: "application/vnd.openxmlformats-officedocument.spreadsheetml.pivotCacheRecords+xml",
|
|
34
|
+
comments: "application/vnd.openxmlformats-officedocument.spreadsheetml.comments+xml",
|
|
35
|
+
threadedComments: "application/vnd.ms-excel.threadedcomments+xml",
|
|
36
|
+
externalLink: "application/vnd.openxmlformats-officedocument.spreadsheetml.externalLink+xml",
|
|
37
|
+
tableDef: "application/vnd.openxmlformats-officedocument.spreadsheetml.table+xml",
|
|
38
|
+
calcChain: "application/vnd.openxmlformats-officedocument.spreadsheetml.calcChain+xml",
|
|
39
|
+
app: "application/vnd.openxmlformats-officedocument.extended-properties+xml",
|
|
40
|
+
core: "application/vnd.openxmlformats-package.core-properties+xml"
|
|
41
|
+
};
|
|
42
|
+
/**
|
|
43
|
+
* Path→expected content-type rules. The first matching rule wins. We
|
|
44
|
+
* keep these in a single table so it is easy to audit and extend. Exact
|
|
45
|
+
* string keys take precedence over regex rules for performance and
|
|
46
|
+
* readability.
|
|
47
|
+
*/
|
|
48
|
+
const EXACT_PART_CONTENT_TYPE = {
|
|
49
|
+
"xl/workbook.xml": CT.workbook,
|
|
50
|
+
"xl/styles.xml": CT.styles,
|
|
51
|
+
"xl/sharedStrings.xml": CT.sharedStrings,
|
|
52
|
+
"xl/calcChain.xml": CT.calcChain,
|
|
53
|
+
"docProps/app.xml": CT.app,
|
|
54
|
+
"docProps/core.xml": CT.core
|
|
55
|
+
};
|
|
56
|
+
const PATTERN_RULES = [
|
|
57
|
+
{ pattern: /^xl\/theme\/[^/]+\.xml$/, contentType: CT.theme, label: "theme" },
|
|
58
|
+
{ pattern: /^xl\/worksheets\/sheet\d+\.xml$/, contentType: CT.worksheet, label: "worksheet" },
|
|
59
|
+
{ pattern: /^xl\/chartsheets\/sheet\d+\.xml$/, contentType: CT.chartsheet, label: "chartsheet" },
|
|
60
|
+
{ pattern: /^xl\/charts\/chart\d+\.xml$/, contentType: CT.chart, label: "chart" },
|
|
61
|
+
{ pattern: /^xl\/charts\/chartEx\d+\.xml$/, contentType: CT.chartEx, label: "chartEx" },
|
|
62
|
+
{ pattern: /^xl\/charts\/style\d+\.xml$/, contentType: CT.chartStyle, label: "chart style" },
|
|
63
|
+
{ pattern: /^xl\/charts\/colors\d+\.xml$/, contentType: CT.chartColors, label: "chart colors" },
|
|
64
|
+
{ pattern: /^xl\/charts\/styleEx\d+\.xml$/, contentType: CT.chartStyle, label: "chart styleEx" },
|
|
65
|
+
{
|
|
66
|
+
pattern: /^xl\/charts\/colorsEx\d+\.xml$/,
|
|
67
|
+
contentType: CT.chartColors,
|
|
68
|
+
label: "chart colorsEx"
|
|
69
|
+
},
|
|
70
|
+
{ pattern: /^xl\/drawings\/drawing\d+\.xml$/, contentType: CT.drawing, label: "drawing" },
|
|
71
|
+
{
|
|
72
|
+
pattern: /^xl\/pivotTables\/pivotTable\d+\.xml$/,
|
|
73
|
+
contentType: CT.pivotTable,
|
|
74
|
+
label: "pivot table"
|
|
75
|
+
},
|
|
76
|
+
{
|
|
77
|
+
pattern: /^xl\/pivotCache\/pivotCacheDefinition\d+\.xml$/,
|
|
78
|
+
contentType: CT.pivotCacheDefinition,
|
|
79
|
+
label: "pivot cache definition"
|
|
80
|
+
},
|
|
81
|
+
{
|
|
82
|
+
pattern: /^xl\/pivotCache\/pivotCacheRecords\d+\.xml$/,
|
|
83
|
+
contentType: CT.pivotCacheRecords,
|
|
84
|
+
label: "pivot cache records"
|
|
85
|
+
},
|
|
86
|
+
{ pattern: /^xl\/tables\/table\d+\.xml$/, contentType: CT.tableDef, label: "table" },
|
|
87
|
+
{
|
|
88
|
+
pattern: /^xl\/externalLinks\/externalLink\d+\.xml$/,
|
|
89
|
+
contentType: CT.externalLink,
|
|
90
|
+
label: "external link"
|
|
91
|
+
},
|
|
92
|
+
{ pattern: /^xl\/comments\d+\.xml$/, contentType: CT.comments, label: "comments" },
|
|
93
|
+
{
|
|
94
|
+
pattern: /^xl\/threadedComments\/threadedComment\d+\.xml$/,
|
|
95
|
+
contentType: CT.threadedComments,
|
|
96
|
+
label: "threaded comments"
|
|
97
|
+
}
|
|
98
|
+
];
|
|
99
|
+
function expectedContentType(path) {
|
|
100
|
+
const exact = EXACT_PART_CONTENT_TYPE[path];
|
|
101
|
+
if (exact) {
|
|
102
|
+
return { contentType: exact, label: path };
|
|
103
|
+
}
|
|
104
|
+
for (const rule of PATTERN_RULES) {
|
|
105
|
+
if (rule.pattern.test(path)) {
|
|
106
|
+
return { contentType: rule.contentType, label: rule.label };
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
return undefined;
|
|
110
|
+
}
|
|
111
|
+
// -----------------------------------------------------------------------------
|
|
112
|
+
// Checker
|
|
113
|
+
// -----------------------------------------------------------------------------
|
|
114
|
+
export function checkContentTypes(ctx) {
|
|
115
|
+
if (!ctx.has("[Content_Types].xml")) {
|
|
116
|
+
// checkStructure will already have reported missing-part.
|
|
117
|
+
return;
|
|
118
|
+
}
|
|
119
|
+
const data = ctx.readContentTypes();
|
|
120
|
+
if (!data.parseOk) {
|
|
121
|
+
// context already reported `content-types-malformed`.
|
|
122
|
+
return;
|
|
123
|
+
}
|
|
124
|
+
// Duplicate overrides — we keep the first and report extras.
|
|
125
|
+
for (const pn of data.duplicateOverrides) {
|
|
126
|
+
ctx.reporter.error("content-types-duplicate-override", `Duplicate Override PartName: ${pn}`, "[Content_Types].xml");
|
|
127
|
+
}
|
|
128
|
+
// The two OPC-mandated defaults.
|
|
129
|
+
const relsDefault = data.defaults.get("rels");
|
|
130
|
+
if (relsDefault !== "application/vnd.openxmlformats-package.relationships+xml") {
|
|
131
|
+
ctx.reporter.error("content-types-missing-default", "Missing/incorrect Default for .rels (expected application/vnd.openxmlformats-package.relationships+xml)", "[Content_Types].xml");
|
|
132
|
+
}
|
|
133
|
+
const xmlDefault = data.defaults.get("xml");
|
|
134
|
+
if (xmlDefault !== "application/xml") {
|
|
135
|
+
ctx.reporter.error("content-types-missing-default", "Missing/incorrect Default for .xml (expected application/xml)", "[Content_Types].xml");
|
|
136
|
+
}
|
|
137
|
+
// Every override must point to an existing part.
|
|
138
|
+
for (const [partName, _ct] of data.overrides) {
|
|
139
|
+
if (ctx.reporter.capped) {
|
|
140
|
+
return;
|
|
141
|
+
}
|
|
142
|
+
if (!ctx.has(partName)) {
|
|
143
|
+
ctx.reporter.error("content-types-missing", `Override PartName points to missing file: /${partName}`, "[Content_Types].xml");
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
// Every part in the zip must resolve to a content type and — when we
|
|
147
|
+
// know the expected type — match it.
|
|
148
|
+
for (const [path, entry] of ctx.files()) {
|
|
149
|
+
if (ctx.reporter.capped) {
|
|
150
|
+
return;
|
|
151
|
+
}
|
|
152
|
+
if (entry.type === "directory" || path === "[Content_Types].xml") {
|
|
153
|
+
continue;
|
|
154
|
+
}
|
|
155
|
+
// Reject invalid OPC part names (e.g. containing `\`, ending `/`, or
|
|
156
|
+
// embedded `..`). Excel refuses such packages outright.
|
|
157
|
+
if (!isLegalPartName(path)) {
|
|
158
|
+
ctx.reporter.error("part-name-invalid", `Illegal OPC part name: ${path}`, path);
|
|
159
|
+
}
|
|
160
|
+
const overrideType = data.overrides.get(path);
|
|
161
|
+
const ext = getExtension(path);
|
|
162
|
+
const defaultType = ext ? data.defaults.get(ext) : undefined;
|
|
163
|
+
if (!overrideType && !defaultType) {
|
|
164
|
+
if (!ext) {
|
|
165
|
+
ctx.reporter.error("content-types-missing-for-part", `No content type for part without extension: ${path}`, "[Content_Types].xml");
|
|
166
|
+
}
|
|
167
|
+
else {
|
|
168
|
+
ctx.reporter.error("content-types-missing-for-part", `No Default/Override content type for part: ${path} (extension .${ext})`, "[Content_Types].xml");
|
|
169
|
+
}
|
|
170
|
+
continue;
|
|
171
|
+
}
|
|
172
|
+
const expected = expectedContentType(path);
|
|
173
|
+
if (!expected) {
|
|
174
|
+
continue;
|
|
175
|
+
}
|
|
176
|
+
const actual = overrideType ?? defaultType;
|
|
177
|
+
if (actual !== expected.contentType) {
|
|
178
|
+
ctx.reporter.error("content-types-wrong-for-part", `Unexpected content type for /${stripLeadingSlash(path)}: got "${actual}", expected "${expected.contentType}" (${expected.label})`, "[Content_Types].xml");
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Drawing part structure check.
|
|
3
|
+
*
|
|
4
|
+
* When a drawing file contains `<xdr:graphicFrame>` nodes but neither a
|
|
5
|
+
* classic `<c:chart>` nor a chartEx `<cx:chart>` reference inside them,
|
|
6
|
+
* the graphic frame is dangling — Excel shows a placeholder or drops the
|
|
7
|
+
* frame on load.
|
|
8
|
+
*
|
|
9
|
+
* We also scan anchor coordinates: every anchor must have `from` and
|
|
10
|
+
* `to` child elements, and EMU values (`x`, `y`, `cx`, `cy`,
|
|
11
|
+
* `colOff`, `rowOff`) when present must parse as finite non-negative
|
|
12
|
+
* numbers. Excel rejects anchors with NaN coordinates outright.
|
|
13
|
+
*
|
|
14
|
+
* Finally we enforce the ChartEx drawing-wrapper invariants that
|
|
15
|
+
* trigger "Removed Part: /xl/drawings/drawingN.xml (Drawing shape)"
|
|
16
|
+
* in production Excel logs:
|
|
17
|
+
*
|
|
18
|
+
* - Any `<cx:chart>` reference MUST live inside an
|
|
19
|
+
* `<mc:AlternateContent>` block. The Microsoft ChartEx schema was
|
|
20
|
+
* never part of the base OOXML spec, so Excel's strict loader
|
|
21
|
+
* requires MC substitution so legacy readers see a fallback shape.
|
|
22
|
+
* - The `<mc:Fallback>` MUST be non-empty. An empty Fallback
|
|
23
|
+
* collapses the anchor to nothing on clients that take that
|
|
24
|
+
* branch, and Excel's strict loader has been observed to reject
|
|
25
|
+
* the drawing even on the Choice branch when it sees the
|
|
26
|
+
* degenerate Fallback.
|
|
27
|
+
* - `<mc:AlternateContent>` lives INSIDE the `<xdr:twoCellAnchor>`
|
|
28
|
+
* shape slot (between `<xdr:to>` and `<xdr:clientData>`), NOT
|
|
29
|
+
* around the whole anchor. Wrapping the entire anchor duplicates
|
|
30
|
+
* `<xdr:from>`/`<xdr:to>` across Choice and Fallback, which Excel
|
|
31
|
+
* rejects even though MC substitution permits it in theory.
|
|
32
|
+
*/
|
|
33
|
+
import type { ValidationContext } from "./context.js";
|
|
34
|
+
export declare function checkDrawing(ctx: ValidationContext): void;
|
|
@@ -0,0 +1,267 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Drawing part structure check.
|
|
3
|
+
*
|
|
4
|
+
* When a drawing file contains `<xdr:graphicFrame>` nodes but neither a
|
|
5
|
+
* classic `<c:chart>` nor a chartEx `<cx:chart>` reference inside them,
|
|
6
|
+
* the graphic frame is dangling — Excel shows a placeholder or drops the
|
|
7
|
+
* frame on load.
|
|
8
|
+
*
|
|
9
|
+
* We also scan anchor coordinates: every anchor must have `from` and
|
|
10
|
+
* `to` child elements, and EMU values (`x`, `y`, `cx`, `cy`,
|
|
11
|
+
* `colOff`, `rowOff`) when present must parse as finite non-negative
|
|
12
|
+
* numbers. Excel rejects anchors with NaN coordinates outright.
|
|
13
|
+
*
|
|
14
|
+
* Finally we enforce the ChartEx drawing-wrapper invariants that
|
|
15
|
+
* trigger "Removed Part: /xl/drawings/drawingN.xml (Drawing shape)"
|
|
16
|
+
* in production Excel logs:
|
|
17
|
+
*
|
|
18
|
+
* - Any `<cx:chart>` reference MUST live inside an
|
|
19
|
+
* `<mc:AlternateContent>` block. The Microsoft ChartEx schema was
|
|
20
|
+
* never part of the base OOXML spec, so Excel's strict loader
|
|
21
|
+
* requires MC substitution so legacy readers see a fallback shape.
|
|
22
|
+
* - The `<mc:Fallback>` MUST be non-empty. An empty Fallback
|
|
23
|
+
* collapses the anchor to nothing on clients that take that
|
|
24
|
+
* branch, and Excel's strict loader has been observed to reject
|
|
25
|
+
* the drawing even on the Choice branch when it sees the
|
|
26
|
+
* degenerate Fallback.
|
|
27
|
+
* - `<mc:AlternateContent>` lives INSIDE the `<xdr:twoCellAnchor>`
|
|
28
|
+
* shape slot (between `<xdr:to>` and `<xdr:clientData>`), NOT
|
|
29
|
+
* around the whole anchor. Wrapping the entire anchor duplicates
|
|
30
|
+
* `<xdr:from>`/`<xdr:to>` across Choice and Fallback, which Excel
|
|
31
|
+
* rejects even though MC substitution permits it in theory.
|
|
32
|
+
*/
|
|
33
|
+
import { attrByLocalName, collectDescendantsLocal, findChildLocal, findChildrenLocal, hasDescendantLocal, matchesLocal } from "./xml-utils.js";
|
|
34
|
+
const DRAWING_PATH_RE = /^xl\/drawings\/drawing\d+\.xml$/;
|
|
35
|
+
export function checkDrawing(ctx) {
|
|
36
|
+
for (const [path, entry] of ctx.files()) {
|
|
37
|
+
if (ctx.reporter.capped) {
|
|
38
|
+
return;
|
|
39
|
+
}
|
|
40
|
+
if (entry.type === "directory" || !DRAWING_PATH_RE.test(path)) {
|
|
41
|
+
continue;
|
|
42
|
+
}
|
|
43
|
+
checkSingleDrawing(ctx, path);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
function checkSingleDrawing(ctx, path) {
|
|
47
|
+
const dom = ctx.readDom(path);
|
|
48
|
+
if (!dom) {
|
|
49
|
+
return;
|
|
50
|
+
}
|
|
51
|
+
const root = dom.root;
|
|
52
|
+
// Graphic frame without embedded chart reference.
|
|
53
|
+
for (const gf of collectDescendantsLocal(root, "graphicFrame")) {
|
|
54
|
+
const hasChartFrame = hasDescendantLocal(gf, "chart");
|
|
55
|
+
if (!hasChartFrame) {
|
|
56
|
+
ctx.reporter.error("drawing-graphicFrame-missing-chart", `${path}: xdr:graphicFrame has no c:chart or cx:chart reference`, path);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
// AlternateContent wrap at drawing-root level is the "outer wrap"
|
|
60
|
+
// writer bug — but ONLY for chartEx (`Requires="cx1"` / `"cx"`).
|
|
61
|
+
// Form-control legacy wrappers (`Requires="a14"`) legitimately
|
|
62
|
+
// wrap the whole anchor and Excel handles them fine; those are
|
|
63
|
+
// not the chartEx bug this rule targets. When the whole anchor
|
|
64
|
+
// is wrapped for chartEx, `<xdr:from>` / `<xdr:to>` get
|
|
65
|
+
// duplicated inside Choice and Fallback and Excel rejects the
|
|
66
|
+
// drawing.
|
|
67
|
+
for (const child of root.children) {
|
|
68
|
+
if (child.type === "element" && matchesLocal(child.name, "AlternateContent")) {
|
|
69
|
+
// Only flag if the AlternateContent contains anchor elements —
|
|
70
|
+
// otherwise it might be a root-level extension that's fine.
|
|
71
|
+
if (hasDescendantLocal(child, "twoCellAnchor") ||
|
|
72
|
+
hasDescendantLocal(child, "oneCellAnchor") ||
|
|
73
|
+
hasDescendantLocal(child, "absoluteAnchor")) {
|
|
74
|
+
// Look for a Choice with Requires="cx1" / "cx" — those mean
|
|
75
|
+
// chartEx, which is the bug this rule flags. If the Choice
|
|
76
|
+
// uses any other prefix ("a14" for form controls, etc.) the
|
|
77
|
+
// outer wrap is the Microsoft-sanctioned shape and we skip.
|
|
78
|
+
const choiceRequires = findChoiceRequires(child);
|
|
79
|
+
if (choiceRequires === "cx" || choiceRequires === "cx1") {
|
|
80
|
+
ctx.reporter.error("drawing-chartEx-alternateContent-outer-wrap", `${path}: <mc:AlternateContent> wraps the entire anchor. ` +
|
|
81
|
+
`Move it INSIDE <xdr:twoCellAnchor>, after <xdr:to> and before ` +
|
|
82
|
+
`<xdr:clientData>, so <xdr:from>/<xdr:to> are not duplicated.`, path);
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
// Anchors.
|
|
88
|
+
for (const anchorName of ["twoCellAnchor", "oneCellAnchor", "absoluteAnchor"]) {
|
|
89
|
+
for (const anchor of findChildrenLocal(root, anchorName)) {
|
|
90
|
+
checkAnchor(ctx, path, anchor);
|
|
91
|
+
checkChartExWrapping(ctx, path, anchor);
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
// -----------------------------------------------------------------------------
|
|
96
|
+
// ChartEx AlternateContent wrapping
|
|
97
|
+
// -----------------------------------------------------------------------------
|
|
98
|
+
/**
|
|
99
|
+
* For every anchor: if it hosts a `<cx:chart>` reference, that
|
|
100
|
+
* reference MUST be wrapped in `<mc:AlternateContent>` (inside the
|
|
101
|
+
* anchor) with a non-empty `<mc:Fallback>`. This mirrors what Excel
|
|
102
|
+
* itself writes for every ChartEx drawing.
|
|
103
|
+
*/
|
|
104
|
+
function checkChartExWrapping(ctx, path, anchor) {
|
|
105
|
+
// Collect every `<cx:chart>` descendant of the anchor.
|
|
106
|
+
const chartExRefs = collectDescendantsLocal(anchor, "chart").filter(el => {
|
|
107
|
+
// Distinguish `<cx:chart>` (ChartEx) from `<c:chart>` (classic) by
|
|
108
|
+
// namespace prefix. Both have local name "chart".
|
|
109
|
+
const idx = el.name.indexOf(":");
|
|
110
|
+
return idx !== -1 && el.name.slice(0, idx) === "cx";
|
|
111
|
+
});
|
|
112
|
+
if (chartExRefs.length === 0) {
|
|
113
|
+
return;
|
|
114
|
+
}
|
|
115
|
+
// Is there an `<mc:AlternateContent>` direct child?
|
|
116
|
+
const alternateContent = anchor.children.find((c) => c.type === "element" && matchesLocal(c.name, "AlternateContent"));
|
|
117
|
+
if (!alternateContent) {
|
|
118
|
+
ctx.reporter.error("drawing-chartEx-missing-alternateContent-wrap", `${path}: anchor contains <cx:chart> but has no <mc:AlternateContent> wrapper. ` +
|
|
119
|
+
`ChartEx drawings must place the <xdr:graphicFrame> inside ` +
|
|
120
|
+
`<mc:AlternateContent><mc:Choice>…</mc:Choice><mc:Fallback>…</mc:Fallback></mc:AlternateContent>.`, path);
|
|
121
|
+
return;
|
|
122
|
+
}
|
|
123
|
+
// Fallback must be non-empty.
|
|
124
|
+
const fallback = findChildLocal(alternateContent, "Fallback");
|
|
125
|
+
if (!fallback) {
|
|
126
|
+
ctx.reporter.error("drawing-chartEx-alternateContent-empty-fallback", `${path}: <mc:AlternateContent> has no <mc:Fallback>. ` +
|
|
127
|
+
`Excel's strict loader rejects drawings whose Fallback is missing.`, path);
|
|
128
|
+
return;
|
|
129
|
+
}
|
|
130
|
+
const fallbackHasChildren = fallback.children.some(c => c.type === "element");
|
|
131
|
+
if (!fallbackHasChildren) {
|
|
132
|
+
ctx.reporter.error("drawing-chartEx-alternateContent-empty-fallback", `${path}: <mc:Fallback> is empty. ` +
|
|
133
|
+
`Provide a non-empty legacy shape (e.g. <xdr:sp>) so non-ChartEx ` +
|
|
134
|
+
`readers see a placeholder instead of collapsing the anchor.`, path);
|
|
135
|
+
return;
|
|
136
|
+
}
|
|
137
|
+
// Office creation-id extension. Warning-level: not strictly required
|
|
138
|
+
// by the base OOXML schema, but strict Excel builds have been seen
|
|
139
|
+
// dropping chartEx drawings that lack the extension.
|
|
140
|
+
// Structure: xdr:graphicFrame/xdr:nvGraphicFramePr/xdr:cNvPr/a:extLst/a:ext/a16:creationId
|
|
141
|
+
// We locate the graphicFrame inside Choice and walk down.
|
|
142
|
+
const choice = findChildLocal(alternateContent, "Choice");
|
|
143
|
+
if (!choice) {
|
|
144
|
+
return;
|
|
145
|
+
}
|
|
146
|
+
const graphicFrame = findChildLocal(choice, "graphicFrame");
|
|
147
|
+
if (!graphicFrame) {
|
|
148
|
+
return;
|
|
149
|
+
}
|
|
150
|
+
const nvGraphicFramePr = findChildLocal(graphicFrame, "nvGraphicFramePr");
|
|
151
|
+
if (!nvGraphicFramePr) {
|
|
152
|
+
return;
|
|
153
|
+
}
|
|
154
|
+
const cNvPr = findChildLocal(nvGraphicFramePr, "cNvPr");
|
|
155
|
+
if (!cNvPr) {
|
|
156
|
+
return;
|
|
157
|
+
}
|
|
158
|
+
const extLst = findChildLocal(cNvPr, "extLst");
|
|
159
|
+
const hasCreationId = !!extLst && collectDescendantsLocal(extLst, "creationId").length > 0;
|
|
160
|
+
if (!hasCreationId) {
|
|
161
|
+
ctx.reporter.warning("drawing-chartEx-missing-creationId", `${path}: chartEx drawing <xdr:cNvPr> missing Office creation-id extension ` +
|
|
162
|
+
`(<a:extLst>/<a:ext>/<a16:creationId>). Strict Excel builds may drop the drawing ` +
|
|
163
|
+
`on load without it.`, path);
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
function checkAnchor(ctx, path, anchor) {
|
|
167
|
+
const name = anchor.name.includes(":")
|
|
168
|
+
? anchor.name.slice(anchor.name.lastIndexOf(":") + 1)
|
|
169
|
+
: anchor.name;
|
|
170
|
+
// twoCellAnchor requires from+to; oneCellAnchor requires from+ext;
|
|
171
|
+
// absoluteAnchor requires pos+ext.
|
|
172
|
+
if (name === "twoCellAnchor") {
|
|
173
|
+
if (!findChildLocal(anchor, "from") || !findChildLocal(anchor, "to")) {
|
|
174
|
+
ctx.reporter.error("drawing-anchor-missing", `${path}: ${name} missing from/to`, path);
|
|
175
|
+
return;
|
|
176
|
+
}
|
|
177
|
+
checkCellAnchor(ctx, path, findChildLocal(anchor, "from"));
|
|
178
|
+
checkCellAnchor(ctx, path, findChildLocal(anchor, "to"));
|
|
179
|
+
}
|
|
180
|
+
else if (name === "oneCellAnchor") {
|
|
181
|
+
if (!findChildLocal(anchor, "from") || !findChildLocal(anchor, "ext")) {
|
|
182
|
+
ctx.reporter.error("drawing-anchor-missing", `${path}: ${name} missing from/ext`, path);
|
|
183
|
+
return;
|
|
184
|
+
}
|
|
185
|
+
checkCellAnchor(ctx, path, findChildLocal(anchor, "from"));
|
|
186
|
+
checkExtOrPos(ctx, path, findChildLocal(anchor, "ext"), "ext");
|
|
187
|
+
}
|
|
188
|
+
else if (name === "absoluteAnchor") {
|
|
189
|
+
if (!findChildLocal(anchor, "pos") || !findChildLocal(anchor, "ext")) {
|
|
190
|
+
ctx.reporter.error("drawing-anchor-missing", `${path}: ${name} missing pos/ext`, path);
|
|
191
|
+
return;
|
|
192
|
+
}
|
|
193
|
+
checkExtOrPos(ctx, path, findChildLocal(anchor, "pos"), "pos");
|
|
194
|
+
checkExtOrPos(ctx, path, findChildLocal(anchor, "ext"), "ext");
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
function checkCellAnchor(ctx, path, cellAnchor) {
|
|
198
|
+
if (!cellAnchor) {
|
|
199
|
+
return;
|
|
200
|
+
}
|
|
201
|
+
// Children are col / colOff / row / rowOff (as xdr:col etc.). Each is a
|
|
202
|
+
// plain-text integer. A non-integer is typically the result of a writer
|
|
203
|
+
// that stringified `undefined` / `null` — Excel silently repairs the
|
|
204
|
+
// anchor (the "Removed Part: Drawing shape" message) but the file
|
|
205
|
+
// still opens. So we downgrade this to a warning.
|
|
206
|
+
for (const tag of ["col", "colOff", "row", "rowOff"]) {
|
|
207
|
+
const el = findChildLocal(cellAnchor, tag);
|
|
208
|
+
if (!el) {
|
|
209
|
+
continue; // some producers elide zero offsets — tolerate.
|
|
210
|
+
}
|
|
211
|
+
const text = collectText(el).trim();
|
|
212
|
+
const n = parseInt(text, 10);
|
|
213
|
+
if (!Number.isFinite(n)) {
|
|
214
|
+
ctx.reporter.warning("drawing-anchor-invalid-coords", `${path}: anchor ${tag}=${JSON.stringify(text)} is not an integer`, path);
|
|
215
|
+
}
|
|
216
|
+
// Negatives are permitted for colOff/rowOff in some corner cases
|
|
217
|
+
// (e.g. partial-cell anchors slight-past zero). Only warn on NaN.
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
function checkExtOrPos(ctx, path, el, kind) {
|
|
221
|
+
if (!el) {
|
|
222
|
+
return;
|
|
223
|
+
}
|
|
224
|
+
const attrs = kind === "ext" ? ["cx", "cy"] : ["x", "y"];
|
|
225
|
+
for (const a of attrs) {
|
|
226
|
+
const v = attrByLocalName(el, a);
|
|
227
|
+
if (v === undefined) {
|
|
228
|
+
continue;
|
|
229
|
+
}
|
|
230
|
+
const n = parseInt(v, 10);
|
|
231
|
+
if (!Number.isFinite(n)) {
|
|
232
|
+
ctx.reporter.warning("drawing-anchor-invalid-coords", `${path}: ${kind} ${a}=${JSON.stringify(v)} is not a valid EMU integer`, path);
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
function collectText(el) {
|
|
237
|
+
let out = "";
|
|
238
|
+
for (const child of el.children) {
|
|
239
|
+
if (child.type === "text" || child.type === "cdata") {
|
|
240
|
+
out += child.value;
|
|
241
|
+
}
|
|
242
|
+
else if (child.type === "element") {
|
|
243
|
+
out += collectText(child);
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
return out;
|
|
247
|
+
}
|
|
248
|
+
/**
|
|
249
|
+
* Extract the `Requires` value from the first `<mc:Choice>` inside an
|
|
250
|
+
* `<mc:AlternateContent>` block. Used by the outer-wrap rule to skip
|
|
251
|
+
* form-control (`Requires="a14"`) anchors — only chartEx
|
|
252
|
+
* (`Requires="cx1"` / `"cx"`) should trigger the diagnostic.
|
|
253
|
+
*
|
|
254
|
+
* Returns `undefined` when no Choice with a `Requires` attribute is
|
|
255
|
+
* found.
|
|
256
|
+
*/
|
|
257
|
+
function findChoiceRequires(ac) {
|
|
258
|
+
for (const child of ac.children) {
|
|
259
|
+
if (child.type === "element" && matchesLocal(child.name, "Choice")) {
|
|
260
|
+
const req = attrByLocalName(child, "Requires");
|
|
261
|
+
if (req !== undefined) {
|
|
262
|
+
return req;
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
}
|
|
266
|
+
return undefined;
|
|
267
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pivot table & pivot cache check.
|
|
3
|
+
*
|
|
4
|
+
* Each `xl/pivotTables/pivotTableN.xml` declares a `cacheId` that must be
|
|
5
|
+
* registered in the workbook's `<pivotCaches>` list; the cache in turn
|
|
6
|
+
* must back a live pivotCacheDefinition/pivotCacheRecords pair.
|
|
7
|
+
*
|
|
8
|
+
* We do a lightweight cross-reference check: (a) every pivot table
|
|
9
|
+
* advertises a cacheId that resolves to a `<pivotCache>` entry in
|
|
10
|
+
* workbook.xml, and (b) each referenced pivotCacheDefinition's rels point
|
|
11
|
+
* at a pivotCacheRecords file that actually exists.
|
|
12
|
+
*/
|
|
13
|
+
import type { ValidationContext } from "./context.js";
|
|
14
|
+
export declare function checkPivot(ctx: ValidationContext): void;
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pivot table & pivot cache check.
|
|
3
|
+
*
|
|
4
|
+
* Each `xl/pivotTables/pivotTableN.xml` declares a `cacheId` that must be
|
|
5
|
+
* registered in the workbook's `<pivotCaches>` list; the cache in turn
|
|
6
|
+
* must back a live pivotCacheDefinition/pivotCacheRecords pair.
|
|
7
|
+
*
|
|
8
|
+
* We do a lightweight cross-reference check: (a) every pivot table
|
|
9
|
+
* advertises a cacheId that resolves to a `<pivotCache>` entry in
|
|
10
|
+
* workbook.xml, and (b) each referenced pivotCacheDefinition's rels point
|
|
11
|
+
* at a pivotCacheRecords file that actually exists.
|
|
12
|
+
*/
|
|
13
|
+
import { attrByLocalName, findChildLocal, findChildrenLocal } from "./xml-utils.js";
|
|
14
|
+
const PIVOT_TABLE_RE = /^xl\/pivotTables\/pivotTable\d+\.xml$/;
|
|
15
|
+
const WORKBOOK_PATH = "xl/workbook.xml";
|
|
16
|
+
export function checkPivot(ctx) {
|
|
17
|
+
const declared = collectWorkbookPivotCaches(ctx);
|
|
18
|
+
for (const [path, entry] of ctx.files()) {
|
|
19
|
+
if (ctx.reporter.capped) {
|
|
20
|
+
return;
|
|
21
|
+
}
|
|
22
|
+
if (entry.type === "directory" || !PIVOT_TABLE_RE.test(path)) {
|
|
23
|
+
continue;
|
|
24
|
+
}
|
|
25
|
+
const dom = ctx.readDom(path);
|
|
26
|
+
if (!dom) {
|
|
27
|
+
continue;
|
|
28
|
+
}
|
|
29
|
+
const cacheId = attrByLocalName(dom.root, "cacheId");
|
|
30
|
+
if (cacheId === undefined) {
|
|
31
|
+
ctx.reporter.error("pivot-missing-cacheId", `${path}: missing cacheId attribute`, path);
|
|
32
|
+
continue;
|
|
33
|
+
}
|
|
34
|
+
if (!declared.has(cacheId)) {
|
|
35
|
+
ctx.reporter.error("pivot-cacheId-not-in-workbook", `${path}: cacheId="${cacheId}" is not declared in workbook <pivotCaches>`, path);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
// Each pivotCacheDefinition.rels should point at a pivotCacheRecords file
|
|
39
|
+
// that exists inside the package.
|
|
40
|
+
for (const [path, entry] of ctx.files()) {
|
|
41
|
+
if (ctx.reporter.capped) {
|
|
42
|
+
return;
|
|
43
|
+
}
|
|
44
|
+
if (entry.type === "directory" ||
|
|
45
|
+
!/^xl\/pivotCache\/pivotCacheDefinition\d+\.xml$/.test(path)) {
|
|
46
|
+
continue;
|
|
47
|
+
}
|
|
48
|
+
const defRels = ctx.readRels(defaultRelsPath(path));
|
|
49
|
+
const recordsRel = defRels.rels.find(r => r.type.includes("pivotCacheRecords"));
|
|
50
|
+
if (recordsRel) {
|
|
51
|
+
const resolved = recordsRel.target.startsWith("/")
|
|
52
|
+
? recordsRel.target.slice(1)
|
|
53
|
+
: joinPath(parentDir(path), recordsRel.target);
|
|
54
|
+
if (!ctx.has(resolved)) {
|
|
55
|
+
ctx.reporter.error("pivot-cacheRecords-missing", `${path}: references missing pivotCacheRecords file ${resolved}`, path);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
function collectWorkbookPivotCaches(ctx) {
|
|
61
|
+
const ids = new Set();
|
|
62
|
+
if (!ctx.has(WORKBOOK_PATH)) {
|
|
63
|
+
return ids;
|
|
64
|
+
}
|
|
65
|
+
const dom = ctx.readDom(WORKBOOK_PATH);
|
|
66
|
+
if (!dom) {
|
|
67
|
+
return ids;
|
|
68
|
+
}
|
|
69
|
+
const pivotCaches = findChildLocal(dom.root, "pivotCaches");
|
|
70
|
+
if (!pivotCaches) {
|
|
71
|
+
return ids;
|
|
72
|
+
}
|
|
73
|
+
for (const pc of findChildrenLocal(pivotCaches, "pivotCache")) {
|
|
74
|
+
const id = attrByLocalName(pc, "cacheId");
|
|
75
|
+
if (id !== undefined) {
|
|
76
|
+
ids.add(id);
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
return ids;
|
|
80
|
+
}
|
|
81
|
+
function defaultRelsPath(partPath) {
|
|
82
|
+
const dir = parentDir(partPath);
|
|
83
|
+
const base = partPath.slice(dir.length ? dir.length + 1 : 0);
|
|
84
|
+
return dir ? `${dir}/_rels/${base}.rels` : `_rels/${base}.rels`;
|
|
85
|
+
}
|
|
86
|
+
function parentDir(p) {
|
|
87
|
+
const idx = p.lastIndexOf("/");
|
|
88
|
+
return idx === -1 ? "" : p.slice(0, idx);
|
|
89
|
+
}
|
|
90
|
+
function joinPath(dir, target) {
|
|
91
|
+
// Resolve `./foo/bar` or `../baz` relative to `dir`.
|
|
92
|
+
const parts = dir ? dir.split("/") : [];
|
|
93
|
+
for (const seg of target.split("/")) {
|
|
94
|
+
if (seg === "" || seg === ".") {
|
|
95
|
+
continue;
|
|
96
|
+
}
|
|
97
|
+
if (seg === "..") {
|
|
98
|
+
parts.pop();
|
|
99
|
+
continue;
|
|
100
|
+
}
|
|
101
|
+
parts.push(seg);
|
|
102
|
+
}
|
|
103
|
+
return parts.join("/");
|
|
104
|
+
}
|