@cj-tech-master/excelts 3.1.0-canary.20260102071304.d80b29d → 4.0.0-canary.20260103013222.0e5d37f
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/README.md +2 -2
- package/README_zh.md +2 -2
- package/dist/browser/index.browser.d.ts +25 -0
- package/dist/browser/index.browser.js +40 -0
- package/dist/browser/index.d.ts +23 -0
- package/dist/browser/index.js +35 -0
- package/dist/browser/modules/archive/byte-queue.d.ts +18 -0
- package/dist/browser/modules/archive/byte-queue.js +125 -0
- package/dist/browser/modules/archive/compress.base.d.ts +98 -0
- package/dist/browser/modules/archive/compress.base.js +173 -0
- package/dist/browser/modules/archive/compress.browser.d.ts +57 -0
- package/dist/browser/modules/archive/compress.browser.js +93 -0
- package/dist/browser/modules/archive/compress.d.ts +44 -0
- package/dist/browser/modules/archive/compress.js +86 -0
- package/dist/browser/modules/archive/crc32.base.d.ts +25 -0
- package/dist/browser/modules/archive/crc32.base.js +51 -0
- package/dist/browser/modules/archive/crc32.browser.d.ts +30 -0
- package/dist/browser/modules/archive/crc32.browser.js +32 -0
- package/dist/browser/modules/archive/crc32.d.ts +59 -0
- package/dist/browser/modules/archive/crc32.js +97 -0
- package/dist/browser/modules/archive/defaults.d.ts +4 -0
- package/dist/browser/modules/archive/defaults.js +3 -0
- package/dist/browser/modules/archive/deflate-fallback.d.ts +39 -0
- package/dist/browser/modules/archive/deflate-fallback.js +564 -0
- package/dist/browser/modules/archive/extract.d.ts +94 -0
- package/dist/browser/modules/archive/extract.js +106 -0
- package/dist/browser/modules/archive/index.base.d.ts +11 -0
- package/dist/browser/modules/archive/index.base.js +13 -0
- package/dist/browser/modules/archive/index.browser.d.ts +11 -0
- package/dist/browser/modules/archive/index.browser.js +17 -0
- package/dist/browser/modules/archive/index.d.ts +11 -0
- package/dist/browser/modules/archive/index.js +15 -0
- package/dist/browser/modules/archive/parse.base.d.ts +198 -0
- package/dist/browser/modules/archive/parse.base.js +610 -0
- package/dist/browser/modules/archive/parse.browser.d.ts +22 -0
- package/dist/browser/modules/archive/parse.browser.js +564 -0
- package/dist/browser/modules/archive/parse.d.ts +16 -0
- package/dist/browser/modules/archive/parse.js +94 -0
- package/dist/browser/modules/archive/streaming-compress.base.d.ts +36 -0
- package/dist/browser/modules/archive/streaming-compress.base.js +9 -0
- package/dist/browser/modules/archive/streaming-compress.browser.d.ts +26 -0
- package/dist/browser/modules/archive/streaming-compress.browser.js +296 -0
- package/dist/browser/modules/archive/streaming-compress.d.ts +22 -0
- package/dist/browser/modules/archive/streaming-compress.js +68 -0
- package/dist/browser/modules/archive/streaming-zip.d.ts +120 -0
- package/dist/browser/modules/archive/streaming-zip.js +407 -0
- package/dist/browser/modules/archive/utils/binary.d.ts +24 -0
- package/dist/browser/modules/archive/utils/binary.js +69 -0
- package/dist/browser/modules/archive/utils/bytes.d.ts +7 -0
- package/dist/browser/modules/archive/utils/bytes.js +101 -0
- package/dist/browser/modules/archive/utils/parse-buffer.d.ts +18 -0
- package/dist/browser/modules/archive/utils/parse-buffer.js +55 -0
- package/dist/browser/modules/archive/utils/text.d.ts +20 -0
- package/dist/browser/modules/archive/utils/text.js +33 -0
- package/dist/browser/modules/archive/utils/timestamps.d.ts +28 -0
- package/dist/browser/modules/archive/utils/timestamps.js +48 -0
- package/dist/browser/modules/archive/utils/zip-extra-fields.d.ts +19 -0
- package/dist/browser/modules/archive/utils/zip-extra-fields.js +72 -0
- package/dist/browser/modules/archive/utils/zip-extra.d.ts +18 -0
- package/dist/browser/modules/archive/utils/zip-extra.js +68 -0
- package/dist/browser/modules/archive/zip-builder.d.ts +117 -0
- package/dist/browser/modules/archive/zip-builder.js +292 -0
- package/dist/browser/modules/archive/zip-constants.d.ts +18 -0
- package/dist/browser/modules/archive/zip-constants.js +23 -0
- package/dist/browser/modules/archive/zip-entry-info.d.ts +29 -0
- package/dist/browser/modules/archive/zip-entry-info.js +6 -0
- package/dist/browser/modules/archive/zip-entry-metadata.d.ts +23 -0
- package/dist/browser/modules/archive/zip-entry-metadata.js +24 -0
- package/dist/browser/modules/archive/zip-parser.d.ts +62 -0
- package/dist/browser/modules/archive/zip-parser.js +332 -0
- package/dist/browser/modules/archive/zip-records.d.ts +43 -0
- package/dist/browser/modules/archive/zip-records.js +84 -0
- package/dist/browser/modules/csv/csv-core.d.ts +215 -0
- package/dist/browser/modules/csv/csv-core.js +723 -0
- package/dist/browser/modules/csv/csv-number.d.ts +3 -0
- package/dist/browser/modules/csv/csv-number.js +20 -0
- package/dist/browser/modules/csv/csv-stream.d.ts +121 -0
- package/dist/browser/modules/csv/csv-stream.js +703 -0
- package/dist/browser/modules/csv/csv.browser.d.ts +60 -0
- package/dist/browser/modules/csv/csv.browser.js +265 -0
- package/dist/browser/modules/csv/csv.d.ts +14 -0
- package/dist/browser/modules/csv/csv.js +29 -0
- package/dist/browser/modules/excel/anchor.d.ts +33 -0
- package/dist/browser/modules/excel/anchor.js +97 -0
- package/dist/browser/modules/excel/cell.d.ts +138 -0
- package/dist/browser/modules/excel/cell.js +946 -0
- package/dist/browser/modules/excel/column.d.ts +122 -0
- package/dist/browser/modules/excel/column.js +358 -0
- package/dist/browser/modules/excel/data-validations.d.ts +11 -0
- package/dist/browser/modules/excel/data-validations.js +43 -0
- package/dist/browser/modules/excel/defined-names.d.ts +37 -0
- package/dist/browser/modules/excel/defined-names.js +214 -0
- package/dist/browser/modules/excel/enums.d.ts +62 -0
- package/dist/browser/modules/excel/enums.js +58 -0
- package/dist/browser/modules/excel/image.d.ts +64 -0
- package/dist/browser/modules/excel/image.js +60 -0
- package/dist/browser/modules/excel/note.d.ts +29 -0
- package/dist/browser/modules/excel/note.js +61 -0
- package/dist/browser/modules/excel/pivot-table.d.ts +152 -0
- package/dist/browser/modules/excel/pivot-table.js +237 -0
- package/dist/browser/modules/excel/range.d.ts +62 -0
- package/dist/browser/modules/excel/range.js +280 -0
- package/dist/browser/modules/excel/row.d.ts +127 -0
- package/dist/browser/modules/excel/row.js +441 -0
- package/dist/browser/modules/excel/stream/hyperlink-reader.d.ts +33 -0
- package/dist/browser/modules/excel/stream/hyperlink-reader.js +84 -0
- package/dist/browser/modules/excel/stream/sheet-comments-writer.d.ts +26 -0
- package/dist/browser/modules/excel/stream/sheet-comments-writer.js +101 -0
- package/dist/browser/modules/excel/stream/sheet-rels-writer.d.ts +45 -0
- package/dist/browser/modules/excel/stream/sheet-rels-writer.js +91 -0
- package/dist/browser/modules/excel/stream/workbook-reader.browser.d.ts +169 -0
- package/dist/browser/modules/excel/stream/workbook-reader.browser.js +443 -0
- package/dist/browser/modules/excel/stream/workbook-reader.d.ts +24 -0
- package/dist/browser/modules/excel/stream/workbook-reader.js +50 -0
- package/dist/browser/modules/excel/stream/workbook-writer.browser.d.ts +147 -0
- package/dist/browser/modules/excel/stream/workbook-writer.browser.js +356 -0
- package/dist/browser/modules/excel/stream/workbook-writer.d.ts +31 -0
- package/dist/browser/modules/excel/stream/workbook-writer.js +52 -0
- package/dist/browser/modules/excel/stream/worksheet-reader.d.ts +61 -0
- package/dist/browser/modules/excel/stream/worksheet-reader.js +367 -0
- package/dist/browser/modules/excel/stream/worksheet-writer.d.ts +140 -0
- package/dist/browser/modules/excel/stream/worksheet-writer.js +613 -0
- package/dist/browser/modules/excel/table.d.ts +81 -0
- package/dist/browser/modules/excel/table.js +405 -0
- package/dist/browser/modules/excel/types.d.ts +518 -0
- package/dist/browser/modules/excel/types.js +22 -0
- package/dist/browser/modules/excel/utils/cell-format.d.ts +32 -0
- package/dist/browser/modules/excel/utils/cell-format.js +814 -0
- package/dist/browser/modules/excel/utils/cell-matrix.d.ts +37 -0
- package/dist/browser/modules/excel/utils/cell-matrix.js +180 -0
- package/dist/browser/modules/excel/utils/col-cache.d.ts +36 -0
- package/dist/browser/modules/excel/utils/col-cache.js +278 -0
- package/dist/browser/modules/excel/utils/copy-style.d.ts +5 -0
- package/dist/browser/modules/excel/utils/copy-style.js +43 -0
- package/dist/browser/modules/excel/utils/encryptor.browser.d.ts +19 -0
- package/dist/browser/modules/excel/utils/encryptor.browser.js +46 -0
- package/dist/browser/modules/excel/utils/encryptor.d.ts +9 -0
- package/dist/browser/modules/excel/utils/encryptor.js +35 -0
- package/dist/browser/modules/excel/utils/iterate-stream.d.ts +14 -0
- package/dist/browser/modules/excel/utils/iterate-stream.js +55 -0
- package/dist/browser/modules/excel/utils/ooxml-paths.d.ts +64 -0
- package/dist/browser/modules/excel/utils/ooxml-paths.js +209 -0
- package/dist/browser/modules/excel/utils/parse-sax.d.ts +113 -0
- package/dist/browser/modules/excel/utils/parse-sax.js +1206 -0
- package/dist/browser/modules/excel/utils/shared-formula.d.ts +2 -0
- package/dist/browser/modules/excel/utils/shared-formula.js +36 -0
- package/dist/browser/modules/excel/utils/shared-strings.d.ts +12 -0
- package/dist/browser/modules/excel/utils/shared-strings.js +29 -0
- package/dist/browser/modules/excel/utils/sheet-utils.d.ts +190 -0
- package/dist/browser/modules/excel/utils/sheet-utils.js +674 -0
- package/dist/browser/modules/excel/utils/stream-buf.d.ts +126 -0
- package/dist/browser/modules/excel/utils/stream-buf.js +452 -0
- package/dist/browser/modules/excel/utils/string-buf.d.ts +29 -0
- package/dist/browser/modules/excel/utils/string-buf.js +75 -0
- package/dist/browser/modules/excel/utils/under-dash.d.ts +7 -0
- package/dist/browser/modules/excel/utils/under-dash.js +166 -0
- package/dist/browser/modules/excel/utils/xml-stream.d.ts +34 -0
- package/dist/browser/modules/excel/utils/xml-stream.js +179 -0
- package/dist/browser/modules/excel/workbook.d.ts +195 -0
- package/dist/browser/modules/excel/workbook.js +314 -0
- package/dist/browser/modules/excel/worksheet.d.ts +333 -0
- package/dist/browser/modules/excel/worksheet.js +924 -0
- package/dist/browser/modules/excel/xlsx/defaultnumformats.d.ts +12 -0
- package/dist/browser/modules/excel/xlsx/defaultnumformats.js +149 -0
- package/dist/browser/modules/excel/xlsx/rel-type.d.ts +19 -0
- package/dist/browser/modules/excel/xlsx/rel-type.js +19 -0
- package/dist/browser/modules/excel/xlsx/xform/base-xform.d.ts +33 -0
- package/dist/browser/modules/excel/xlsx/xform/base-xform.js +135 -0
- package/dist/browser/modules/excel/xlsx/xform/book/defined-name-xform.d.ts +17 -0
- package/dist/browser/modules/excel/xlsx/xform/book/defined-name-xform.js +124 -0
- package/dist/browser/modules/excel/xlsx/xform/book/sheet-xform.d.ts +14 -0
- package/dist/browser/modules/excel/xlsx/xform/book/sheet-xform.js +30 -0
- package/dist/browser/modules/excel/xlsx/xform/book/workbook-calc-properties-xform.d.ts +11 -0
- package/dist/browser/modules/excel/xlsx/xform/book/workbook-calc-properties-xform.js +21 -0
- package/dist/browser/modules/excel/xlsx/xform/book/workbook-pivot-cache-xform.d.ts +12 -0
- package/dist/browser/modules/excel/xlsx/xform/book/workbook-pivot-cache-xform.js +24 -0
- package/dist/browser/modules/excel/xlsx/xform/book/workbook-properties-xform.d.ts +11 -0
- package/dist/browser/modules/excel/xlsx/xform/book/workbook-properties-xform.js +24 -0
- package/dist/browser/modules/excel/xlsx/xform/book/workbook-view-xform.d.ts +17 -0
- package/dist/browser/modules/excel/xlsx/xform/book/workbook-view-xform.js +46 -0
- package/dist/browser/modules/excel/xlsx/xform/book/workbook-xform.d.ts +23 -0
- package/dist/browser/modules/excel/xlsx/xform/book/workbook-xform.js +234 -0
- package/dist/browser/modules/excel/xlsx/xform/comment/comment-xform.d.ts +28 -0
- package/dist/browser/modules/excel/xlsx/xform/comment/comment-xform.js +76 -0
- package/dist/browser/modules/excel/xlsx/xform/comment/comments-xform.d.ts +21 -0
- package/dist/browser/modules/excel/xlsx/xform/comment/comments-xform.js +72 -0
- package/dist/browser/modules/excel/xlsx/xform/comment/style/vml-position-xform.d.ts +16 -0
- package/dist/browser/modules/excel/xlsx/xform/comment/style/vml-position-xform.js +34 -0
- package/dist/browser/modules/excel/xlsx/xform/comment/style/vml-protection-xform.d.ts +14 -0
- package/dist/browser/modules/excel/xlsx/xform/comment/style/vml-protection-xform.js +30 -0
- package/dist/browser/modules/excel/xlsx/xform/comment/vml-anchor-xform.d.ts +27 -0
- package/dist/browser/modules/excel/xlsx/xform/comment/vml-anchor-xform.js +55 -0
- package/dist/browser/modules/excel/xlsx/xform/comment/vml-client-data-xform.d.ts +35 -0
- package/dist/browser/modules/excel/xlsx/xform/comment/vml-client-data-xform.js +82 -0
- package/dist/browser/modules/excel/xlsx/xform/comment/vml-notes-xform.d.ts +24 -0
- package/dist/browser/modules/excel/xlsx/xform/comment/vml-notes-xform.js +96 -0
- package/dist/browser/modules/excel/xlsx/xform/comment/vml-shape-xform.d.ts +25 -0
- package/dist/browser/modules/excel/xlsx/xform/comment/vml-shape-xform.js +83 -0
- package/dist/browser/modules/excel/xlsx/xform/comment/vml-textbox-xform.d.ts +23 -0
- package/dist/browser/modules/excel/xlsx/xform/comment/vml-textbox-xform.js +60 -0
- package/dist/browser/modules/excel/xlsx/xform/composite-xform.d.ts +11 -0
- package/dist/browser/modules/excel/xlsx/xform/composite-xform.js +48 -0
- package/dist/browser/modules/excel/xlsx/xform/core/app-heading-pairs-xform.d.ts +8 -0
- package/dist/browser/modules/excel/xlsx/xform/core/app-heading-pairs-xform.js +24 -0
- package/dist/browser/modules/excel/xlsx/xform/core/app-titles-of-parts-xform.d.ts +8 -0
- package/dist/browser/modules/excel/xlsx/xform/core/app-titles-of-parts-xform.js +21 -0
- package/dist/browser/modules/excel/xlsx/xform/core/app-xform.d.ts +26 -0
- package/dist/browser/modules/excel/xlsx/xform/core/app-xform.js +83 -0
- package/dist/browser/modules/excel/xlsx/xform/core/content-types-xform.d.ts +11 -0
- package/dist/browser/modules/excel/xlsx/xform/core/content-types-xform.js +122 -0
- package/dist/browser/modules/excel/xlsx/xform/core/core-xform.d.ts +42 -0
- package/dist/browser/modules/excel/xlsx/xform/core/core-xform.js +124 -0
- package/dist/browser/modules/excel/xlsx/xform/core/relationship-xform.d.ts +14 -0
- package/dist/browser/modules/excel/xlsx/xform/core/relationship-xform.js +20 -0
- package/dist/browser/modules/excel/xlsx/xform/core/relationships-xform.d.ts +14 -0
- package/dist/browser/modules/excel/xlsx/xform/core/relationships-xform.js +62 -0
- package/dist/browser/modules/excel/xlsx/xform/drawing/base-cell-anchor-xform.d.ts +13 -0
- package/dist/browser/modules/excel/xlsx/xform/drawing/base-cell-anchor-xform.js +44 -0
- package/dist/browser/modules/excel/xlsx/xform/drawing/blip-fill-xform.d.ts +16 -0
- package/dist/browser/modules/excel/xlsx/xform/drawing/blip-fill-xform.js +57 -0
- package/dist/browser/modules/excel/xlsx/xform/drawing/blip-xform.d.ts +14 -0
- package/dist/browser/modules/excel/xlsx/xform/drawing/blip-xform.js +40 -0
- package/dist/browser/modules/excel/xlsx/xform/drawing/c-nv-pic-pr-xform.d.ts +9 -0
- package/dist/browser/modules/excel/xlsx/xform/drawing/c-nv-pic-pr-xform.js +32 -0
- package/dist/browser/modules/excel/xlsx/xform/drawing/c-nv-pr-xform.d.ts +18 -0
- package/dist/browser/modules/excel/xlsx/xform/drawing/c-nv-pr-xform.js +59 -0
- package/dist/browser/modules/excel/xlsx/xform/drawing/cell-position-xform.d.ts +24 -0
- package/dist/browser/modules/excel/xlsx/xform/drawing/cell-position-xform.js +68 -0
- package/dist/browser/modules/excel/xlsx/xform/drawing/drawing-xform.d.ts +24 -0
- package/dist/browser/modules/excel/xlsx/xform/drawing/drawing-xform.js +96 -0
- package/dist/browser/modules/excel/xlsx/xform/drawing/ext-lst-xform.d.ts +9 -0
- package/dist/browser/modules/excel/xlsx/xform/drawing/ext-lst-xform.js +37 -0
- package/dist/browser/modules/excel/xlsx/xform/drawing/ext-xform.d.ts +20 -0
- package/dist/browser/modules/excel/xlsx/xform/drawing/ext-xform.js +34 -0
- package/dist/browser/modules/excel/xlsx/xform/drawing/hlink-click-xform.d.ts +11 -0
- package/dist/browser/modules/excel/xlsx/xform/drawing/hlink-click-xform.js +39 -0
- package/dist/browser/modules/excel/xlsx/xform/drawing/nv-pic-pr-xform.d.ts +15 -0
- package/dist/browser/modules/excel/xlsx/xform/drawing/nv-pic-pr-xform.js +56 -0
- package/dist/browser/modules/excel/xlsx/xform/drawing/one-cell-anchor-xform.d.ts +20 -0
- package/dist/browser/modules/excel/xlsx/xform/drawing/one-cell-anchor-xform.js +52 -0
- package/dist/browser/modules/excel/xlsx/xform/drawing/pic-xform.d.ts +22 -0
- package/dist/browser/modules/excel/xlsx/xform/drawing/pic-xform.js +64 -0
- package/dist/browser/modules/excel/xlsx/xform/drawing/sp-pr.d.ts +32 -0
- package/dist/browser/modules/excel/xlsx/xform/drawing/sp-pr.js +17 -0
- package/dist/browser/modules/excel/xlsx/xform/drawing/two-cell-anchor-xform.d.ts +20 -0
- package/dist/browser/modules/excel/xlsx/xform/drawing/two-cell-anchor-xform.js +51 -0
- package/dist/browser/modules/excel/xlsx/xform/list-xform.d.ts +32 -0
- package/dist/browser/modules/excel/xlsx/xform/list-xform.js +89 -0
- package/dist/browser/modules/excel/xlsx/xform/pivot-table/cache-field-xform.d.ts +42 -0
- package/dist/browser/modules/excel/xlsx/xform/pivot-table/cache-field-xform.js +128 -0
- package/dist/browser/modules/excel/xlsx/xform/pivot-table/cache-field.d.ts +15 -0
- package/dist/browser/modules/excel/xlsx/xform/pivot-table/cache-field.js +78 -0
- package/dist/browser/modules/excel/xlsx/xform/pivot-table/pivot-cache-definition-xform.d.ts +60 -0
- package/dist/browser/modules/excel/xlsx/xform/pivot-table/pivot-cache-definition-xform.js +179 -0
- package/dist/browser/modules/excel/xlsx/xform/pivot-table/pivot-cache-records-xform.d.ts +73 -0
- package/dist/browser/modules/excel/xlsx/xform/pivot-table/pivot-cache-records-xform.js +234 -0
- package/dist/browser/modules/excel/xlsx/xform/pivot-table/pivot-table-xform.d.ts +119 -0
- package/dist/browser/modules/excel/xlsx/xform/pivot-table/pivot-table-xform.js +624 -0
- package/dist/browser/modules/excel/xlsx/xform/sheet/auto-filter-xform.d.ts +8 -0
- package/dist/browser/modules/excel/xlsx/xform/sheet/auto-filter-xform.js +34 -0
- package/dist/browser/modules/excel/xlsx/xform/sheet/cell-xform.d.ts +17 -0
- package/dist/browser/modules/excel/xlsx/xform/sheet/cell-xform.js +460 -0
- package/dist/browser/modules/excel/xlsx/xform/sheet/cf/cf-rule-xform.d.ts +41 -0
- package/dist/browser/modules/excel/xlsx/xform/sheet/cf/cf-rule-xform.js +259 -0
- package/dist/browser/modules/excel/xlsx/xform/sheet/cf/cfvo-xform.d.ts +8 -0
- package/dist/browser/modules/excel/xlsx/xform/sheet/cf/cfvo-xform.js +22 -0
- package/dist/browser/modules/excel/xlsx/xform/sheet/cf/color-scale-xform.d.ts +13 -0
- package/dist/browser/modules/excel/xlsx/xform/sheet/cf/color-scale-xform.js +35 -0
- package/dist/browser/modules/excel/xlsx/xform/sheet/cf/conditional-formatting-xform.d.ts +9 -0
- package/dist/browser/modules/excel/xlsx/xform/sheet/cf/conditional-formatting-xform.js +37 -0
- package/dist/browser/modules/excel/xlsx/xform/sheet/cf/conditional-formattings-xform.d.ts +16 -0
- package/dist/browser/modules/excel/xlsx/xform/sheet/cf/conditional-formattings-xform.js +74 -0
- package/dist/browser/modules/excel/xlsx/xform/sheet/cf/databar-xform.d.ts +13 -0
- package/dist/browser/modules/excel/xlsx/xform/sheet/cf/databar-xform.js +39 -0
- package/dist/browser/modules/excel/xlsx/xform/sheet/cf/ext-lst-ref-xform.d.ts +9 -0
- package/dist/browser/modules/excel/xlsx/xform/sheet/cf/ext-lst-ref-xform.js +67 -0
- package/dist/browser/modules/excel/xlsx/xform/sheet/cf/formula-xform.d.ts +9 -0
- package/dist/browser/modules/excel/xlsx/xform/sheet/cf/formula-xform.js +19 -0
- package/dist/browser/modules/excel/xlsx/xform/sheet/cf/icon-set-xform.d.ts +11 -0
- package/dist/browser/modules/excel/xlsx/xform/sheet/cf/icon-set-xform.js +37 -0
- package/dist/browser/modules/excel/xlsx/xform/sheet/cf-ext/cf-icon-ext-xform.d.ts +10 -0
- package/dist/browser/modules/excel/xlsx/xform/sheet/cf-ext/cf-icon-ext-xform.js +22 -0
- package/dist/browser/modules/excel/xlsx/xform/sheet/cf-ext/cf-rule-ext-xform.d.ts +23 -0
- package/dist/browser/modules/excel/xlsx/xform/sheet/cf-ext/cf-rule-ext-xform.js +80 -0
- package/dist/browser/modules/excel/xlsx/xform/sheet/cf-ext/cfvo-ext-xform.d.ts +13 -0
- package/dist/browser/modules/excel/xlsx/xform/sheet/cf-ext/cfvo-ext-xform.js +35 -0
- package/dist/browser/modules/excel/xlsx/xform/sheet/cf-ext/conditional-formatting-ext-xform.d.ts +16 -0
- package/dist/browser/modules/excel/xlsx/xform/sheet/cf-ext/conditional-formatting-ext-xform.js +48 -0
- package/dist/browser/modules/excel/xlsx/xform/sheet/cf-ext/conditional-formattings-ext-xform.d.ts +13 -0
- package/dist/browser/modules/excel/xlsx/xform/sheet/cf-ext/conditional-formattings-ext-xform.js +40 -0
- package/dist/browser/modules/excel/xlsx/xform/sheet/cf-ext/databar-ext-xform.d.ts +29 -0
- package/dist/browser/modules/excel/xlsx/xform/sheet/cf-ext/databar-ext-xform.js +69 -0
- package/dist/browser/modules/excel/xlsx/xform/sheet/cf-ext/f-ext-xform.d.ts +9 -0
- package/dist/browser/modules/excel/xlsx/xform/sheet/cf-ext/f-ext-xform.js +19 -0
- package/dist/browser/modules/excel/xlsx/xform/sheet/cf-ext/icon-set-ext-xform.d.ts +20 -0
- package/dist/browser/modules/excel/xlsx/xform/sheet/cf-ext/icon-set-ext-xform.js +60 -0
- package/dist/browser/modules/excel/xlsx/xform/sheet/cf-ext/sqref-ext-xform.d.ts +9 -0
- package/dist/browser/modules/excel/xlsx/xform/sheet/cf-ext/sqref-ext-xform.js +19 -0
- package/dist/browser/modules/excel/xlsx/xform/sheet/col-breaks-xform.d.ts +16 -0
- package/dist/browser/modules/excel/xlsx/xform/sheet/col-breaks-xform.js +35 -0
- package/dist/browser/modules/excel/xlsx/xform/sheet/col-xform.d.ts +22 -0
- package/dist/browser/modules/excel/xlsx/xform/sheet/col-xform.js +75 -0
- package/dist/browser/modules/excel/xlsx/xform/sheet/data-validations-xform.d.ts +12 -0
- package/dist/browser/modules/excel/xlsx/xform/sheet/data-validations-xform.js +269 -0
- package/dist/browser/modules/excel/xlsx/xform/sheet/dimension-xform.d.ts +10 -0
- package/dist/browser/modules/excel/xlsx/xform/sheet/dimension-xform.js +23 -0
- package/dist/browser/modules/excel/xlsx/xform/sheet/drawing-xform.d.ts +12 -0
- package/dist/browser/modules/excel/xlsx/xform/sheet/drawing-xform.js +27 -0
- package/dist/browser/modules/excel/xlsx/xform/sheet/ext-lst-xform.d.ts +16 -0
- package/dist/browser/modules/excel/xlsx/xform/sheet/ext-lst-xform.js +66 -0
- package/dist/browser/modules/excel/xlsx/xform/sheet/header-footer-xform.d.ts +20 -0
- package/dist/browser/modules/excel/xlsx/xform/sheet/header-footer-xform.js +124 -0
- package/dist/browser/modules/excel/xlsx/xform/sheet/hyperlink-xform.d.ts +16 -0
- package/dist/browser/modules/excel/xlsx/xform/sheet/hyperlink-xform.js +47 -0
- package/dist/browser/modules/excel/xlsx/xform/sheet/merge-cell-xform.d.ts +9 -0
- package/dist/browser/modules/excel/xlsx/xform/sheet/merge-cell-xform.js +21 -0
- package/dist/browser/modules/excel/xlsx/xform/sheet/merges.d.ts +14 -0
- package/dist/browser/modules/excel/xlsx/xform/sheet/merges.js +50 -0
- package/dist/browser/modules/excel/xlsx/xform/sheet/outline-properties-xform.d.ts +13 -0
- package/dist/browser/modules/excel/xlsx/xform/sheet/outline-properties-xform.js +36 -0
- package/dist/browser/modules/excel/xlsx/xform/sheet/page-breaks-xform.d.ts +14 -0
- package/dist/browser/modules/excel/xlsx/xform/sheet/page-breaks-xform.js +33 -0
- package/dist/browser/modules/excel/xlsx/xform/sheet/page-margins-xform.d.ts +17 -0
- package/dist/browser/modules/excel/xlsx/xform/sheet/page-margins-xform.js +42 -0
- package/dist/browser/modules/excel/xlsx/xform/sheet/page-setup-properties-xform.d.ts +12 -0
- package/dist/browser/modules/excel/xlsx/xform/sheet/page-setup-properties-xform.js +29 -0
- package/dist/browser/modules/excel/xlsx/xform/sheet/page-setup-xform.d.ts +27 -0
- package/dist/browser/modules/excel/xlsx/xform/sheet/page-setup-xform.js +96 -0
- package/dist/browser/modules/excel/xlsx/xform/sheet/picture-xform.d.ts +12 -0
- package/dist/browser/modules/excel/xlsx/xform/sheet/picture-xform.js +27 -0
- package/dist/browser/modules/excel/xlsx/xform/sheet/print-options-xform.d.ts +15 -0
- package/dist/browser/modules/excel/xlsx/xform/sheet/print-options-xform.js +41 -0
- package/dist/browser/modules/excel/xlsx/xform/sheet/row-breaks-xform.d.ts +10 -0
- package/dist/browser/modules/excel/xlsx/xform/sheet/row-breaks-xform.js +29 -0
- package/dist/browser/modules/excel/xlsx/xform/sheet/row-xform.d.ts +37 -0
- package/dist/browser/modules/excel/xlsx/xform/sheet/row-xform.js +152 -0
- package/dist/browser/modules/excel/xlsx/xform/sheet/sheet-format-properties-xform.d.ts +16 -0
- package/dist/browser/modules/excel/xlsx/xform/sheet/sheet-format-properties-xform.js +49 -0
- package/dist/browser/modules/excel/xlsx/xform/sheet/sheet-properties-xform.d.ts +19 -0
- package/dist/browser/modules/excel/xlsx/xform/sheet/sheet-properties-xform.js +82 -0
- package/dist/browser/modules/excel/xlsx/xform/sheet/sheet-protection-xform.d.ts +31 -0
- package/dist/browser/modules/excel/xlsx/xform/sheet/sheet-protection-xform.js +80 -0
- package/dist/browser/modules/excel/xlsx/xform/sheet/sheet-view-xform.d.ts +32 -0
- package/dist/browser/modules/excel/xlsx/xform/sheet/sheet-view-xform.js +193 -0
- package/dist/browser/modules/excel/xlsx/xform/sheet/table-part-xform.d.ts +12 -0
- package/dist/browser/modules/excel/xlsx/xform/sheet/table-part-xform.js +27 -0
- package/dist/browser/modules/excel/xlsx/xform/sheet/worksheet-xform.d.ts +21 -0
- package/dist/browser/modules/excel/xlsx/xform/sheet/worksheet-xform.js +518 -0
- package/dist/browser/modules/excel/xlsx/xform/simple/boolean-xform.d.ts +15 -0
- package/dist/browser/modules/excel/xlsx/xform/simple/boolean-xform.js +24 -0
- package/dist/browser/modules/excel/xlsx/xform/simple/date-xform.d.ts +22 -0
- package/dist/browser/modules/excel/xlsx/xform/simple/date-xform.js +65 -0
- package/dist/browser/modules/excel/xlsx/xform/simple/float-xform.d.ts +18 -0
- package/dist/browser/modules/excel/xlsx/xform/simple/float-xform.js +47 -0
- package/dist/browser/modules/excel/xlsx/xform/simple/integer-xform.d.ts +20 -0
- package/dist/browser/modules/excel/xlsx/xform/simple/integer-xform.js +52 -0
- package/dist/browser/modules/excel/xlsx/xform/simple/string-xform.d.ts +18 -0
- package/dist/browser/modules/excel/xlsx/xform/simple/string-xform.js +47 -0
- package/dist/browser/modules/excel/xlsx/xform/static-xform.d.ts +17 -0
- package/dist/browser/modules/excel/xlsx/xform/static-xform.js +55 -0
- package/dist/browser/modules/excel/xlsx/xform/strings/phonetic-text-xform.d.ts +20 -0
- package/dist/browser/modules/excel/xlsx/xform/strings/phonetic-text-xform.js +86 -0
- package/dist/browser/modules/excel/xlsx/xform/strings/rich-text-xform.d.ts +25 -0
- package/dist/browser/modules/excel/xlsx/xform/strings/rich-text-xform.js +77 -0
- package/dist/browser/modules/excel/xlsx/xform/strings/shared-string-xform.d.ts +17 -0
- package/dist/browser/modules/excel/xlsx/xform/strings/shared-string-xform.js +90 -0
- package/dist/browser/modules/excel/xlsx/xform/strings/shared-strings-xform.d.ts +27 -0
- package/dist/browser/modules/excel/xlsx/xform/strings/shared-strings-xform.js +109 -0
- package/dist/browser/modules/excel/xlsx/xform/strings/text-xform.d.ts +10 -0
- package/dist/browser/modules/excel/xlsx/xform/strings/text-xform.js +36 -0
- package/dist/browser/modules/excel/xlsx/xform/style/alignment-xform.d.ts +18 -0
- package/dist/browser/modules/excel/xlsx/xform/style/alignment-xform.js +152 -0
- package/dist/browser/modules/excel/xlsx/xform/style/border-xform.d.ts +49 -0
- package/dist/browser/modules/excel/xlsx/xform/style/border-xform.js +188 -0
- package/dist/browser/modules/excel/xlsx/xform/style/color-xform.d.ts +17 -0
- package/dist/browser/modules/excel/xlsx/xform/style/color-xform.js +61 -0
- package/dist/browser/modules/excel/xlsx/xform/style/dxf-xform.d.ts +23 -0
- package/dist/browser/modules/excel/xlsx/xform/style/dxf-xform.js +92 -0
- package/dist/browser/modules/excel/xlsx/xform/style/fill-xform.d.ts +85 -0
- package/dist/browser/modules/excel/xlsx/xform/style/fill-xform.js +312 -0
- package/dist/browser/modules/excel/xlsx/xform/style/font-xform.d.ts +35 -0
- package/dist/browser/modules/excel/xlsx/xform/style/font-xform.js +100 -0
- package/dist/browser/modules/excel/xlsx/xform/style/numfmt-xform.d.ts +18 -0
- package/dist/browser/modules/excel/xlsx/xform/style/numfmt-xform.js +50 -0
- package/dist/browser/modules/excel/xlsx/xform/style/protection-xform.d.ts +13 -0
- package/dist/browser/modules/excel/xlsx/xform/style/protection-xform.js +49 -0
- package/dist/browser/modules/excel/xlsx/xform/style/style-xform.d.ts +30 -0
- package/dist/browser/modules/excel/xlsx/xform/style/style-xform.js +108 -0
- package/dist/browser/modules/excel/xlsx/xform/style/styles-xform.d.ts +46 -0
- package/dist/browser/modules/excel/xlsx/xform/style/styles-xform.js +484 -0
- package/dist/browser/modules/excel/xlsx/xform/style/underline-xform.d.ts +14 -0
- package/dist/browser/modules/excel/xlsx/xform/style/underline-xform.js +38 -0
- package/dist/browser/modules/excel/xlsx/xform/table/auto-filter-xform.d.ts +21 -0
- package/dist/browser/modules/excel/xlsx/xform/table/auto-filter-xform.js +70 -0
- package/dist/browser/modules/excel/xlsx/xform/table/custom-filter-xform.d.ts +15 -0
- package/dist/browser/modules/excel/xlsx/xform/table/custom-filter-xform.js +31 -0
- package/dist/browser/modules/excel/xlsx/xform/table/filter-column-xform.d.ts +24 -0
- package/dist/browser/modules/excel/xlsx/xform/table/filter-column-xform.js +87 -0
- package/dist/browser/modules/excel/xlsx/xform/table/filter-xform.d.ts +14 -0
- package/dist/browser/modules/excel/xlsx/xform/table/filter-xform.js +29 -0
- package/dist/browser/modules/excel/xlsx/xform/table/table-column-xform.d.ts +21 -0
- package/dist/browser/modules/excel/xlsx/xform/table/table-column-xform.js +41 -0
- package/dist/browser/modules/excel/xlsx/xform/table/table-style-info-xform.d.ts +18 -0
- package/dist/browser/modules/excel/xlsx/xform/table/table-style-info-xform.js +44 -0
- package/dist/browser/modules/excel/xlsx/xform/table/table-xform.d.ts +33 -0
- package/dist/browser/modules/excel/xlsx/xform/table/table-xform.js +126 -0
- package/dist/browser/modules/excel/xlsx/xlsx.browser.d.ts +208 -0
- package/dist/browser/modules/excel/xlsx/xlsx.browser.js +1152 -0
- package/dist/browser/modules/excel/xlsx/xlsx.d.ts +24 -0
- package/dist/browser/modules/excel/xlsx/xlsx.js +239 -0
- package/dist/browser/modules/excel/xlsx/xml/theme1.d.ts +1 -0
- package/dist/browser/modules/excel/xlsx/xml/theme1.js +1 -0
- package/dist/browser/modules/stream/base-transform.d.ts +68 -0
- package/dist/browser/modules/stream/base-transform.js +160 -0
- package/dist/browser/modules/stream/buffered-stream.d.ts +94 -0
- package/dist/browser/modules/stream/buffered-stream.js +277 -0
- package/dist/browser/modules/stream/chunked-builder.d.ts +97 -0
- package/dist/browser/modules/stream/chunked-builder.js +165 -0
- package/dist/browser/modules/stream/event-emitter.d.ts +30 -0
- package/dist/browser/modules/stream/event-emitter.js +239 -0
- package/dist/browser/modules/stream/index.browser.d.ts +22 -0
- package/dist/browser/modules/stream/index.browser.js +25 -0
- package/dist/browser/modules/stream/index.d.ts +49 -0
- package/dist/browser/modules/stream/index.js +52 -0
- package/dist/browser/modules/stream/pull-stream.d.ts +67 -0
- package/dist/browser/modules/stream/pull-stream.js +204 -0
- package/dist/browser/modules/stream/shared.d.ts +54 -0
- package/dist/browser/modules/stream/shared.js +156 -0
- package/dist/browser/modules/stream/streams.browser.d.ts +936 -0
- package/dist/browser/modules/stream/streams.browser.js +3297 -0
- package/dist/browser/modules/stream/streams.d.ts +282 -0
- package/dist/browser/modules/stream/streams.js +940 -0
- package/dist/browser/modules/stream/types.d.ts +238 -0
- package/dist/browser/modules/stream/types.js +7 -0
- package/dist/browser/modules/stream/utils.d.ts +24 -0
- package/dist/browser/modules/stream/utils.js +85 -0
- package/dist/browser/utils/browser.d.ts +9 -0
- package/dist/browser/utils/browser.js +49 -0
- package/dist/browser/utils/datetime.d.ts +56 -0
- package/dist/browser/utils/datetime.js +493 -0
- package/dist/browser/utils/env.d.ts +14 -0
- package/dist/browser/utils/env.js +18 -0
- package/dist/browser/utils/utils.base.d.ts +49 -0
- package/dist/browser/utils/utils.base.js +275 -0
- package/dist/browser/utils/utils.browser.d.ts +6 -0
- package/dist/browser/utils/utils.browser.js +12 -0
- package/dist/browser/utils/utils.d.ts +6 -0
- package/dist/browser/utils/utils.js +19 -0
- package/dist/browser/utils/uuid.d.ts +11 -0
- package/dist/browser/utils/uuid.js +55 -0
- package/dist/{browser → iife}/excelts.iife.js +1 -1
- package/dist/{browser → iife}/excelts.iife.min.js +1 -1
- package/dist/types/index.browser.d.ts +20 -20
- package/dist/types/index.d.ts +23 -23
- package/dist/types/modules/archive/compress.browser.d.ts +1 -1
- package/dist/types/modules/archive/compress.d.ts +2 -2
- package/dist/types/modules/archive/crc32.browser.d.ts +1 -1
- package/dist/types/modules/archive/crc32.d.ts +1 -1
- package/dist/types/modules/archive/defaults.d.ts +1 -1
- package/dist/types/modules/archive/extract.d.ts +2 -2
- package/dist/types/modules/archive/index.base.d.ts +4 -4
- package/dist/types/modules/archive/index.browser.d.ts +5 -5
- package/dist/types/modules/archive/index.d.ts +5 -5
- package/dist/types/modules/archive/parse.base.d.ts +3 -3
- package/dist/types/modules/archive/parse.browser.d.ts +2 -2
- package/dist/types/modules/archive/parse.d.ts +3 -3
- package/dist/types/modules/archive/streaming-compress.browser.d.ts +2 -2
- package/dist/types/modules/archive/streaming-compress.d.ts +2 -2
- package/dist/types/modules/archive/streaming-zip.d.ts +2 -2
- package/dist/types/modules/archive/zip-builder.d.ts +2 -2
- package/dist/types/modules/archive/zip-entry-metadata.d.ts +1 -1
- package/dist/types/modules/archive/zip-parser.d.ts +1 -1
- package/dist/types/modules/csv/csv-stream.d.ts +3 -3
- package/dist/types/modules/csv/csv.browser.d.ts +9 -9
- package/dist/types/modules/csv/csv.d.ts +4 -4
- package/dist/types/modules/excel/anchor.d.ts +1 -1
- package/dist/types/modules/excel/cell.d.ts +7 -7
- package/dist/types/modules/excel/column.d.ts +3 -3
- package/dist/types/modules/excel/defined-names.d.ts +4 -4
- package/dist/types/modules/excel/image.d.ts +2 -2
- package/dist/types/modules/excel/pivot-table.d.ts +1 -1
- package/dist/types/modules/excel/range.d.ts +1 -1
- package/dist/types/modules/excel/row.d.ts +3 -3
- package/dist/types/modules/excel/stream/hyperlink-reader.d.ts +2 -2
- package/dist/types/modules/excel/stream/workbook-reader.browser.d.ts +6 -6
- package/dist/types/modules/excel/stream/workbook-reader.d.ts +5 -5
- package/dist/types/modules/excel/stream/workbook-writer.browser.d.ts +8 -8
- package/dist/types/modules/excel/stream/workbook-writer.d.ts +2 -2
- package/dist/types/modules/excel/stream/worksheet-reader.d.ts +6 -6
- package/dist/types/modules/excel/stream/worksheet-writer.d.ts +9 -9
- package/dist/types/modules/excel/table.d.ts +2 -2
- package/dist/types/modules/excel/utils/col-cache.d.ts +1 -1
- package/dist/types/modules/excel/utils/sheet-utils.d.ts +3 -3
- package/dist/types/modules/excel/utils/stream-buf.d.ts +2 -2
- package/dist/types/modules/excel/workbook.d.ts +9 -9
- package/dist/types/modules/excel/worksheet.d.ts +10 -10
- package/dist/types/modules/excel/xlsx/xform/base-xform.d.ts +1 -1
- package/dist/types/modules/excel/xlsx/xform/book/defined-name-xform.d.ts +1 -1
- package/dist/types/modules/excel/xlsx/xform/book/sheet-xform.d.ts +1 -1
- package/dist/types/modules/excel/xlsx/xform/book/workbook-calc-properties-xform.d.ts +1 -1
- package/dist/types/modules/excel/xlsx/xform/book/workbook-pivot-cache-xform.d.ts +1 -1
- package/dist/types/modules/excel/xlsx/xform/book/workbook-properties-xform.d.ts +1 -1
- package/dist/types/modules/excel/xlsx/xform/book/workbook-view-xform.d.ts +1 -1
- package/dist/types/modules/excel/xlsx/xform/book/workbook-xform.d.ts +2 -2
- package/dist/types/modules/excel/xlsx/xform/comment/comment-xform.d.ts +2 -2
- package/dist/types/modules/excel/xlsx/xform/comment/comments-xform.d.ts +2 -2
- package/dist/types/modules/excel/xlsx/xform/comment/style/vml-position-xform.d.ts +1 -1
- package/dist/types/modules/excel/xlsx/xform/comment/style/vml-protection-xform.d.ts +1 -1
- package/dist/types/modules/excel/xlsx/xform/comment/vml-anchor-xform.d.ts +1 -1
- package/dist/types/modules/excel/xlsx/xform/comment/vml-client-data-xform.d.ts +1 -1
- package/dist/types/modules/excel/xlsx/xform/comment/vml-notes-xform.d.ts +1 -1
- package/dist/types/modules/excel/xlsx/xform/comment/vml-shape-xform.d.ts +1 -1
- package/dist/types/modules/excel/xlsx/xform/comment/vml-textbox-xform.d.ts +1 -1
- package/dist/types/modules/excel/xlsx/xform/composite-xform.d.ts +1 -1
- package/dist/types/modules/excel/xlsx/xform/core/app-heading-pairs-xform.d.ts +1 -1
- package/dist/types/modules/excel/xlsx/xform/core/app-titles-of-parts-xform.d.ts +1 -1
- package/dist/types/modules/excel/xlsx/xform/core/app-xform.d.ts +1 -1
- package/dist/types/modules/excel/xlsx/xform/core/content-types-xform.d.ts +1 -1
- package/dist/types/modules/excel/xlsx/xform/core/core-xform.d.ts +1 -1
- package/dist/types/modules/excel/xlsx/xform/core/relationship-xform.d.ts +1 -1
- package/dist/types/modules/excel/xlsx/xform/core/relationships-xform.d.ts +1 -1
- package/dist/types/modules/excel/xlsx/xform/drawing/base-cell-anchor-xform.d.ts +1 -1
- package/dist/types/modules/excel/xlsx/xform/drawing/blip-fill-xform.d.ts +2 -2
- package/dist/types/modules/excel/xlsx/xform/drawing/blip-xform.d.ts +1 -1
- package/dist/types/modules/excel/xlsx/xform/drawing/c-nv-pic-pr-xform.d.ts +1 -1
- package/dist/types/modules/excel/xlsx/xform/drawing/c-nv-pr-xform.d.ts +1 -1
- package/dist/types/modules/excel/xlsx/xform/drawing/cell-position-xform.d.ts +2 -2
- package/dist/types/modules/excel/xlsx/xform/drawing/drawing-xform.d.ts +1 -1
- package/dist/types/modules/excel/xlsx/xform/drawing/ext-lst-xform.d.ts +1 -1
- package/dist/types/modules/excel/xlsx/xform/drawing/ext-xform.d.ts +1 -1
- package/dist/types/modules/excel/xlsx/xform/drawing/hlink-click-xform.d.ts +1 -1
- package/dist/types/modules/excel/xlsx/xform/drawing/nv-pic-pr-xform.d.ts +1 -1
- package/dist/types/modules/excel/xlsx/xform/drawing/one-cell-anchor-xform.d.ts +1 -1
- package/dist/types/modules/excel/xlsx/xform/drawing/pic-xform.d.ts +1 -1
- package/dist/types/modules/excel/xlsx/xform/drawing/two-cell-anchor-xform.d.ts +1 -1
- package/dist/types/modules/excel/xlsx/xform/list-xform.d.ts +1 -1
- package/dist/types/modules/excel/xlsx/xform/pivot-table/cache-field-xform.d.ts +1 -1
- package/dist/types/modules/excel/xlsx/xform/pivot-table/pivot-cache-definition-xform.d.ts +3 -3
- package/dist/types/modules/excel/xlsx/xform/pivot-table/pivot-cache-records-xform.d.ts +2 -2
- package/dist/types/modules/excel/xlsx/xform/pivot-table/pivot-table-xform.d.ts +1 -1
- package/dist/types/modules/excel/xlsx/xform/sheet/auto-filter-xform.d.ts +1 -1
- package/dist/types/modules/excel/xlsx/xform/sheet/cell-xform.d.ts +1 -1
- package/dist/types/modules/excel/xlsx/xform/sheet/cf/cf-rule-xform.d.ts +6 -6
- package/dist/types/modules/excel/xlsx/xform/sheet/cf/cfvo-xform.d.ts +1 -1
- package/dist/types/modules/excel/xlsx/xform/sheet/cf/color-scale-xform.d.ts +3 -3
- package/dist/types/modules/excel/xlsx/xform/sheet/cf/conditional-formatting-xform.d.ts +1 -1
- package/dist/types/modules/excel/xlsx/xform/sheet/cf/conditional-formattings-xform.d.ts +2 -2
- package/dist/types/modules/excel/xlsx/xform/sheet/cf/databar-xform.d.ts +3 -3
- package/dist/types/modules/excel/xlsx/xform/sheet/cf/ext-lst-ref-xform.d.ts +1 -1
- package/dist/types/modules/excel/xlsx/xform/sheet/cf/formula-xform.d.ts +1 -1
- package/dist/types/modules/excel/xlsx/xform/sheet/cf/icon-set-xform.d.ts +2 -2
- package/dist/types/modules/excel/xlsx/xform/sheet/cf-ext/cf-icon-ext-xform.d.ts +1 -1
- package/dist/types/modules/excel/xlsx/xform/sheet/cf-ext/cf-rule-ext-xform.d.ts +3 -3
- package/dist/types/modules/excel/xlsx/xform/sheet/cf-ext/cfvo-ext-xform.d.ts +2 -2
- package/dist/types/modules/excel/xlsx/xform/sheet/cf-ext/conditional-formatting-ext-xform.d.ts +3 -3
- package/dist/types/modules/excel/xlsx/xform/sheet/cf-ext/conditional-formattings-ext-xform.d.ts +2 -2
- package/dist/types/modules/excel/xlsx/xform/sheet/cf-ext/databar-ext-xform.d.ts +3 -3
- package/dist/types/modules/excel/xlsx/xform/sheet/cf-ext/f-ext-xform.d.ts +1 -1
- package/dist/types/modules/excel/xlsx/xform/sheet/cf-ext/icon-set-ext-xform.d.ts +3 -3
- package/dist/types/modules/excel/xlsx/xform/sheet/cf-ext/sqref-ext-xform.d.ts +1 -1
- package/dist/types/modules/excel/xlsx/xform/sheet/col-breaks-xform.d.ts +1 -1
- package/dist/types/modules/excel/xlsx/xform/sheet/col-xform.d.ts +1 -1
- package/dist/types/modules/excel/xlsx/xform/sheet/data-validations-xform.d.ts +1 -1
- package/dist/types/modules/excel/xlsx/xform/sheet/dimension-xform.d.ts +1 -1
- package/dist/types/modules/excel/xlsx/xform/sheet/drawing-xform.d.ts +1 -1
- package/dist/types/modules/excel/xlsx/xform/sheet/ext-lst-xform.d.ts +1 -1
- package/dist/types/modules/excel/xlsx/xform/sheet/header-footer-xform.d.ts +1 -1
- package/dist/types/modules/excel/xlsx/xform/sheet/hyperlink-xform.d.ts +1 -1
- package/dist/types/modules/excel/xlsx/xform/sheet/merge-cell-xform.d.ts +1 -1
- package/dist/types/modules/excel/xlsx/xform/sheet/outline-properties-xform.d.ts +1 -1
- package/dist/types/modules/excel/xlsx/xform/sheet/page-breaks-xform.d.ts +1 -1
- package/dist/types/modules/excel/xlsx/xform/sheet/page-margins-xform.d.ts +1 -1
- package/dist/types/modules/excel/xlsx/xform/sheet/page-setup-properties-xform.d.ts +1 -1
- package/dist/types/modules/excel/xlsx/xform/sheet/page-setup-xform.d.ts +1 -1
- package/dist/types/modules/excel/xlsx/xform/sheet/picture-xform.d.ts +1 -1
- package/dist/types/modules/excel/xlsx/xform/sheet/print-options-xform.d.ts +1 -1
- package/dist/types/modules/excel/xlsx/xform/sheet/row-breaks-xform.d.ts +1 -1
- package/dist/types/modules/excel/xlsx/xform/sheet/row-xform.d.ts +1 -1
- package/dist/types/modules/excel/xlsx/xform/sheet/sheet-format-properties-xform.d.ts +1 -1
- package/dist/types/modules/excel/xlsx/xform/sheet/sheet-properties-xform.d.ts +1 -1
- package/dist/types/modules/excel/xlsx/xform/sheet/sheet-protection-xform.d.ts +1 -1
- package/dist/types/modules/excel/xlsx/xform/sheet/sheet-view-xform.d.ts +1 -1
- package/dist/types/modules/excel/xlsx/xform/sheet/table-part-xform.d.ts +1 -1
- package/dist/types/modules/excel/xlsx/xform/sheet/worksheet-xform.d.ts +1 -1
- package/dist/types/modules/excel/xlsx/xform/simple/boolean-xform.d.ts +1 -1
- package/dist/types/modules/excel/xlsx/xform/simple/date-xform.d.ts +1 -1
- package/dist/types/modules/excel/xlsx/xform/simple/float-xform.d.ts +1 -1
- package/dist/types/modules/excel/xlsx/xform/simple/integer-xform.d.ts +1 -1
- package/dist/types/modules/excel/xlsx/xform/simple/string-xform.d.ts +1 -1
- package/dist/types/modules/excel/xlsx/xform/static-xform.d.ts +1 -1
- package/dist/types/modules/excel/xlsx/xform/strings/phonetic-text-xform.d.ts +1 -1
- package/dist/types/modules/excel/xlsx/xform/strings/rich-text-xform.d.ts +3 -3
- package/dist/types/modules/excel/xlsx/xform/strings/shared-string-xform.d.ts +1 -1
- package/dist/types/modules/excel/xlsx/xform/strings/shared-strings-xform.d.ts +2 -2
- package/dist/types/modules/excel/xlsx/xform/strings/text-xform.d.ts +1 -1
- package/dist/types/modules/excel/xlsx/xform/style/alignment-xform.d.ts +1 -1
- package/dist/types/modules/excel/xlsx/xform/style/border-xform.d.ts +2 -2
- package/dist/types/modules/excel/xlsx/xform/style/color-xform.d.ts +1 -1
- package/dist/types/modules/excel/xlsx/xform/style/dxf-xform.d.ts +1 -1
- package/dist/types/modules/excel/xlsx/xform/style/fill-xform.d.ts +2 -2
- package/dist/types/modules/excel/xlsx/xform/style/font-xform.d.ts +1 -1
- package/dist/types/modules/excel/xlsx/xform/style/numfmt-xform.d.ts +1 -1
- package/dist/types/modules/excel/xlsx/xform/style/protection-xform.d.ts +1 -1
- package/dist/types/modules/excel/xlsx/xform/style/style-xform.d.ts +3 -3
- package/dist/types/modules/excel/xlsx/xform/style/styles-xform.d.ts +2 -2
- package/dist/types/modules/excel/xlsx/xform/style/underline-xform.d.ts +1 -1
- package/dist/types/modules/excel/xlsx/xform/table/auto-filter-xform.d.ts +2 -2
- package/dist/types/modules/excel/xlsx/xform/table/custom-filter-xform.d.ts +1 -1
- package/dist/types/modules/excel/xlsx/xform/table/filter-column-xform.d.ts +2 -2
- package/dist/types/modules/excel/xlsx/xform/table/filter-xform.d.ts +1 -1
- package/dist/types/modules/excel/xlsx/xform/table/table-column-xform.d.ts +1 -1
- package/dist/types/modules/excel/xlsx/xform/table/table-style-info-xform.d.ts +1 -1
- package/dist/types/modules/excel/xlsx/xform/table/table-xform.d.ts +1 -1
- package/dist/types/modules/excel/xlsx/xlsx.browser.d.ts +3 -3
- package/dist/types/modules/excel/xlsx/xlsx.d.ts +1 -1
- package/dist/types/modules/stream/base-transform.d.ts +1 -1
- package/dist/types/modules/stream/buffered-stream.d.ts +1 -1
- package/dist/types/modules/stream/index.browser.d.ts +8 -8
- package/dist/types/modules/stream/index.d.ts +8 -8
- package/dist/types/modules/stream/pull-stream.d.ts +1 -1
- package/dist/types/modules/stream/streams.browser.d.ts +4 -4
- package/dist/types/modules/stream/streams.d.ts +3 -3
- package/dist/types/modules/stream/utils.d.ts +1 -1
- package/dist/types/utils/utils.browser.d.ts +1 -1
- package/dist/types/utils/utils.d.ts +1 -1
- package/package.json +10 -6
- package/dist/browser/excelts.esm.js +0 -24621
- package/dist/browser/excelts.esm.js.map +0 -1
- package/dist/browser/excelts.esm.min.js +0 -148
- /package/dist/{browser → iife}/excelts.iife.js.map +0 -0
|
@@ -0,0 +1,1152 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* XLSX - Abstract base class for XLSX operations
|
|
3
|
+
*
|
|
4
|
+
* Contains all platform-agnostic logic shared between Node.js and Browser versions:
|
|
5
|
+
* - reconcile: Reconcile model after parsing
|
|
6
|
+
* - _process*Entry: Process individual ZIP entries
|
|
7
|
+
* - add*: Add content to ZIP during writing
|
|
8
|
+
* - prepareModel: Prepare model for writing
|
|
9
|
+
* - loadFromFiles: Load from pre-extracted ZIP data
|
|
10
|
+
*/
|
|
11
|
+
import { XmlStream } from "../utils/xml-stream.js";
|
|
12
|
+
import { StylesXform } from "./xform/style/styles-xform.js";
|
|
13
|
+
import { CoreXform } from "./xform/core/core-xform.js";
|
|
14
|
+
import { SharedStringsXform } from "./xform/strings/shared-strings-xform.js";
|
|
15
|
+
import { RelationshipsXform } from "./xform/core/relationships-xform.js";
|
|
16
|
+
import { ContentTypesXform } from "./xform/core/content-types-xform.js";
|
|
17
|
+
import { AppXform } from "./xform/core/app-xform.js";
|
|
18
|
+
import { WorkbookXform } from "./xform/book/workbook-xform.js";
|
|
19
|
+
import { WorkSheetXform } from "./xform/sheet/worksheet-xform.js";
|
|
20
|
+
import { DrawingXform } from "./xform/drawing/drawing-xform.js";
|
|
21
|
+
import { TableXform } from "./xform/table/table-xform.js";
|
|
22
|
+
import { PivotCacheRecordsXform } from "./xform/pivot-table/pivot-cache-records-xform.js";
|
|
23
|
+
import { PivotCacheDefinitionXform } from "./xform/pivot-table/pivot-cache-definition-xform.js";
|
|
24
|
+
import { PivotTableXform } from "./xform/pivot-table/pivot-table-xform.js";
|
|
25
|
+
import { CommentsXform } from "./xform/comment/comments-xform.js";
|
|
26
|
+
import { VmlNotesXform } from "./xform/comment/vml-notes-xform.js";
|
|
27
|
+
import { theme1Xml } from "./xml/theme1.js";
|
|
28
|
+
import { RelType } from "./rel-type.js";
|
|
29
|
+
import { StreamBuf } from "../utils/stream-buf.js";
|
|
30
|
+
import { bufferToString, base64ToUint8Array } from "../../../utils/utils.browser.js";
|
|
31
|
+
import { StreamingZip, ZipDeflateFile } from "../../archive/streaming-zip.js";
|
|
32
|
+
import { ZipParser } from "../../archive/index.browser.js";
|
|
33
|
+
import { PassThrough, concatUint8Arrays } from "../../stream/index.browser.js";
|
|
34
|
+
import { commentsPath, commentsRelTargetFromWorksheetName, drawingPath, drawingRelsPath, OOXML_REL_TARGETS, pivotTableRelTargetFromWorksheetName, pivotCacheDefinitionRelTargetFromWorkbook, getCommentsIndexFromPath, getDrawingNameFromPath, getDrawingNameFromRelsPath, getMediaFilenameFromPath, mediaPath, getPivotCacheDefinitionNameFromPath, getPivotCacheDefinitionNameFromRelsPath, getPivotCacheRecordsNameFromPath, getPivotTableNameFromPath, getPivotTableNameFromRelsPath, pivotCacheDefinitionPath, pivotCacheDefinitionRelsPath, pivotCacheDefinitionRelTargetFromPivotTable, pivotCacheRecordsPath, pivotCacheRecordsRelTarget, pivotTablePath, pivotTableRelsPath, getTableNameFromPath, tablePath, tableRelTargetFromWorksheetName, themePath, getThemeNameFromPath, getVmlDrawingNameFromPath, getWorksheetNoFromWorksheetPath, getWorksheetNoFromWorksheetRelsPath, isBinaryEntryPath, normalizeZipPath, OOXML_PATHS, vmlDrawingRelTargetFromWorksheetName, vmlDrawingPath, worksheetPath, worksheetRelsPath } from "../utils/ooxml-paths.js";
|
|
35
|
+
class StreamingZipWriterAdapter {
|
|
36
|
+
constructor(options) {
|
|
37
|
+
this.events = new Map();
|
|
38
|
+
this.pipedStream = null;
|
|
39
|
+
this.finalized = false;
|
|
40
|
+
this.level = options?.level ?? 6;
|
|
41
|
+
this.modTime = options?.modTime;
|
|
42
|
+
this.timestamps = options?.timestamps;
|
|
43
|
+
this.zip = new StreamingZip((err, data, final) => {
|
|
44
|
+
if (err) {
|
|
45
|
+
this._emit("error", err);
|
|
46
|
+
return;
|
|
47
|
+
}
|
|
48
|
+
if (data && data.length > 0) {
|
|
49
|
+
this._emit("data", data);
|
|
50
|
+
if (this.pipedStream) {
|
|
51
|
+
this.pipedStream.write(data);
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
if (final) {
|
|
55
|
+
if (this.pipedStream) {
|
|
56
|
+
this.pipedStream.end();
|
|
57
|
+
}
|
|
58
|
+
this._emit("finish");
|
|
59
|
+
}
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
_emit(event, ...args) {
|
|
63
|
+
const callbacks = this.events.get(event);
|
|
64
|
+
if (!callbacks) {
|
|
65
|
+
return;
|
|
66
|
+
}
|
|
67
|
+
for (const cb of callbacks) {
|
|
68
|
+
cb(...args);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
on(event, callback) {
|
|
72
|
+
const callbacks = this.events.get(event) || new Set();
|
|
73
|
+
callbacks.add(callback);
|
|
74
|
+
this.events.set(event, callbacks);
|
|
75
|
+
return this;
|
|
76
|
+
}
|
|
77
|
+
once(event, callback) {
|
|
78
|
+
const wrapped = (...args) => {
|
|
79
|
+
this.off(event, wrapped);
|
|
80
|
+
callback(...args);
|
|
81
|
+
};
|
|
82
|
+
return this.on(event, wrapped);
|
|
83
|
+
}
|
|
84
|
+
off(event, callback) {
|
|
85
|
+
const callbacks = this.events.get(event);
|
|
86
|
+
if (!callbacks) {
|
|
87
|
+
return this;
|
|
88
|
+
}
|
|
89
|
+
callbacks.delete(callback);
|
|
90
|
+
if (callbacks.size === 0) {
|
|
91
|
+
this.events.delete(event);
|
|
92
|
+
}
|
|
93
|
+
return this;
|
|
94
|
+
}
|
|
95
|
+
pipe(stream) {
|
|
96
|
+
this.pipedStream = stream;
|
|
97
|
+
}
|
|
98
|
+
append(data, options) {
|
|
99
|
+
if (this.finalized) {
|
|
100
|
+
throw new Error("Cannot append after finalize");
|
|
101
|
+
}
|
|
102
|
+
let buffer;
|
|
103
|
+
if (options.base64) {
|
|
104
|
+
buffer = base64ToUint8Array(typeof data === "string" ? data : String(data));
|
|
105
|
+
}
|
|
106
|
+
else if (typeof data === "string") {
|
|
107
|
+
buffer = StreamingZipWriterAdapter.textEncoder.encode(data);
|
|
108
|
+
}
|
|
109
|
+
else if (data instanceof Uint8Array) {
|
|
110
|
+
buffer = data;
|
|
111
|
+
}
|
|
112
|
+
else if (ArrayBuffer.isView(data)) {
|
|
113
|
+
buffer = new Uint8Array(data.buffer, data.byteOffset, data.byteLength);
|
|
114
|
+
}
|
|
115
|
+
else if (data instanceof ArrayBuffer) {
|
|
116
|
+
buffer = new Uint8Array(data);
|
|
117
|
+
}
|
|
118
|
+
else {
|
|
119
|
+
buffer = data;
|
|
120
|
+
}
|
|
121
|
+
const file = new ZipDeflateFile(options.name, {
|
|
122
|
+
level: this.level,
|
|
123
|
+
modTime: this.modTime,
|
|
124
|
+
timestamps: this.timestamps
|
|
125
|
+
});
|
|
126
|
+
this.zip.add(file);
|
|
127
|
+
const pushResult = file.push(buffer, true);
|
|
128
|
+
if (pushResult && typeof pushResult.catch === "function") {
|
|
129
|
+
pushResult.catch((err) => this._emit("error", err));
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
finalize() {
|
|
133
|
+
if (this.finalized) {
|
|
134
|
+
return;
|
|
135
|
+
}
|
|
136
|
+
this.finalized = true;
|
|
137
|
+
this.zip.end();
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
StreamingZipWriterAdapter.textEncoder = new TextEncoder();
|
|
141
|
+
/**
|
|
142
|
+
* XLSX class - handles Excel file operations
|
|
143
|
+
* Works in both Node.js and Browser environments
|
|
144
|
+
*/
|
|
145
|
+
class XLSX {
|
|
146
|
+
constructor(workbook) {
|
|
147
|
+
this.workbook = workbook;
|
|
148
|
+
}
|
|
149
|
+
// ===========================================================================
|
|
150
|
+
// Stream creation - cross-platform implementation using modules/stream
|
|
151
|
+
// ===========================================================================
|
|
152
|
+
/**
|
|
153
|
+
* Create a stream from binary data (for media/themes)
|
|
154
|
+
*/
|
|
155
|
+
createBinaryStream(data) {
|
|
156
|
+
const stream = new PassThrough();
|
|
157
|
+
stream.end(data);
|
|
158
|
+
return stream;
|
|
159
|
+
}
|
|
160
|
+
/**
|
|
161
|
+
* Create a stream from string content (for XML parsing)
|
|
162
|
+
*/
|
|
163
|
+
createTextStream(content) {
|
|
164
|
+
const stream = new PassThrough();
|
|
165
|
+
stream.end(content);
|
|
166
|
+
return stream;
|
|
167
|
+
}
|
|
168
|
+
// ===========================================================================
|
|
169
|
+
// Shared implementations - used by all platforms
|
|
170
|
+
// ===========================================================================
|
|
171
|
+
/**
|
|
172
|
+
* Create a StreamBuf instance for buffering data
|
|
173
|
+
*/
|
|
174
|
+
createStreamBuf() {
|
|
175
|
+
return new StreamBuf();
|
|
176
|
+
}
|
|
177
|
+
/**
|
|
178
|
+
* Convert buffer/Uint8Array to string
|
|
179
|
+
*/
|
|
180
|
+
bufferToString(data) {
|
|
181
|
+
return bufferToString(data);
|
|
182
|
+
}
|
|
183
|
+
/**
|
|
184
|
+
* Create a ZIP writer adapter.
|
|
185
|
+
* Can be overridden by subclasses for platform-specific implementations.
|
|
186
|
+
*/
|
|
187
|
+
createZipWriter(options) {
|
|
188
|
+
return new StreamingZipWriterAdapter(options);
|
|
189
|
+
}
|
|
190
|
+
/**
|
|
191
|
+
* Write all workbook content to a ZIP writer
|
|
192
|
+
* Shared by both Node.js write() and browser writeBuffer()
|
|
193
|
+
*/
|
|
194
|
+
async writeToZip(zip, options) {
|
|
195
|
+
const { model } = this.workbook;
|
|
196
|
+
this.prepareModel(model, options);
|
|
197
|
+
await this.addContentTypes(zip, model);
|
|
198
|
+
await this.addOfficeRels(zip, model);
|
|
199
|
+
await this.addWorkbookRels(zip, model);
|
|
200
|
+
await this.addWorksheets(zip, model);
|
|
201
|
+
await this.addSharedStrings(zip, model);
|
|
202
|
+
this.addDrawings(zip, model);
|
|
203
|
+
this.addTables(zip, model);
|
|
204
|
+
this.addPivotTables(zip, model);
|
|
205
|
+
await Promise.all([this.addThemes(zip, model), this.addStyles(zip, model)]);
|
|
206
|
+
await this.addMedia(zip, model);
|
|
207
|
+
await Promise.all([this.addApp(zip, model), this.addCore(zip, model)]);
|
|
208
|
+
await this.addWorkbook(zip, model);
|
|
209
|
+
}
|
|
210
|
+
// ===========================================================================
|
|
211
|
+
// Stream/Buffer operations - shared by all platforms
|
|
212
|
+
// ===========================================================================
|
|
213
|
+
/**
|
|
214
|
+
* Read workbook from a stream
|
|
215
|
+
*/
|
|
216
|
+
async read(stream, options) {
|
|
217
|
+
// Collect all stream data into a single buffer
|
|
218
|
+
const chunks = [];
|
|
219
|
+
await new Promise((resolve, reject) => {
|
|
220
|
+
const onData = (chunk) => {
|
|
221
|
+
chunks.push(chunk);
|
|
222
|
+
};
|
|
223
|
+
const onEnd = () => {
|
|
224
|
+
stream.off("data", onData);
|
|
225
|
+
stream.off("end", onEnd);
|
|
226
|
+
stream.off("error", onError);
|
|
227
|
+
resolve();
|
|
228
|
+
};
|
|
229
|
+
const onError = (err) => {
|
|
230
|
+
stream.off("data", onData);
|
|
231
|
+
stream.off("end", onEnd);
|
|
232
|
+
stream.off("error", onError);
|
|
233
|
+
reject(err);
|
|
234
|
+
};
|
|
235
|
+
stream.on("data", onData);
|
|
236
|
+
stream.on("end", onEnd);
|
|
237
|
+
stream.on("error", onError);
|
|
238
|
+
});
|
|
239
|
+
return this.loadBuffer(concatUint8Arrays(chunks), options);
|
|
240
|
+
}
|
|
241
|
+
/**
|
|
242
|
+
* Write workbook to a stream
|
|
243
|
+
*/
|
|
244
|
+
async write(stream, options) {
|
|
245
|
+
var _a;
|
|
246
|
+
options = options || {};
|
|
247
|
+
options.zip = options.zip || {};
|
|
248
|
+
(_a = options.zip).modTime ?? (_a.modTime = this.workbook.modified ?? this.workbook.created);
|
|
249
|
+
const zip = this.createZipWriter(options.zip);
|
|
250
|
+
zip.pipe(stream);
|
|
251
|
+
await this.writeToZip(zip, options);
|
|
252
|
+
return this._finalize(zip);
|
|
253
|
+
}
|
|
254
|
+
/**
|
|
255
|
+
* Load workbook from buffer/ArrayBuffer/Uint8Array
|
|
256
|
+
*/
|
|
257
|
+
async load(data, options) {
|
|
258
|
+
let buffer;
|
|
259
|
+
// Validate input
|
|
260
|
+
const isBuffer = typeof Buffer !== "undefined" ? Buffer.isBuffer(data) : false;
|
|
261
|
+
if (!data ||
|
|
262
|
+
(typeof data === "object" &&
|
|
263
|
+
!isBuffer &&
|
|
264
|
+
!(data instanceof Uint8Array) &&
|
|
265
|
+
!(data instanceof ArrayBuffer))) {
|
|
266
|
+
throw new Error("Can't read the data of 'the loaded zip file'. Is it in a supported JavaScript type (String, Blob, ArrayBuffer, etc) ?");
|
|
267
|
+
}
|
|
268
|
+
// Handle base64 input
|
|
269
|
+
if (options && options.base64) {
|
|
270
|
+
buffer = base64ToUint8Array(data.toString());
|
|
271
|
+
}
|
|
272
|
+
else if (data instanceof ArrayBuffer) {
|
|
273
|
+
buffer = new Uint8Array(data);
|
|
274
|
+
}
|
|
275
|
+
else if (data instanceof Uint8Array) {
|
|
276
|
+
buffer = data;
|
|
277
|
+
}
|
|
278
|
+
else {
|
|
279
|
+
// Node.js Buffer or other array-like
|
|
280
|
+
buffer = new Uint8Array(data);
|
|
281
|
+
}
|
|
282
|
+
return this.loadBuffer(buffer, options);
|
|
283
|
+
}
|
|
284
|
+
/**
|
|
285
|
+
* Internal: Load from Uint8Array buffer
|
|
286
|
+
*/
|
|
287
|
+
async loadBuffer(buffer, options) {
|
|
288
|
+
const parser = new ZipParser(buffer);
|
|
289
|
+
const filesMap = await parser.extractAll();
|
|
290
|
+
// Convert Map to Record for loadFromFiles
|
|
291
|
+
const allFiles = {};
|
|
292
|
+
for (const [path, content] of filesMap) {
|
|
293
|
+
allFiles[path] = content;
|
|
294
|
+
}
|
|
295
|
+
return this.loadFromFiles(allFiles, options);
|
|
296
|
+
}
|
|
297
|
+
/**
|
|
298
|
+
* Internal: Load workbook from an async stream of ZIP entries.
|
|
299
|
+
*
|
|
300
|
+
* This is the foundation for TRUE streaming reads on platforms that have a
|
|
301
|
+
* streaming ZIP parser (e.g. Node.js `modules/archive` Parse).
|
|
302
|
+
*/
|
|
303
|
+
async loadFromZipEntries(entries, options) {
|
|
304
|
+
const model = {
|
|
305
|
+
worksheets: [],
|
|
306
|
+
worksheetHash: {},
|
|
307
|
+
worksheetRels: [],
|
|
308
|
+
themes: {},
|
|
309
|
+
media: [],
|
|
310
|
+
mediaIndex: {},
|
|
311
|
+
drawings: {},
|
|
312
|
+
drawingRels: {},
|
|
313
|
+
comments: {},
|
|
314
|
+
tables: {},
|
|
315
|
+
vmlDrawings: {},
|
|
316
|
+
pivotTables: {},
|
|
317
|
+
pivotTableRels: {},
|
|
318
|
+
pivotCacheDefinitions: {},
|
|
319
|
+
pivotCacheDefinitionRels: {},
|
|
320
|
+
pivotCacheRecords: {}
|
|
321
|
+
};
|
|
322
|
+
for await (const entry of entries) {
|
|
323
|
+
let drained = false;
|
|
324
|
+
const drainEntry = async () => {
|
|
325
|
+
if (drained) {
|
|
326
|
+
return;
|
|
327
|
+
}
|
|
328
|
+
drained = true;
|
|
329
|
+
await entry.drain();
|
|
330
|
+
};
|
|
331
|
+
if (entry.type === "Directory") {
|
|
332
|
+
await drainEntry();
|
|
333
|
+
continue;
|
|
334
|
+
}
|
|
335
|
+
const entryName = normalizeZipPath(entry.name);
|
|
336
|
+
const stream = entry.stream;
|
|
337
|
+
try {
|
|
338
|
+
const sheetNo = getWorksheetNoFromWorksheetPath(entryName);
|
|
339
|
+
if (sheetNo !== undefined) {
|
|
340
|
+
await this._processWorksheetEntry(stream, model, sheetNo, options, entryName);
|
|
341
|
+
continue;
|
|
342
|
+
}
|
|
343
|
+
switch (entryName) {
|
|
344
|
+
case OOXML_PATHS.rootRels:
|
|
345
|
+
model.globalRels = await this.parseRels(stream);
|
|
346
|
+
break;
|
|
347
|
+
case OOXML_PATHS.xlWorkbook: {
|
|
348
|
+
const workbook = await this.parseWorkbook(stream);
|
|
349
|
+
model.sheets = workbook.sheets;
|
|
350
|
+
model.definedNames = workbook.definedNames;
|
|
351
|
+
model.views = workbook.views;
|
|
352
|
+
model.properties = workbook.properties;
|
|
353
|
+
model.calcProperties = workbook.calcProperties;
|
|
354
|
+
model.pivotCaches = workbook.pivotCaches;
|
|
355
|
+
break;
|
|
356
|
+
}
|
|
357
|
+
case OOXML_PATHS.xlSharedStrings:
|
|
358
|
+
model.sharedStrings = new SharedStringsXform();
|
|
359
|
+
await model.sharedStrings.parseStream(stream);
|
|
360
|
+
break;
|
|
361
|
+
case OOXML_PATHS.xlWorkbookRels:
|
|
362
|
+
model.workbookRels = await this.parseRels(stream);
|
|
363
|
+
break;
|
|
364
|
+
case OOXML_PATHS.docPropsApp: {
|
|
365
|
+
const appXform = new AppXform();
|
|
366
|
+
const appProperties = await appXform.parseStream(stream);
|
|
367
|
+
model.company = appProperties.company;
|
|
368
|
+
model.manager = appProperties.manager;
|
|
369
|
+
break;
|
|
370
|
+
}
|
|
371
|
+
case OOXML_PATHS.docPropsCore: {
|
|
372
|
+
const coreXform = new CoreXform();
|
|
373
|
+
const coreProperties = await coreXform.parseStream(stream);
|
|
374
|
+
Object.assign(model, coreProperties);
|
|
375
|
+
break;
|
|
376
|
+
}
|
|
377
|
+
case OOXML_PATHS.xlStyles:
|
|
378
|
+
model.styles = new StylesXform();
|
|
379
|
+
await model.styles.parseStream(stream);
|
|
380
|
+
break;
|
|
381
|
+
default: {
|
|
382
|
+
const handled = await this._processDefaultEntry(stream, model, entryName);
|
|
383
|
+
if (!handled) {
|
|
384
|
+
// Important for true streaming parsers: always consume unknown entries
|
|
385
|
+
await drainEntry();
|
|
386
|
+
}
|
|
387
|
+
break;
|
|
388
|
+
}
|
|
389
|
+
}
|
|
390
|
+
}
|
|
391
|
+
finally {
|
|
392
|
+
// Make sure we don't leave the entry stream partially consumed.
|
|
393
|
+
// This is critical for true streaming parsers which may otherwise abort
|
|
394
|
+
// the underlying entry stream (showing up as AbortError/ABORT_ERR).
|
|
395
|
+
try {
|
|
396
|
+
await drainEntry();
|
|
397
|
+
}
|
|
398
|
+
catch {
|
|
399
|
+
// ignore drain errors; the primary parse error (if any) is more useful
|
|
400
|
+
}
|
|
401
|
+
}
|
|
402
|
+
}
|
|
403
|
+
this.reconcile(model, options);
|
|
404
|
+
this.workbook.model = model;
|
|
405
|
+
return this.workbook;
|
|
406
|
+
}
|
|
407
|
+
/**
|
|
408
|
+
* Write workbook to buffer
|
|
409
|
+
*/
|
|
410
|
+
async writeBuffer(options) {
|
|
411
|
+
var _a;
|
|
412
|
+
options = options || {};
|
|
413
|
+
options.zip = options.zip || {};
|
|
414
|
+
(_a = options.zip).modTime ?? (_a.modTime = this.workbook.modified ?? this.workbook.created);
|
|
415
|
+
const zip = this.createZipWriter(options.zip);
|
|
416
|
+
const stream = this.createStreamBuf();
|
|
417
|
+
zip.pipe(stream);
|
|
418
|
+
await this.writeToZip(zip, options);
|
|
419
|
+
await this._finalize(zip);
|
|
420
|
+
return stream.read() || new Uint8Array(0);
|
|
421
|
+
}
|
|
422
|
+
// ===========================================================================
|
|
423
|
+
// Media handling - base implementation (buffer/base64 only)
|
|
424
|
+
// ===========================================================================
|
|
425
|
+
/**
|
|
426
|
+
* Add media files to ZIP
|
|
427
|
+
* Supports buffer, base64, and filename (if readFileAsync is provided)
|
|
428
|
+
*/
|
|
429
|
+
async addMedia(zip, model) {
|
|
430
|
+
await Promise.all(model.media.map(async (medium) => {
|
|
431
|
+
if (medium.type !== "image") {
|
|
432
|
+
throw new Error("Unsupported media");
|
|
433
|
+
}
|
|
434
|
+
// Preserve legacy behavior: `${undefined}` becomes "undefined" in template strings
|
|
435
|
+
const mediaName = medium.name ?? "undefined";
|
|
436
|
+
const filename = mediaPath(`${mediaName}.${medium.extension}`);
|
|
437
|
+
if (medium.filename) {
|
|
438
|
+
if (this.readFileAsync) {
|
|
439
|
+
const data = await this.readFileAsync(medium.filename);
|
|
440
|
+
return zip.append(data, { name: filename });
|
|
441
|
+
}
|
|
442
|
+
throw new Error("Loading images from filename is not supported in this environment");
|
|
443
|
+
}
|
|
444
|
+
if (medium.buffer) {
|
|
445
|
+
return zip.append(medium.buffer, { name: filename });
|
|
446
|
+
}
|
|
447
|
+
if (medium.base64) {
|
|
448
|
+
const content = medium.base64.substring(medium.base64.indexOf(",") + 1);
|
|
449
|
+
return zip.append(content, { name: filename, base64: true });
|
|
450
|
+
}
|
|
451
|
+
throw new Error("Unsupported media");
|
|
452
|
+
}));
|
|
453
|
+
}
|
|
454
|
+
// ===========================================================================
|
|
455
|
+
// Parse helpers - shared by all platforms
|
|
456
|
+
// ===========================================================================
|
|
457
|
+
parseRels(stream) {
|
|
458
|
+
const xform = new RelationshipsXform();
|
|
459
|
+
return xform.parseStream(stream);
|
|
460
|
+
}
|
|
461
|
+
parseWorkbook(stream) {
|
|
462
|
+
const xform = new WorkbookXform();
|
|
463
|
+
return xform.parseStream(stream);
|
|
464
|
+
}
|
|
465
|
+
parseSharedStrings(stream) {
|
|
466
|
+
const xform = new SharedStringsXform();
|
|
467
|
+
return xform.parseStream(stream);
|
|
468
|
+
}
|
|
469
|
+
// ===========================================================================
|
|
470
|
+
// Reconcile - shared by all platforms
|
|
471
|
+
// ===========================================================================
|
|
472
|
+
reconcile(model, options) {
|
|
473
|
+
const workbookXform = new WorkbookXform();
|
|
474
|
+
const worksheetXform = new WorkSheetXform(options);
|
|
475
|
+
const drawingXform = new DrawingXform();
|
|
476
|
+
const tableXform = new TableXform();
|
|
477
|
+
workbookXform.reconcile(model);
|
|
478
|
+
// reconcile drawings with their rels
|
|
479
|
+
const drawingOptions = {
|
|
480
|
+
media: model.media,
|
|
481
|
+
mediaIndex: model.mediaIndex
|
|
482
|
+
};
|
|
483
|
+
Object.keys(model.drawings).forEach(name => {
|
|
484
|
+
const drawing = model.drawings[name];
|
|
485
|
+
const drawingRel = model.drawingRels[name];
|
|
486
|
+
if (drawingRel) {
|
|
487
|
+
drawingOptions.rels = drawingRel.reduce((o, rel) => {
|
|
488
|
+
o[rel.Id] = rel;
|
|
489
|
+
return o;
|
|
490
|
+
}, {});
|
|
491
|
+
(drawing.anchors || []).forEach((anchor) => {
|
|
492
|
+
const hyperlinks = anchor.picture && anchor.picture.hyperlinks;
|
|
493
|
+
if (hyperlinks && drawingOptions.rels[hyperlinks.rId]) {
|
|
494
|
+
hyperlinks.hyperlink = drawingOptions.rels[hyperlinks.rId].Target;
|
|
495
|
+
delete hyperlinks.rId;
|
|
496
|
+
}
|
|
497
|
+
});
|
|
498
|
+
drawingXform.reconcile(drawing, drawingOptions);
|
|
499
|
+
}
|
|
500
|
+
});
|
|
501
|
+
// reconcile tables with the default styles
|
|
502
|
+
const tableOptions = {
|
|
503
|
+
styles: model.styles
|
|
504
|
+
};
|
|
505
|
+
Object.values(model.tables).forEach((table) => {
|
|
506
|
+
tableXform.reconcile(table, tableOptions);
|
|
507
|
+
});
|
|
508
|
+
// Reconcile pivot tables
|
|
509
|
+
this._reconcilePivotTables(model);
|
|
510
|
+
const sheetOptions = {
|
|
511
|
+
styles: model.styles,
|
|
512
|
+
sharedStrings: model.sharedStrings,
|
|
513
|
+
media: model.media,
|
|
514
|
+
mediaIndex: model.mediaIndex,
|
|
515
|
+
date1904: model.properties && model.properties.date1904,
|
|
516
|
+
drawings: model.drawings,
|
|
517
|
+
comments: model.comments,
|
|
518
|
+
tables: model.tables,
|
|
519
|
+
vmlDrawings: model.vmlDrawings,
|
|
520
|
+
pivotTables: model.pivotTablesIndexed
|
|
521
|
+
};
|
|
522
|
+
model.worksheets.forEach((worksheet) => {
|
|
523
|
+
worksheet.relationships = model.worksheetRels[worksheet.sheetNo];
|
|
524
|
+
worksheetXform.reconcile(worksheet, sheetOptions);
|
|
525
|
+
});
|
|
526
|
+
// delete unnecessary parts
|
|
527
|
+
delete model.worksheetHash;
|
|
528
|
+
delete model.worksheetRels;
|
|
529
|
+
delete model.globalRels;
|
|
530
|
+
delete model.sharedStrings;
|
|
531
|
+
delete model.workbookRels;
|
|
532
|
+
delete model.sheetDefs;
|
|
533
|
+
delete model.styles;
|
|
534
|
+
delete model.mediaIndex;
|
|
535
|
+
delete model.drawings;
|
|
536
|
+
delete model.drawingRels;
|
|
537
|
+
delete model.vmlDrawings;
|
|
538
|
+
delete model.pivotTableRels;
|
|
539
|
+
delete model.pivotCacheDefinitionRels;
|
|
540
|
+
}
|
|
541
|
+
/**
|
|
542
|
+
* Reconcile pivot tables by linking them to worksheets and their cache data.
|
|
543
|
+
*/
|
|
544
|
+
_reconcilePivotTables(model) {
|
|
545
|
+
const rawPivotTables = model.pivotTables || {};
|
|
546
|
+
if (typeof rawPivotTables !== "object" || Object.keys(rawPivotTables).length === 0) {
|
|
547
|
+
model.pivotTables = [];
|
|
548
|
+
model.pivotTablesIndexed = {};
|
|
549
|
+
return;
|
|
550
|
+
}
|
|
551
|
+
const definitionToCacheId = this._buildDefinitionToCacheIdMap(model);
|
|
552
|
+
const cacheMap = new Map();
|
|
553
|
+
Object.entries(model.pivotCacheDefinitions || {}).forEach(([name, definition]) => {
|
|
554
|
+
const cacheId = definitionToCacheId.get(name);
|
|
555
|
+
if (cacheId !== undefined) {
|
|
556
|
+
const recordsName = name.replace("Definition", "Records");
|
|
557
|
+
cacheMap.set(cacheId, {
|
|
558
|
+
definition,
|
|
559
|
+
records: model.pivotCacheRecords?.[recordsName],
|
|
560
|
+
definitionName: name
|
|
561
|
+
});
|
|
562
|
+
}
|
|
563
|
+
});
|
|
564
|
+
const loadedPivotTables = [];
|
|
565
|
+
const pivotTablesIndexed = {};
|
|
566
|
+
Object.entries(rawPivotTables).forEach(([pivotName, pivotTable]) => {
|
|
567
|
+
const pt = pivotTable;
|
|
568
|
+
const tableNumber = this._extractTableNumber(pivotName);
|
|
569
|
+
const cacheData = cacheMap.get(pt.cacheId);
|
|
570
|
+
const completePivotTable = {
|
|
571
|
+
...pt,
|
|
572
|
+
tableNumber,
|
|
573
|
+
cacheDefinition: cacheData?.definition,
|
|
574
|
+
cacheRecords: cacheData?.records,
|
|
575
|
+
cacheFields: cacheData?.definition?.cacheFields || [],
|
|
576
|
+
rows: pt.rowFields.filter(f => f >= 0),
|
|
577
|
+
columns: pt.colFields.filter(f => f >= 0 && f !== -2),
|
|
578
|
+
values: pt.dataFields.map(df => df.fld),
|
|
579
|
+
metric: this._determineMetric(pt.dataFields),
|
|
580
|
+
applyWidthHeightFormats: pt.applyWidthHeightFormats || "0"
|
|
581
|
+
};
|
|
582
|
+
loadedPivotTables.push(completePivotTable);
|
|
583
|
+
pivotTablesIndexed[pivotTableRelTargetFromWorksheetName(pivotName)] = completePivotTable;
|
|
584
|
+
});
|
|
585
|
+
loadedPivotTables.sort((a, b) => a.tableNumber - b.tableNumber);
|
|
586
|
+
model.pivotTables = loadedPivotTables;
|
|
587
|
+
model.pivotTablesIndexed = pivotTablesIndexed;
|
|
588
|
+
model.loadedPivotTables = loadedPivotTables;
|
|
589
|
+
}
|
|
590
|
+
_extractTableNumber(name) {
|
|
591
|
+
const match = name.match(/pivotTable(\d+)/);
|
|
592
|
+
return match ? parseInt(match[1], 10) : 1;
|
|
593
|
+
}
|
|
594
|
+
_buildCacheIdMap(model) {
|
|
595
|
+
const rIdToCacheId = new Map();
|
|
596
|
+
const pivotCaches = model.pivotCaches || [];
|
|
597
|
+
for (const cache of pivotCaches) {
|
|
598
|
+
if (cache.cacheId && cache.rId) {
|
|
599
|
+
rIdToCacheId.set(cache.rId, parseInt(cache.cacheId, 10));
|
|
600
|
+
}
|
|
601
|
+
}
|
|
602
|
+
return rIdToCacheId;
|
|
603
|
+
}
|
|
604
|
+
_buildDefinitionToCacheIdMap(model) {
|
|
605
|
+
const definitionToCacheId = new Map();
|
|
606
|
+
const rIdToCacheId = this._buildCacheIdMap(model);
|
|
607
|
+
const workbookRels = model.workbookRels || [];
|
|
608
|
+
for (const rel of workbookRels) {
|
|
609
|
+
if (rel.Type === XLSX.RelType.PivotCacheDefinition && rel.Target) {
|
|
610
|
+
const match = rel.Target.match(/pivotCacheDefinition(\d+)\.xml/);
|
|
611
|
+
if (match) {
|
|
612
|
+
const defName = `pivotCacheDefinition${match[1]}`;
|
|
613
|
+
const cacheId = rIdToCacheId.get(rel.Id);
|
|
614
|
+
if (cacheId !== undefined) {
|
|
615
|
+
definitionToCacheId.set(defName, cacheId);
|
|
616
|
+
}
|
|
617
|
+
}
|
|
618
|
+
}
|
|
619
|
+
}
|
|
620
|
+
return definitionToCacheId;
|
|
621
|
+
}
|
|
622
|
+
_determineMetric(dataFields) {
|
|
623
|
+
if (dataFields.length > 0 && dataFields[0].subtotal === "count") {
|
|
624
|
+
return "count";
|
|
625
|
+
}
|
|
626
|
+
return "sum";
|
|
627
|
+
}
|
|
628
|
+
// ===========================================================================
|
|
629
|
+
// Process Entry methods - shared by all platforms
|
|
630
|
+
// ===========================================================================
|
|
631
|
+
async _processWorksheetEntry(stream, model, sheetNo, options, path) {
|
|
632
|
+
const xform = new WorkSheetXform(options);
|
|
633
|
+
const worksheet = await xform.parseStream(stream);
|
|
634
|
+
if (!worksheet) {
|
|
635
|
+
throw new Error(`Failed to parse worksheet ${path}`);
|
|
636
|
+
}
|
|
637
|
+
worksheet.sheetNo = sheetNo;
|
|
638
|
+
model.worksheetHash[path] = worksheet;
|
|
639
|
+
model.worksheets.push(worksheet);
|
|
640
|
+
}
|
|
641
|
+
async _processCommentEntry(stream, model, name) {
|
|
642
|
+
const xform = new CommentsXform();
|
|
643
|
+
const comments = await xform.parseStream(stream);
|
|
644
|
+
model.comments[commentsRelTargetFromWorksheetName(name)] = comments;
|
|
645
|
+
}
|
|
646
|
+
async _processTableEntry(stream, model, name) {
|
|
647
|
+
const xform = new TableXform();
|
|
648
|
+
const table = await xform.parseStream(stream);
|
|
649
|
+
model.tables[tableRelTargetFromWorksheetName(name)] = table;
|
|
650
|
+
}
|
|
651
|
+
async _processWorksheetRelsEntry(stream, model, sheetNo) {
|
|
652
|
+
const xform = new RelationshipsXform();
|
|
653
|
+
const relationships = await xform.parseStream(stream);
|
|
654
|
+
model.worksheetRels[sheetNo] = relationships;
|
|
655
|
+
}
|
|
656
|
+
async _processMediaEntry(stream, model, filename) {
|
|
657
|
+
const lastDot = filename.lastIndexOf(".");
|
|
658
|
+
if (lastDot >= 1) {
|
|
659
|
+
const extension = filename.substr(lastDot + 1);
|
|
660
|
+
const name = filename.substr(0, lastDot);
|
|
661
|
+
await new Promise((resolve, reject) => {
|
|
662
|
+
const streamBuf = this.createStreamBuf();
|
|
663
|
+
const cleanup = () => {
|
|
664
|
+
stream.off("error", onError);
|
|
665
|
+
streamBuf.off("error", onError);
|
|
666
|
+
streamBuf.off("finish", onFinish);
|
|
667
|
+
};
|
|
668
|
+
const onFinish = () => {
|
|
669
|
+
cleanup();
|
|
670
|
+
model.mediaIndex[filename] = model.media.length;
|
|
671
|
+
model.mediaIndex[name] = model.media.length;
|
|
672
|
+
const medium = {
|
|
673
|
+
type: "image",
|
|
674
|
+
name,
|
|
675
|
+
extension,
|
|
676
|
+
buffer: streamBuf.read()
|
|
677
|
+
};
|
|
678
|
+
model.media.push(medium);
|
|
679
|
+
resolve();
|
|
680
|
+
};
|
|
681
|
+
const onError = (error) => {
|
|
682
|
+
cleanup();
|
|
683
|
+
reject(error);
|
|
684
|
+
};
|
|
685
|
+
streamBuf.once("finish", onFinish);
|
|
686
|
+
stream.on("error", onError);
|
|
687
|
+
streamBuf.on("error", onError);
|
|
688
|
+
stream.pipe(streamBuf);
|
|
689
|
+
});
|
|
690
|
+
}
|
|
691
|
+
}
|
|
692
|
+
async _processDrawingEntry(entry, model, name) {
|
|
693
|
+
const xform = new DrawingXform();
|
|
694
|
+
const drawing = await xform.parseStream(entry);
|
|
695
|
+
model.drawings[name] = drawing;
|
|
696
|
+
}
|
|
697
|
+
async _processDrawingRelsEntry(entry, model, name) {
|
|
698
|
+
const xform = new RelationshipsXform();
|
|
699
|
+
const relationships = await xform.parseStream(entry);
|
|
700
|
+
model.drawingRels[name] = relationships;
|
|
701
|
+
}
|
|
702
|
+
async _processVmlDrawingEntry(entry, model, name) {
|
|
703
|
+
const xform = new VmlNotesXform();
|
|
704
|
+
const vmlDrawing = await xform.parseStream(entry);
|
|
705
|
+
model.vmlDrawings[vmlDrawingRelTargetFromWorksheetName(name)] = vmlDrawing;
|
|
706
|
+
}
|
|
707
|
+
async _processThemeEntry(stream, model, name) {
|
|
708
|
+
await new Promise((resolve, reject) => {
|
|
709
|
+
const streamBuf = this.createStreamBuf();
|
|
710
|
+
const cleanup = () => {
|
|
711
|
+
stream.off("error", onError);
|
|
712
|
+
streamBuf.off("error", onError);
|
|
713
|
+
streamBuf.off("finish", onFinish);
|
|
714
|
+
};
|
|
715
|
+
const onFinish = () => {
|
|
716
|
+
cleanup();
|
|
717
|
+
const data = streamBuf.read();
|
|
718
|
+
model.themes[name] = data
|
|
719
|
+
? typeof data === "string"
|
|
720
|
+
? data
|
|
721
|
+
: this.bufferToString(data)
|
|
722
|
+
: "";
|
|
723
|
+
resolve();
|
|
724
|
+
};
|
|
725
|
+
const onError = (err) => {
|
|
726
|
+
cleanup();
|
|
727
|
+
reject(err);
|
|
728
|
+
};
|
|
729
|
+
streamBuf.once("finish", onFinish);
|
|
730
|
+
stream.on("error", onError);
|
|
731
|
+
streamBuf.on("error", onError);
|
|
732
|
+
stream.pipe(streamBuf);
|
|
733
|
+
});
|
|
734
|
+
}
|
|
735
|
+
async _processPivotTableEntry(stream, model, name) {
|
|
736
|
+
const xform = new PivotTableXform();
|
|
737
|
+
const pivotTable = await xform.parseStream(stream);
|
|
738
|
+
if (pivotTable) {
|
|
739
|
+
model.pivotTables[name] = pivotTable;
|
|
740
|
+
}
|
|
741
|
+
}
|
|
742
|
+
async _processPivotTableRelsEntry(stream, model, name) {
|
|
743
|
+
const xform = new RelationshipsXform();
|
|
744
|
+
const relationships = await xform.parseStream(stream);
|
|
745
|
+
model.pivotTableRels[name] = relationships;
|
|
746
|
+
}
|
|
747
|
+
async _processPivotCacheDefinitionEntry(stream, model, name) {
|
|
748
|
+
const xform = new PivotCacheDefinitionXform();
|
|
749
|
+
const cacheDefinition = await xform.parseStream(stream);
|
|
750
|
+
if (cacheDefinition) {
|
|
751
|
+
model.pivotCacheDefinitions[name] = cacheDefinition;
|
|
752
|
+
}
|
|
753
|
+
}
|
|
754
|
+
async _processPivotCacheDefinitionRelsEntry(stream, model, name) {
|
|
755
|
+
const xform = new RelationshipsXform();
|
|
756
|
+
const relationships = await xform.parseStream(stream);
|
|
757
|
+
model.pivotCacheDefinitionRels[name] = relationships;
|
|
758
|
+
}
|
|
759
|
+
async _processPivotCacheRecordsEntry(stream, model, name) {
|
|
760
|
+
const xform = new PivotCacheRecordsXform();
|
|
761
|
+
const cacheRecords = await xform.parseStream(stream);
|
|
762
|
+
if (cacheRecords) {
|
|
763
|
+
model.pivotCacheRecords[name] = cacheRecords;
|
|
764
|
+
}
|
|
765
|
+
}
|
|
766
|
+
// ===========================================================================
|
|
767
|
+
// loadFromFiles - shared logic for loading from pre-extracted ZIP data
|
|
768
|
+
// ===========================================================================
|
|
769
|
+
async loadFromFiles(zipData, options) {
|
|
770
|
+
const model = {
|
|
771
|
+
worksheets: [],
|
|
772
|
+
worksheetHash: {},
|
|
773
|
+
worksheetRels: [],
|
|
774
|
+
themes: {},
|
|
775
|
+
media: [],
|
|
776
|
+
mediaIndex: {},
|
|
777
|
+
drawings: {},
|
|
778
|
+
drawingRels: {},
|
|
779
|
+
comments: {},
|
|
780
|
+
tables: {},
|
|
781
|
+
vmlDrawings: {},
|
|
782
|
+
pivotTables: {},
|
|
783
|
+
pivotTableRels: {},
|
|
784
|
+
pivotCacheDefinitions: {},
|
|
785
|
+
pivotCacheDefinitionRels: {},
|
|
786
|
+
pivotCacheRecords: {}
|
|
787
|
+
};
|
|
788
|
+
const entries = Object.keys(zipData).map(name => ({
|
|
789
|
+
name,
|
|
790
|
+
dir: name.endsWith("/"),
|
|
791
|
+
data: zipData[name]
|
|
792
|
+
}));
|
|
793
|
+
for (const entry of entries) {
|
|
794
|
+
if (!entry.dir) {
|
|
795
|
+
const entryName = normalizeZipPath(entry.name);
|
|
796
|
+
// Create appropriate stream based on entry type
|
|
797
|
+
const isBinaryEntry = isBinaryEntryPath(entryName);
|
|
798
|
+
const stream = isBinaryEntry
|
|
799
|
+
? this.createBinaryStream(entry.data)
|
|
800
|
+
: this.createTextStream(this.bufferToString(entry.data));
|
|
801
|
+
const sheetNo = getWorksheetNoFromWorksheetPath(entryName);
|
|
802
|
+
if (sheetNo !== undefined) {
|
|
803
|
+
await this._processWorksheetEntry(stream, model, sheetNo, options, entryName);
|
|
804
|
+
}
|
|
805
|
+
else {
|
|
806
|
+
switch (entryName) {
|
|
807
|
+
case OOXML_PATHS.rootRels:
|
|
808
|
+
model.globalRels = await this.parseRels(stream);
|
|
809
|
+
break;
|
|
810
|
+
case OOXML_PATHS.xlWorkbook: {
|
|
811
|
+
const workbook = await this.parseWorkbook(stream);
|
|
812
|
+
model.sheets = workbook.sheets;
|
|
813
|
+
model.definedNames = workbook.definedNames;
|
|
814
|
+
model.views = workbook.views;
|
|
815
|
+
model.properties = workbook.properties;
|
|
816
|
+
model.calcProperties = workbook.calcProperties;
|
|
817
|
+
model.pivotCaches = workbook.pivotCaches;
|
|
818
|
+
break;
|
|
819
|
+
}
|
|
820
|
+
case OOXML_PATHS.xlSharedStrings:
|
|
821
|
+
model.sharedStrings = new SharedStringsXform();
|
|
822
|
+
await model.sharedStrings.parseStream(stream);
|
|
823
|
+
break;
|
|
824
|
+
case OOXML_PATHS.xlWorkbookRels:
|
|
825
|
+
model.workbookRels = await this.parseRels(stream);
|
|
826
|
+
break;
|
|
827
|
+
case OOXML_PATHS.docPropsApp: {
|
|
828
|
+
const appXform = new AppXform();
|
|
829
|
+
const appProperties = await appXform.parseStream(stream);
|
|
830
|
+
model.company = appProperties.company;
|
|
831
|
+
model.manager = appProperties.manager;
|
|
832
|
+
break;
|
|
833
|
+
}
|
|
834
|
+
case OOXML_PATHS.docPropsCore: {
|
|
835
|
+
const coreXform = new CoreXform();
|
|
836
|
+
const coreProperties = await coreXform.parseStream(stream);
|
|
837
|
+
Object.assign(model, coreProperties);
|
|
838
|
+
break;
|
|
839
|
+
}
|
|
840
|
+
case OOXML_PATHS.xlStyles:
|
|
841
|
+
model.styles = new StylesXform();
|
|
842
|
+
await model.styles.parseStream(stream);
|
|
843
|
+
break;
|
|
844
|
+
default:
|
|
845
|
+
await this._processDefaultEntry(stream, model, entryName);
|
|
846
|
+
}
|
|
847
|
+
}
|
|
848
|
+
}
|
|
849
|
+
}
|
|
850
|
+
this.reconcile(model, options);
|
|
851
|
+
this.workbook.model = model;
|
|
852
|
+
return this.workbook;
|
|
853
|
+
}
|
|
854
|
+
/**
|
|
855
|
+
* Process default entries (drawings, comments, tables, etc.)
|
|
856
|
+
*/
|
|
857
|
+
async _processDefaultEntry(stream, model, entryName) {
|
|
858
|
+
const worksheetRelsSheetNo = getWorksheetNoFromWorksheetRelsPath(entryName);
|
|
859
|
+
if (worksheetRelsSheetNo !== undefined) {
|
|
860
|
+
const sheetNo = worksheetRelsSheetNo;
|
|
861
|
+
await this._processWorksheetRelsEntry(stream, model, sheetNo);
|
|
862
|
+
return true;
|
|
863
|
+
}
|
|
864
|
+
const mediaFilename = getMediaFilenameFromPath(entryName);
|
|
865
|
+
if (mediaFilename) {
|
|
866
|
+
await this._processMediaEntry(stream, model, mediaFilename);
|
|
867
|
+
return true;
|
|
868
|
+
}
|
|
869
|
+
const drawingName = getDrawingNameFromPath(entryName);
|
|
870
|
+
if (drawingName) {
|
|
871
|
+
await this._processDrawingEntry(stream, model, drawingName);
|
|
872
|
+
return true;
|
|
873
|
+
}
|
|
874
|
+
const drawingRelsName = getDrawingNameFromRelsPath(entryName);
|
|
875
|
+
if (drawingRelsName) {
|
|
876
|
+
await this._processDrawingRelsEntry(stream, model, drawingRelsName);
|
|
877
|
+
return true;
|
|
878
|
+
}
|
|
879
|
+
const vmlDrawingName = getVmlDrawingNameFromPath(entryName);
|
|
880
|
+
if (vmlDrawingName) {
|
|
881
|
+
await this._processVmlDrawingEntry(stream, model, vmlDrawingName);
|
|
882
|
+
return true;
|
|
883
|
+
}
|
|
884
|
+
const commentsIndex = getCommentsIndexFromPath(entryName);
|
|
885
|
+
if (commentsIndex) {
|
|
886
|
+
await this._processCommentEntry(stream, model, `comments${commentsIndex}`);
|
|
887
|
+
return true;
|
|
888
|
+
}
|
|
889
|
+
const tableName = getTableNameFromPath(entryName);
|
|
890
|
+
if (tableName) {
|
|
891
|
+
await this._processTableEntry(stream, model, tableName);
|
|
892
|
+
return true;
|
|
893
|
+
}
|
|
894
|
+
const themeName = getThemeNameFromPath(entryName);
|
|
895
|
+
if (themeName) {
|
|
896
|
+
await this._processThemeEntry(stream, model, themeName);
|
|
897
|
+
return true;
|
|
898
|
+
}
|
|
899
|
+
// Pivot table files
|
|
900
|
+
const pivotTableName = getPivotTableNameFromPath(entryName);
|
|
901
|
+
if (pivotTableName) {
|
|
902
|
+
await this._processPivotTableEntry(stream, model, pivotTableName);
|
|
903
|
+
return true;
|
|
904
|
+
}
|
|
905
|
+
const pivotTableRelsName = getPivotTableNameFromRelsPath(entryName);
|
|
906
|
+
if (pivotTableRelsName) {
|
|
907
|
+
await this._processPivotTableRelsEntry(stream, model, pivotTableRelsName);
|
|
908
|
+
return true;
|
|
909
|
+
}
|
|
910
|
+
// Pivot cache files
|
|
911
|
+
const pivotCacheDefinitionName = getPivotCacheDefinitionNameFromPath(entryName);
|
|
912
|
+
if (pivotCacheDefinitionName) {
|
|
913
|
+
await this._processPivotCacheDefinitionEntry(stream, model, pivotCacheDefinitionName);
|
|
914
|
+
return true;
|
|
915
|
+
}
|
|
916
|
+
const pivotCacheDefinitionRelsName = getPivotCacheDefinitionNameFromRelsPath(entryName);
|
|
917
|
+
if (pivotCacheDefinitionRelsName) {
|
|
918
|
+
await this._processPivotCacheDefinitionRelsEntry(stream, model, pivotCacheDefinitionRelsName);
|
|
919
|
+
return true;
|
|
920
|
+
}
|
|
921
|
+
const pivotCacheRecordsName = getPivotCacheRecordsNameFromPath(entryName);
|
|
922
|
+
if (pivotCacheRecordsName) {
|
|
923
|
+
await this._processPivotCacheRecordsEntry(stream, model, pivotCacheRecordsName);
|
|
924
|
+
return true;
|
|
925
|
+
}
|
|
926
|
+
return false;
|
|
927
|
+
}
|
|
928
|
+
// ===========================================================================
|
|
929
|
+
// Write methods - shared by all platforms
|
|
930
|
+
// ===========================================================================
|
|
931
|
+
async addContentTypes(zip, model) {
|
|
932
|
+
const xform = new ContentTypesXform();
|
|
933
|
+
const xml = xform.toXml(model);
|
|
934
|
+
zip.append(xml, { name: OOXML_PATHS.contentTypes });
|
|
935
|
+
}
|
|
936
|
+
async addApp(zip, model) {
|
|
937
|
+
const xform = new AppXform();
|
|
938
|
+
const xml = xform.toXml(model);
|
|
939
|
+
zip.append(xml, { name: OOXML_PATHS.docPropsApp });
|
|
940
|
+
}
|
|
941
|
+
async addCore(zip, model) {
|
|
942
|
+
const xform = new CoreXform();
|
|
943
|
+
zip.append(xform.toXml(model), { name: OOXML_PATHS.docPropsCore });
|
|
944
|
+
}
|
|
945
|
+
async addThemes(zip, model) {
|
|
946
|
+
const themes = model.themes || { theme1: theme1Xml };
|
|
947
|
+
Object.keys(themes).forEach(name => {
|
|
948
|
+
const xml = themes[name];
|
|
949
|
+
zip.append(xml, { name: themePath(name) });
|
|
950
|
+
});
|
|
951
|
+
}
|
|
952
|
+
async addOfficeRels(zip, _model) {
|
|
953
|
+
const xform = new RelationshipsXform();
|
|
954
|
+
const xml = xform.toXml([
|
|
955
|
+
{ Id: "rId1", Type: XLSX.RelType.OfficeDocument, Target: OOXML_PATHS.xlWorkbook },
|
|
956
|
+
{ Id: "rId2", Type: XLSX.RelType.CoreProperties, Target: OOXML_PATHS.docPropsCore },
|
|
957
|
+
{ Id: "rId3", Type: XLSX.RelType.ExtenderProperties, Target: OOXML_PATHS.docPropsApp }
|
|
958
|
+
]);
|
|
959
|
+
zip.append(xml, { name: OOXML_PATHS.rootRels });
|
|
960
|
+
}
|
|
961
|
+
async addWorkbookRels(zip, model) {
|
|
962
|
+
let count = 1;
|
|
963
|
+
const relationships = [
|
|
964
|
+
{ Id: `rId${count++}`, Type: XLSX.RelType.Styles, Target: OOXML_REL_TARGETS.workbookStyles },
|
|
965
|
+
{ Id: `rId${count++}`, Type: XLSX.RelType.Theme, Target: OOXML_REL_TARGETS.workbookTheme1 }
|
|
966
|
+
];
|
|
967
|
+
if (model.sharedStrings.count) {
|
|
968
|
+
relationships.push({
|
|
969
|
+
Id: `rId${count++}`,
|
|
970
|
+
Type: XLSX.RelType.SharedStrings,
|
|
971
|
+
Target: OOXML_REL_TARGETS.workbookSharedStrings
|
|
972
|
+
});
|
|
973
|
+
}
|
|
974
|
+
(model.pivotTables || []).forEach((pivotTable) => {
|
|
975
|
+
pivotTable.rId = `rId${count++}`;
|
|
976
|
+
relationships.push({
|
|
977
|
+
Id: pivotTable.rId,
|
|
978
|
+
Type: XLSX.RelType.PivotCacheDefinition,
|
|
979
|
+
Target: pivotCacheDefinitionRelTargetFromWorkbook(pivotTable.tableNumber)
|
|
980
|
+
});
|
|
981
|
+
});
|
|
982
|
+
model.worksheets.forEach((worksheet, index) => {
|
|
983
|
+
worksheet.rId = `rId${count++}`;
|
|
984
|
+
worksheet.fileIndex = index + 1;
|
|
985
|
+
relationships.push({
|
|
986
|
+
Id: worksheet.rId,
|
|
987
|
+
Type: XLSX.RelType.Worksheet,
|
|
988
|
+
Target: `worksheets/sheet${worksheet.fileIndex}.xml`
|
|
989
|
+
});
|
|
990
|
+
});
|
|
991
|
+
const xform = new RelationshipsXform();
|
|
992
|
+
const xml = xform.toXml(relationships);
|
|
993
|
+
zip.append(xml, { name: OOXML_PATHS.xlWorkbookRels });
|
|
994
|
+
}
|
|
995
|
+
async addSharedStrings(zip, model) {
|
|
996
|
+
if (model.sharedStrings && model.sharedStrings.count) {
|
|
997
|
+
zip.append(model.sharedStrings.xml, { name: OOXML_PATHS.xlSharedStrings });
|
|
998
|
+
}
|
|
999
|
+
}
|
|
1000
|
+
async addStyles(zip, model) {
|
|
1001
|
+
const { xml } = model.styles;
|
|
1002
|
+
if (xml) {
|
|
1003
|
+
zip.append(xml, { name: OOXML_PATHS.xlStyles });
|
|
1004
|
+
}
|
|
1005
|
+
}
|
|
1006
|
+
async addWorkbook(zip, model) {
|
|
1007
|
+
const xform = new WorkbookXform();
|
|
1008
|
+
zip.append(xform.toXml(model), { name: OOXML_PATHS.xlWorkbook });
|
|
1009
|
+
}
|
|
1010
|
+
async addWorksheets(zip, model) {
|
|
1011
|
+
const worksheetXform = new WorkSheetXform();
|
|
1012
|
+
const relationshipsXform = new RelationshipsXform();
|
|
1013
|
+
const commentsXform = new CommentsXform();
|
|
1014
|
+
const vmlNotesXform = new VmlNotesXform();
|
|
1015
|
+
model.worksheets.forEach((worksheet, index) => {
|
|
1016
|
+
const fileIndex = worksheet.fileIndex || index + 1;
|
|
1017
|
+
let xmlStream = new XmlStream();
|
|
1018
|
+
worksheetXform.render(xmlStream, worksheet);
|
|
1019
|
+
zip.append(xmlStream.xml, { name: worksheetPath(fileIndex) });
|
|
1020
|
+
if (worksheet.rels && worksheet.rels.length) {
|
|
1021
|
+
xmlStream = new XmlStream();
|
|
1022
|
+
relationshipsXform.render(xmlStream, worksheet.rels);
|
|
1023
|
+
zip.append(xmlStream.xml, { name: worksheetRelsPath(fileIndex) });
|
|
1024
|
+
}
|
|
1025
|
+
if (worksheet.comments.length > 0) {
|
|
1026
|
+
xmlStream = new XmlStream();
|
|
1027
|
+
commentsXform.render(xmlStream, worksheet);
|
|
1028
|
+
zip.append(xmlStream.xml, { name: commentsPath(fileIndex) });
|
|
1029
|
+
xmlStream = new XmlStream();
|
|
1030
|
+
vmlNotesXform.render(xmlStream, worksheet);
|
|
1031
|
+
zip.append(xmlStream.xml, { name: vmlDrawingPath(fileIndex) });
|
|
1032
|
+
}
|
|
1033
|
+
});
|
|
1034
|
+
}
|
|
1035
|
+
addDrawings(zip, model) {
|
|
1036
|
+
const drawingXform = new DrawingXform();
|
|
1037
|
+
const relsXform = new RelationshipsXform();
|
|
1038
|
+
model.worksheets.forEach((worksheet) => {
|
|
1039
|
+
const { drawing } = worksheet;
|
|
1040
|
+
if (drawing) {
|
|
1041
|
+
drawingXform.prepare(drawing);
|
|
1042
|
+
let xml = drawingXform.toXml(drawing);
|
|
1043
|
+
zip.append(xml, { name: drawingPath(drawing.name) });
|
|
1044
|
+
xml = relsXform.toXml(drawing.rels);
|
|
1045
|
+
zip.append(xml, { name: drawingRelsPath(drawing.name) });
|
|
1046
|
+
}
|
|
1047
|
+
});
|
|
1048
|
+
}
|
|
1049
|
+
addTables(zip, model) {
|
|
1050
|
+
const tableXform = new TableXform();
|
|
1051
|
+
model.worksheets.forEach((worksheet) => {
|
|
1052
|
+
const { tables } = worksheet;
|
|
1053
|
+
tables.forEach((table) => {
|
|
1054
|
+
tableXform.prepare(table, {});
|
|
1055
|
+
const tableXml = tableXform.toXml(table);
|
|
1056
|
+
zip.append(tableXml, { name: tablePath(table.target) });
|
|
1057
|
+
});
|
|
1058
|
+
});
|
|
1059
|
+
}
|
|
1060
|
+
addPivotTables(zip, model) {
|
|
1061
|
+
if (!model.pivotTables.length) {
|
|
1062
|
+
return;
|
|
1063
|
+
}
|
|
1064
|
+
const pivotCacheRecordsXform = new PivotCacheRecordsXform();
|
|
1065
|
+
const pivotCacheDefinitionXform = new PivotCacheDefinitionXform();
|
|
1066
|
+
const pivotTableXform = new PivotTableXform();
|
|
1067
|
+
const relsXform = new RelationshipsXform();
|
|
1068
|
+
model.pivotTables.forEach((pivotTable) => {
|
|
1069
|
+
const n = pivotTable.tableNumber;
|
|
1070
|
+
const isLoaded = pivotTable.isLoaded;
|
|
1071
|
+
if (isLoaded) {
|
|
1072
|
+
if (pivotTable.cacheDefinition) {
|
|
1073
|
+
const xml = pivotCacheDefinitionXform.toXml(pivotTable.cacheDefinition);
|
|
1074
|
+
zip.append(xml, { name: pivotCacheDefinitionPath(n) });
|
|
1075
|
+
}
|
|
1076
|
+
if (pivotTable.cacheRecords) {
|
|
1077
|
+
const xml = pivotCacheRecordsXform.toXml(pivotTable.cacheRecords);
|
|
1078
|
+
zip.append(xml, { name: pivotCacheRecordsPath(n) });
|
|
1079
|
+
}
|
|
1080
|
+
}
|
|
1081
|
+
else {
|
|
1082
|
+
let xml = pivotCacheRecordsXform.toXml(pivotTable);
|
|
1083
|
+
zip.append(xml, { name: pivotCacheRecordsPath(n) });
|
|
1084
|
+
xml = pivotCacheDefinitionXform.toXml(pivotTable);
|
|
1085
|
+
zip.append(xml, { name: pivotCacheDefinitionPath(n) });
|
|
1086
|
+
}
|
|
1087
|
+
let xml = relsXform.toXml([
|
|
1088
|
+
{
|
|
1089
|
+
Id: "rId1",
|
|
1090
|
+
Type: XLSX.RelType.PivotCacheRecords,
|
|
1091
|
+
Target: pivotCacheRecordsRelTarget(n)
|
|
1092
|
+
}
|
|
1093
|
+
]);
|
|
1094
|
+
zip.append(xml, { name: pivotCacheDefinitionRelsPath(n) });
|
|
1095
|
+
xml = pivotTableXform.toXml(pivotTable);
|
|
1096
|
+
zip.append(xml, { name: pivotTablePath(n) });
|
|
1097
|
+
xml = relsXform.toXml([
|
|
1098
|
+
{
|
|
1099
|
+
Id: "rId1",
|
|
1100
|
+
Type: XLSX.RelType.PivotCacheDefinition,
|
|
1101
|
+
Target: pivotCacheDefinitionRelTargetFromPivotTable(n)
|
|
1102
|
+
}
|
|
1103
|
+
]);
|
|
1104
|
+
zip.append(xml, { name: pivotTableRelsPath(n) });
|
|
1105
|
+
});
|
|
1106
|
+
}
|
|
1107
|
+
_finalize(zip) {
|
|
1108
|
+
return new Promise((resolve, reject) => {
|
|
1109
|
+
zip.on("finish", () => {
|
|
1110
|
+
resolve(this);
|
|
1111
|
+
});
|
|
1112
|
+
zip.on("error", reject);
|
|
1113
|
+
zip.finalize();
|
|
1114
|
+
});
|
|
1115
|
+
}
|
|
1116
|
+
prepareModel(model, options) {
|
|
1117
|
+
model.creator = model.creator || "ExcelTS";
|
|
1118
|
+
model.lastModifiedBy = model.lastModifiedBy || "ExcelTS";
|
|
1119
|
+
model.created = model.created || new Date();
|
|
1120
|
+
model.modified = model.modified || new Date();
|
|
1121
|
+
model.useSharedStrings =
|
|
1122
|
+
options.useSharedStrings !== undefined ? options.useSharedStrings : true;
|
|
1123
|
+
model.useStyles = options.useStyles !== undefined ? options.useStyles : true;
|
|
1124
|
+
model.sharedStrings = new SharedStringsXform();
|
|
1125
|
+
model.styles = model.useStyles ? new StylesXform(true) : new StylesXform.Mock();
|
|
1126
|
+
const workbookXform = new WorkbookXform();
|
|
1127
|
+
const worksheetXform = new WorkSheetXform();
|
|
1128
|
+
workbookXform.prepare(model);
|
|
1129
|
+
const worksheetOptions = {
|
|
1130
|
+
sharedStrings: model.sharedStrings,
|
|
1131
|
+
styles: model.styles,
|
|
1132
|
+
date1904: model.properties.date1904,
|
|
1133
|
+
drawingsCount: 0,
|
|
1134
|
+
media: model.media
|
|
1135
|
+
};
|
|
1136
|
+
worksheetOptions.drawings = model.drawings = [];
|
|
1137
|
+
worksheetOptions.commentRefs = model.commentRefs = [];
|
|
1138
|
+
let tableCount = 0;
|
|
1139
|
+
model.tables = [];
|
|
1140
|
+
model.worksheets.forEach((worksheet) => {
|
|
1141
|
+
worksheet.tables.forEach((table) => {
|
|
1142
|
+
tableCount++;
|
|
1143
|
+
table.target = `table${tableCount}.xml`;
|
|
1144
|
+
table.id = tableCount;
|
|
1145
|
+
model.tables.push(table);
|
|
1146
|
+
});
|
|
1147
|
+
worksheetXform.prepare(worksheet, worksheetOptions);
|
|
1148
|
+
});
|
|
1149
|
+
}
|
|
1150
|
+
}
|
|
1151
|
+
XLSX.RelType = RelType;
|
|
1152
|
+
export { XLSX };
|