@lyit/exceljs 4.4.1
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/LICENSE +22 -0
- package/README.md +3398 -0
- package/README_zh.md +2878 -0
- package/dist/LICENSE +22 -0
- package/dist/es5/csv/csv.js +182 -0
- package/dist/es5/csv/csv.js.map +1 -0
- package/dist/es5/csv/line-buffer.js +68 -0
- package/dist/es5/csv/line-buffer.js.map +1 -0
- package/dist/es5/csv/stream-converter.js +110 -0
- package/dist/es5/csv/stream-converter.js.map +1 -0
- package/dist/es5/doc/anchor.js +73 -0
- package/dist/es5/doc/anchor.js.map +1 -0
- package/dist/es5/doc/cell.js +960 -0
- package/dist/es5/doc/cell.js.map +1 -0
- package/dist/es5/doc/column.js +274 -0
- package/dist/es5/doc/column.js.map +1 -0
- package/dist/es5/doc/data-validations.js +18 -0
- package/dist/es5/doc/data-validations.js.map +1 -0
- package/dist/es5/doc/defined-names.js +173 -0
- package/dist/es5/doc/defined-names.js.map +1 -0
- package/dist/es5/doc/enums.js +49 -0
- package/dist/es5/doc/enums.js.map +1 -0
- package/dist/es5/doc/form-checkbox.js +342 -0
- package/dist/es5/doc/form-checkbox.js.map +1 -0
- package/dist/es5/doc/image.js +69 -0
- package/dist/es5/doc/image.js.map +1 -0
- package/dist/es5/doc/modelcontainer.js +16 -0
- package/dist/es5/doc/modelcontainer.js.map +1 -0
- package/dist/es5/doc/note.js +64 -0
- package/dist/es5/doc/note.js.map +1 -0
- package/dist/es5/doc/pivot-table.js +247 -0
- package/dist/es5/doc/pivot-table.js.map +1 -0
- package/dist/es5/doc/range.js +229 -0
- package/dist/es5/doc/range.js.map +1 -0
- package/dist/es5/doc/row.js +391 -0
- package/dist/es5/doc/row.js.map +1 -0
- package/dist/es5/doc/table.js +542 -0
- package/dist/es5/doc/table.js.map +1 -0
- package/dist/es5/doc/workbook.js +221 -0
- package/dist/es5/doc/workbook.js.map +1 -0
- package/dist/es5/doc/worksheet.js +996 -0
- package/dist/es5/doc/worksheet.js.map +1 -0
- package/dist/es5/exceljs.bare.js +14 -0
- package/dist/es5/exceljs.bare.js.map +1 -0
- package/dist/es5/exceljs.browser.js +36 -0
- package/dist/es5/exceljs.browser.js.map +1 -0
- package/dist/es5/exceljs.nodejs.js +15 -0
- package/dist/es5/exceljs.nodejs.js.map +1 -0
- package/dist/es5/index.js +15 -0
- package/dist/es5/stream/xlsx/hyperlink-reader.js +90 -0
- package/dist/es5/stream/xlsx/hyperlink-reader.js.map +1 -0
- package/dist/es5/stream/xlsx/sheet-comments-writer.js +94 -0
- package/dist/es5/stream/xlsx/sheet-comments-writer.js.map +1 -0
- package/dist/es5/stream/xlsx/sheet-rels-writer.js +94 -0
- package/dist/es5/stream/xlsx/sheet-rels-writer.js.map +1 -0
- package/dist/es5/stream/xlsx/workbook-reader.js +361 -0
- package/dist/es5/stream/xlsx/workbook-reader.js.map +1 -0
- package/dist/es5/stream/xlsx/workbook-writer.js +347 -0
- package/dist/es5/stream/xlsx/workbook-writer.js.map +1 -0
- package/dist/es5/stream/xlsx/worksheet-reader.js +392 -0
- package/dist/es5/stream/xlsx/worksheet-reader.js.map +1 -0
- package/dist/es5/stream/xlsx/worksheet-writer.js +652 -0
- package/dist/es5/stream/xlsx/worksheet-writer.js.map +1 -0
- package/dist/es5/utils/auto-drain.js +18 -0
- package/dist/es5/utils/auto-drain.js.map +1 -0
- package/dist/es5/utils/browser-buffer-decode.js +15 -0
- package/dist/es5/utils/browser-buffer-decode.js.map +1 -0
- package/dist/es5/utils/browser-buffer-encode.js +18 -0
- package/dist/es5/utils/browser-buffer-encode.js.map +1 -0
- package/dist/es5/utils/cell-matrix.js +149 -0
- package/dist/es5/utils/cell-matrix.js.map +1 -0
- package/dist/es5/utils/col-cache.js +258 -0
- package/dist/es5/utils/col-cache.js.map +1 -0
- package/dist/es5/utils/copy-style.js +43 -0
- package/dist/es5/utils/copy-style.js.map +1 -0
- package/dist/es5/utils/encryptor.js +58 -0
- package/dist/es5/utils/encryptor.js.map +1 -0
- package/dist/es5/utils/iterate-stream.js +46 -0
- package/dist/es5/utils/iterate-stream.js.map +1 -0
- package/dist/es5/utils/parse-sax.js +66 -0
- package/dist/es5/utils/parse-sax.js.map +1 -0
- package/dist/es5/utils/shared-formula.js +42 -0
- package/dist/es5/utils/shared-formula.js.map +1 -0
- package/dist/es5/utils/shared-strings.js +37 -0
- package/dist/es5/utils/shared-strings.js.map +1 -0
- package/dist/es5/utils/stream-base64.js +66 -0
- package/dist/es5/utils/stream-base64.js.map +1 -0
- package/dist/es5/utils/stream-buf.js +365 -0
- package/dist/es5/utils/stream-buf.js.map +1 -0
- package/dist/es5/utils/string-buf.js +73 -0
- package/dist/es5/utils/string-buf.js.map +1 -0
- package/dist/es5/utils/string-builder.js +32 -0
- package/dist/es5/utils/string-builder.js.map +1 -0
- package/dist/es5/utils/stuttered-pipe.js +61 -0
- package/dist/es5/utils/stuttered-pipe.js.map +1 -0
- package/dist/es5/utils/typed-stack.js +23 -0
- package/dist/es5/utils/typed-stack.js.map +1 -0
- package/dist/es5/utils/under-dash.js +168 -0
- package/dist/es5/utils/under-dash.js.map +1 -0
- package/dist/es5/utils/utils.js +205 -0
- package/dist/es5/utils/utils.js.map +1 -0
- package/dist/es5/utils/xml-stream.js +151 -0
- package/dist/es5/utils/xml-stream.js.map +1 -0
- package/dist/es5/utils/zip-stream.js +79 -0
- package/dist/es5/utils/zip-stream.js.map +1 -0
- package/dist/es5/xlsx/defaultnumformats.js +230 -0
- package/dist/es5/xlsx/defaultnumformats.js.map +1 -0
- package/dist/es5/xlsx/rel-type.js +22 -0
- package/dist/es5/xlsx/rel-type.js.map +1 -0
- package/dist/es5/xlsx/xform/base-xform.js +139 -0
- package/dist/es5/xlsx/xform/base-xform.js.map +1 -0
- package/dist/es5/xlsx/xform/book/defined-name-xform.js +85 -0
- package/dist/es5/xlsx/xform/book/defined-name-xform.js.map +1 -0
- package/dist/es5/xlsx/xform/book/sheet-xform.js +32 -0
- package/dist/es5/xlsx/xform/book/sheet-xform.js.map +1 -0
- package/dist/es5/xlsx/xform/book/workbook-calc-properties-xform.js +24 -0
- package/dist/es5/xlsx/xform/book/workbook-calc-properties-xform.js.map +1 -0
- package/dist/es5/xlsx/xform/book/workbook-pivot-cache-xform.js +27 -0
- package/dist/es5/xlsx/xform/book/workbook-pivot-cache-xform.js.map +1 -0
- package/dist/es5/xlsx/xform/book/workbook-properties-xform.js +27 -0
- package/dist/es5/xlsx/xform/book/workbook-properties-xform.js.map +1 -0
- package/dist/es5/xlsx/xform/book/workbook-view-xform.js +51 -0
- package/dist/es5/xlsx/xform/book/workbook-view-xform.js.map +1 -0
- package/dist/es5/xlsx/xform/book/workbook-xform.js +244 -0
- package/dist/es5/xlsx/xform/book/workbook-xform.js.map +1 -0
- package/dist/es5/xlsx/xform/comment/comment-xform.js +103 -0
- package/dist/es5/xlsx/xform/comment/comment-xform.js.map +1 -0
- package/dist/es5/xlsx/xform/comment/comments-xform.js +76 -0
- package/dist/es5/xlsx/xform/comment/comments-xform.js.map +1 -0
- package/dist/es5/xlsx/xform/comment/style/vml-position-xform.js +35 -0
- package/dist/es5/xlsx/xform/comment/style/vml-position-xform.js.map +1 -0
- package/dist/es5/xlsx/xform/comment/style/vml-protection-xform.js +32 -0
- package/dist/es5/xlsx/xform/comment/style/vml-protection-xform.js.map +1 -0
- package/dist/es5/xlsx/xform/comment/vml-anchor-xform.js +53 -0
- package/dist/es5/xlsx/xform/comment/vml-anchor-xform.js.map +1 -0
- package/dist/es5/xlsx/xform/comment/vml-client-data-xform.js +98 -0
- package/dist/es5/xlsx/xform/comment/vml-client-data-xform.js.map +1 -0
- package/dist/es5/xlsx/xform/comment/vml-notes-xform.js +235 -0
- package/dist/es5/xlsx/xform/comment/vml-notes-xform.js.map +1 -0
- package/dist/es5/xlsx/xform/comment/vml-shape-xform.js +93 -0
- package/dist/es5/xlsx/xform/comment/vml-shape-xform.js.map +1 -0
- package/dist/es5/xlsx/xform/comment/vml-textbox-xform.js +61 -0
- package/dist/es5/xlsx/xform/comment/vml-textbox-xform.js.map +1 -0
- package/dist/es5/xlsx/xform/composite-xform.js +51 -0
- package/dist/es5/xlsx/xform/composite-xform.js.map +1 -0
- package/dist/es5/xlsx/xform/core/app-heading-pairs-xform.js +30 -0
- package/dist/es5/xlsx/xform/core/app-heading-pairs-xform.js.map +1 -0
- package/dist/es5/xlsx/xform/core/app-titles-of-parts-xform.js +27 -0
- package/dist/es5/xlsx/xform/core/app-titles-of-parts-xform.js.map +1 -0
- package/dist/es5/xlsx/xform/core/app-xform.js +93 -0
- package/dist/es5/xlsx/xform/core/app-xform.js.map +1 -0
- package/dist/es5/xlsx/xform/core/content-types-xform.js +198 -0
- package/dist/es5/xlsx/xform/core/content-types-xform.js.map +1 -0
- package/dist/es5/xlsx/xform/core/core-xform.js +160 -0
- package/dist/es5/xlsx/xform/core/core-xform.js.map +1 -0
- package/dist/es5/xlsx/xform/core/relationship-xform.js +23 -0
- package/dist/es5/xlsx/xform/core/relationship-xform.js.map +1 -0
- package/dist/es5/xlsx/xform/core/relationships-xform.js +65 -0
- package/dist/es5/xlsx/xform/core/relationships-xform.js.map +1 -0
- package/dist/es5/xlsx/xform/drawing/base-cell-anchor-xform.js +47 -0
- package/dist/es5/xlsx/xform/drawing/base-cell-anchor-xform.js.map +1 -0
- package/dist/es5/xlsx/xform/drawing/blip-fill-xform.js +61 -0
- package/dist/es5/xlsx/xform/drawing/blip-fill-xform.js.map +1 -0
- package/dist/es5/xlsx/xform/drawing/blip-xform.js +39 -0
- package/dist/es5/xlsx/xform/drawing/blip-xform.js.map +1 -0
- package/dist/es5/xlsx/xform/drawing/c-nv-pic-pr-xform.js +35 -0
- package/dist/es5/xlsx/xform/drawing/c-nv-pic-pr-xform.js.map +1 -0
- package/dist/es5/xlsx/xform/drawing/c-nv-pr-xform.js +62 -0
- package/dist/es5/xlsx/xform/drawing/c-nv-pr-xform.js.map +1 -0
- package/dist/es5/xlsx/xform/drawing/cell-position-xform.js +82 -0
- package/dist/es5/xlsx/xform/drawing/cell-position-xform.js.map +1 -0
- package/dist/es5/xlsx/xform/drawing/ctrl-prop-xform.js +75 -0
- package/dist/es5/xlsx/xform/drawing/ctrl-prop-xform.js.map +1 -0
- package/dist/es5/xlsx/xform/drawing/drawing-xform.js +98 -0
- package/dist/es5/xlsx/xform/drawing/drawing-xform.js.map +1 -0
- package/dist/es5/xlsx/xform/drawing/ext-lst-xform.js +40 -0
- package/dist/es5/xlsx/xform/drawing/ext-lst-xform.js.map +1 -0
- package/dist/es5/xlsx/xform/drawing/ext-xform.js +38 -0
- package/dist/es5/xlsx/xform/drawing/ext-xform.js.map +1 -0
- package/dist/es5/xlsx/xform/drawing/hlink-click-xform.js +38 -0
- package/dist/es5/xlsx/xform/drawing/hlink-click-xform.js.map +1 -0
- package/dist/es5/xlsx/xform/drawing/nv-pic-pr-xform.js +59 -0
- package/dist/es5/xlsx/xform/drawing/nv-pic-pr-xform.js.map +1 -0
- package/dist/es5/xlsx/xform/drawing/one-cell-anchor-xform.js +63 -0
- package/dist/es5/xlsx/xform/drawing/one-cell-anchor-xform.js.map +1 -0
- package/dist/es5/xlsx/xform/drawing/pic-xform.js +67 -0
- package/dist/es5/xlsx/xform/drawing/pic-xform.js.map +1 -0
- package/dist/es5/xlsx/xform/drawing/sp-pr.js +30 -0
- package/dist/es5/xlsx/xform/drawing/sp-pr.js.map +1 -0
- package/dist/es5/xlsx/xform/drawing/two-cell-anchor-xform.js +62 -0
- package/dist/es5/xlsx/xform/drawing/two-cell-anchor-xform.js.map +1 -0
- package/dist/es5/xlsx/xform/list-xform.js +91 -0
- package/dist/es5/xlsx/xform/list-xform.js.map +1 -0
- package/dist/es5/xlsx/xform/pivot-table/cache-field.js +72 -0
- package/dist/es5/xlsx/xform/pivot-table/cache-field.js.map +1 -0
- package/dist/es5/xlsx/xform/pivot-table/pivot-cache-definition-xform.js +74 -0
- package/dist/es5/xlsx/xform/pivot-table/pivot-cache-definition-xform.js.map +1 -0
- package/dist/es5/xlsx/xform/pivot-table/pivot-cache-records-xform.js +100 -0
- package/dist/es5/xlsx/xform/pivot-table/pivot-cache-records-xform.js.map +1 -0
- package/dist/es5/xlsx/xform/pivot-table/pivot-table-xform.js +229 -0
- package/dist/es5/xlsx/xform/pivot-table/pivot-table-xform.js.map +1 -0
- package/dist/es5/xlsx/xform/sheet/auto-filter-xform.js +40 -0
- package/dist/es5/xlsx/xform/sheet/auto-filter-xform.js.map +1 -0
- package/dist/es5/xlsx/xform/sheet/cell-xform.js +450 -0
- package/dist/es5/xlsx/xform/sheet/cell-xform.js.map +1 -0
- package/dist/es5/xlsx/xform/sheet/cf/cf-rule-xform.js +282 -0
- package/dist/es5/xlsx/xform/sheet/cf/cf-rule-xform.js.map +1 -0
- package/dist/es5/xlsx/xform/sheet/cf/cfvo-xform.js +25 -0
- package/dist/es5/xlsx/xform/sheet/cf/cfvo-xform.js.map +1 -0
- package/dist/es5/xlsx/xform/sheet/cf/color-scale-xform.js +38 -0
- package/dist/es5/xlsx/xform/sheet/cf/color-scale-xform.js.map +1 -0
- package/dist/es5/xlsx/xform/sheet/cf/conditional-formatting-xform.js +45 -0
- package/dist/es5/xlsx/xform/sheet/cf/conditional-formatting-xform.js.map +1 -0
- package/dist/es5/xlsx/xform/sheet/cf/conditional-formattings-xform.js +77 -0
- package/dist/es5/xlsx/xform/sheet/cf/conditional-formattings-xform.js.map +1 -0
- package/dist/es5/xlsx/xform/sheet/cf/databar-xform.js +54 -0
- package/dist/es5/xlsx/xform/sheet/cf/databar-xform.js.map +1 -0
- package/dist/es5/xlsx/xform/sheet/cf/ext-lst-ref-xform.js +71 -0
- package/dist/es5/xlsx/xform/sheet/cf/ext-lst-ref-xform.js.map +1 -0
- package/dist/es5/xlsx/xform/sheet/cf/formula-xform.js +22 -0
- package/dist/es5/xlsx/xform/sheet/cf/formula-xform.js.map +1 -0
- package/dist/es5/xlsx/xform/sheet/cf/icon-set-xform.js +43 -0
- package/dist/es5/xlsx/xform/sheet/cf/icon-set-xform.js.map +1 -0
- package/dist/es5/xlsx/xform/sheet/cf-ext/cf-icon-ext-xform.js +28 -0
- package/dist/es5/xlsx/xform/sheet/cf-ext/cf-icon-ext-xform.js.map +1 -0
- package/dist/es5/xlsx/xform/sheet/cf-ext/cf-rule-ext-xform.js +88 -0
- package/dist/es5/xlsx/xform/sheet/cf-ext/cf-rule-ext-xform.js.map +1 -0
- package/dist/es5/xlsx/xform/sheet/cf-ext/cfvo-ext-xform.js +38 -0
- package/dist/es5/xlsx/xform/sheet/cf-ext/cfvo-ext-xform.js.map +1 -0
- package/dist/es5/xlsx/xform/sheet/cf-ext/conditional-formatting-ext-xform.js +52 -0
- package/dist/es5/xlsx/xform/sheet/cf-ext/conditional-formatting-ext-xform.js.map +1 -0
- package/dist/es5/xlsx/xform/sheet/cf-ext/conditional-formattings-ext-xform.js +43 -0
- package/dist/es5/xlsx/xform/sheet/cf-ext/conditional-formattings-ext-xform.js.map +1 -0
- package/dist/es5/xlsx/xform/sheet/cf-ext/databar-ext-xform.js +82 -0
- package/dist/es5/xlsx/xform/sheet/cf-ext/databar-ext-xform.js.map +1 -0
- package/dist/es5/xlsx/xform/sheet/cf-ext/f-ext-xform.js +22 -0
- package/dist/es5/xlsx/xform/sheet/cf-ext/f-ext-xform.js.map +1 -0
- package/dist/es5/xlsx/xform/sheet/cf-ext/icon-set-ext-xform.js +66 -0
- package/dist/es5/xlsx/xform/sheet/cf-ext/icon-set-ext-xform.js.map +1 -0
- package/dist/es5/xlsx/xform/sheet/cf-ext/sqref-ext-xform.js +22 -0
- package/dist/es5/xlsx/xform/sheet/cf-ext/sqref-ext-xform.js.map +1 -0
- package/dist/es5/xlsx/xform/sheet/col-xform.js +78 -0
- package/dist/es5/xlsx/xform/sheet/col-xform.js.map +1 -0
- package/dist/es5/xlsx/xform/sheet/data-validations-xform.js +247 -0
- package/dist/es5/xlsx/xform/sheet/data-validations-xform.js.map +1 -0
- package/dist/es5/xlsx/xform/sheet/dimension-xform.js +28 -0
- package/dist/es5/xlsx/xform/sheet/dimension-xform.js.map +1 -0
- package/dist/es5/xlsx/xform/sheet/drawing-xform.js +32 -0
- package/dist/es5/xlsx/xform/sheet/drawing-xform.js.map +1 -0
- package/dist/es5/xlsx/xform/sheet/ext-lst-xform.js +69 -0
- package/dist/es5/xlsx/xform/sheet/ext-lst-xform.js.map +1 -0
- package/dist/es5/xlsx/xform/sheet/header-footer-xform.js +126 -0
- package/dist/es5/xlsx/xform/sheet/header-footer-xform.js.map +1 -0
- package/dist/es5/xlsx/xform/sheet/hyperlink-xform.js +50 -0
- package/dist/es5/xlsx/xform/sheet/hyperlink-xform.js.map +1 -0
- package/dist/es5/xlsx/xform/sheet/merge-cell-xform.js +26 -0
- package/dist/es5/xlsx/xform/sheet/merge-cell-xform.js.map +1 -0
- package/dist/es5/xlsx/xform/sheet/merges.js +52 -0
- package/dist/es5/xlsx/xform/sheet/merges.js.map +1 -0
- package/dist/es5/xlsx/xform/sheet/outline-properties-xform.js +35 -0
- package/dist/es5/xlsx/xform/sheet/outline-properties-xform.js.map +1 -0
- package/dist/es5/xlsx/xform/sheet/page-breaks-xform.js +24 -0
- package/dist/es5/xlsx/xform/sheet/page-breaks-xform.js.map +1 -0
- package/dist/es5/xlsx/xform/sheet/page-margins-xform.js +46 -0
- package/dist/es5/xlsx/xform/sheet/page-margins-xform.js.map +1 -0
- package/dist/es5/xlsx/xform/sheet/page-setup-properties-xform.js +32 -0
- package/dist/es5/xlsx/xform/sheet/page-setup-properties-xform.js.map +1 -0
- package/dist/es5/xlsx/xform/sheet/page-setup-xform.js +99 -0
- package/dist/es5/xlsx/xform/sheet/page-setup-xform.js.map +1 -0
- package/dist/es5/xlsx/xform/sheet/picture-xform.js +32 -0
- package/dist/es5/xlsx/xform/sheet/picture-xform.js.map +1 -0
- package/dist/es5/xlsx/xform/sheet/print-options-xform.js +45 -0
- package/dist/es5/xlsx/xform/sheet/print-options-xform.js.map +1 -0
- package/dist/es5/xlsx/xform/sheet/row-breaks-xform.js +37 -0
- package/dist/es5/xlsx/xform/sheet/row-breaks-xform.js.map +1 -0
- package/dist/es5/xlsx/xform/sheet/row-xform.js +131 -0
- package/dist/es5/xlsx/xform/sheet/row-xform.js.map +1 -0
- package/dist/es5/xlsx/xform/sheet/sheet-format-properties-xform.js +63 -0
- package/dist/es5/xlsx/xform/sheet/sheet-format-properties-xform.js.map +1 -0
- package/dist/es5/xlsx/xform/sheet/sheet-properties-xform.js +83 -0
- package/dist/es5/xlsx/xform/sheet/sheet-properties-xform.js.map +1 -0
- package/dist/es5/xlsx/xform/sheet/sheet-protection-xform.js +84 -0
- package/dist/es5/xlsx/xform/sheet/sheet-protection-xform.js.map +1 -0
- package/dist/es5/xlsx/xform/sheet/sheet-view-xform.js +190 -0
- package/dist/es5/xlsx/xform/sheet/sheet-view-xform.js.map +1 -0
- package/dist/es5/xlsx/xform/sheet/table-part-xform.js +32 -0
- package/dist/es5/xlsx/xform/sheet/table-part-xform.js.map +1 -0
- package/dist/es5/xlsx/xform/sheet/worksheet-xform.js +622 -0
- package/dist/es5/xlsx/xform/sheet/worksheet-xform.js.map +1 -0
- package/dist/es5/xlsx/xform/simple/boolean-xform.js +27 -0
- package/dist/es5/xlsx/xform/simple/boolean-xform.js.map +1 -0
- package/dist/es5/xlsx/xform/simple/date-xform.js +58 -0
- package/dist/es5/xlsx/xform/simple/date-xform.js.map +1 -0
- package/dist/es5/xlsx/xform/simple/float-xform.js +47 -0
- package/dist/es5/xlsx/xform/simple/float-xform.js.map +1 -0
- package/dist/es5/xlsx/xform/simple/integer-xform.js +53 -0
- package/dist/es5/xlsx/xform/simple/integer-xform.js.map +1 -0
- package/dist/es5/xlsx/xform/simple/string-xform.js +47 -0
- package/dist/es5/xlsx/xform/simple/string-xform.js.map +1 -0
- package/dist/es5/xlsx/xform/static-xform.js +61 -0
- package/dist/es5/xlsx/xform/static-xform.js.map +1 -0
- package/dist/es5/xlsx/xform/strings/phonetic-text-xform.js +98 -0
- package/dist/es5/xlsx/xform/strings/phonetic-text-xform.js.map +1 -0
- package/dist/es5/xlsx/xform/strings/rich-text-xform.js +92 -0
- package/dist/es5/xlsx/xform/strings/rich-text-xform.js.map +1 -0
- package/dist/es5/xlsx/xform/strings/shared-string-xform.js +99 -0
- package/dist/es5/xlsx/xform/strings/shared-string-xform.js.map +1 -0
- package/dist/es5/xlsx/xform/strings/shared-strings-xform.js +116 -0
- package/dist/es5/xlsx/xform/strings/shared-strings-xform.js.map +1 -0
- package/dist/es5/xlsx/xform/strings/text-xform.js +39 -0
- package/dist/es5/xlsx/xform/strings/text-xform.js.map +1 -0
- package/dist/es5/xlsx/xform/style/alignment-xform.js +139 -0
- package/dist/es5/xlsx/xform/style/alignment-xform.js.map +1 -0
- package/dist/es5/xlsx/xform/style/border-xform.js +185 -0
- package/dist/es5/xlsx/xform/style/border-xform.js.map +1 -0
- package/dist/es5/xlsx/xform/style/color-xform.js +66 -0
- package/dist/es5/xlsx/xform/style/color-xform.js.map +1 -0
- package/dist/es5/xlsx/xform/style/dxf-xform.js +106 -0
- package/dist/es5/xlsx/xform/style/dxf-xform.js.map +1 -0
- package/dist/es5/xlsx/xform/style/fill-xform.js +307 -0
- package/dist/es5/xlsx/xform/style/fill-xform.js.map +1 -0
- package/dist/es5/xlsx/xform/style/font-xform.js +175 -0
- package/dist/es5/xlsx/xform/style/font-xform.js.map +1 -0
- package/dist/es5/xlsx/xform/style/numfmt-xform.js +58 -0
- package/dist/es5/xlsx/xform/style/numfmt-xform.js.map +1 -0
- package/dist/es5/xlsx/xform/style/protection-xform.js +53 -0
- package/dist/es5/xlsx/xform/style/protection-xform.js.map +1 -0
- package/dist/es5/xlsx/xform/style/style-xform.js +118 -0
- package/dist/es5/xlsx/xform/style/style-xform.js.map +1 -0
- package/dist/es5/xlsx/xform/style/styles-xform.js +611 -0
- package/dist/es5/xlsx/xform/style/styles-xform.js.map +1 -0
- package/dist/es5/xlsx/xform/style/underline-xform.js +46 -0
- package/dist/es5/xlsx/xform/style/underline-xform.js.map +1 -0
- package/dist/es5/xlsx/xform/table/auto-filter-xform.js +75 -0
- package/dist/es5/xlsx/xform/table/auto-filter-xform.js.map +1 -0
- package/dist/es5/xlsx/xform/table/custom-filter-xform.js +30 -0
- package/dist/es5/xlsx/xform/table/custom-filter-xform.js.map +1 -0
- package/dist/es5/xlsx/xform/table/filter-column-xform.js +92 -0
- package/dist/es5/xlsx/xform/table/filter-column-xform.js.map +1 -0
- package/dist/es5/xlsx/xform/table/filter-xform.js +28 -0
- package/dist/es5/xlsx/xform/table/filter-xform.js.map +1 -0
- package/dist/es5/xlsx/xform/table/table-column-xform.js +42 -0
- package/dist/es5/xlsx/xform/table/table-column-xform.js.map +1 -0
- package/dist/es5/xlsx/xform/table/table-style-info-xform.js +40 -0
- package/dist/es5/xlsx/xform/table/table-style-info-xform.js.map +1 -0
- package/dist/es5/xlsx/xform/table/table-xform.js +125 -0
- package/dist/es5/xlsx/xform/table/table-xform.js.map +1 -0
- package/dist/es5/xlsx/xlsx.js +1109 -0
- package/dist/es5/xlsx/xlsx.js.map +1 -0
- package/dist/es5/xlsx/xml/theme1.js +5 -0
- package/dist/es5/xlsx/xml/theme1.js.map +1 -0
- package/dist/exceljs.bare.js +65234 -0
- package/dist/exceljs.bare.js.map +889 -0
- package/dist/exceljs.bare.min.js +45 -0
- package/dist/exceljs.bare.min.js.map +1 -0
- package/dist/exceljs.js +69987 -0
- package/dist/exceljs.js.map +1211 -0
- package/dist/exceljs.min.js +45 -0
- package/dist/exceljs.min.js.map +1 -0
- package/excel.js +13 -0
- package/index.d.ts +2041 -0
- package/index.ts +2 -0
- package/lib/csv/csv.js +191 -0
- package/lib/csv/line-buffer.js +74 -0
- package/lib/csv/stream-converter.js +135 -0
- package/lib/doc/anchor.js +91 -0
- package/lib/doc/cell.js +1124 -0
- package/lib/doc/column.js +320 -0
- package/lib/doc/data/theme1.json +234 -0
- package/lib/doc/data-validations.js +19 -0
- package/lib/doc/defined-names.js +196 -0
- package/lib/doc/enums.js +48 -0
- package/lib/doc/form-checkbox.js +336 -0
- package/lib/doc/image.js +59 -0
- package/lib/doc/modelcontainer.js +18 -0
- package/lib/doc/note.js +65 -0
- package/lib/doc/pivot-table.js +239 -0
- package/lib/doc/range.js +257 -0
- package/lib/doc/row.js +424 -0
- package/lib/doc/table.js +559 -0
- package/lib/doc/workbook.js +240 -0
- package/lib/doc/worksheet.js +1041 -0
- package/lib/exceljs.bare.js +13 -0
- package/lib/exceljs.browser.js +36 -0
- package/lib/exceljs.nodejs.js +14 -0
- package/lib/stream/xlsx/hyperlink-reader.js +83 -0
- package/lib/stream/xlsx/sheet-comments-writer.js +121 -0
- package/lib/stream/xlsx/sheet-rels-writer.js +119 -0
- package/lib/stream/xlsx/workbook-reader.js +336 -0
- package/lib/stream/xlsx/workbook-writer.js +347 -0
- package/lib/stream/xlsx/worksheet-reader.js +374 -0
- package/lib/stream/xlsx/worksheet-writer.js +717 -0
- package/lib/utils/auto-drain.js +15 -0
- package/lib/utils/browser-buffer-decode.js +14 -0
- package/lib/utils/browser-buffer-encode.js +15 -0
- package/lib/utils/cell-matrix.js +165 -0
- package/lib/utils/col-cache.js +287 -0
- package/lib/utils/copy-style.js +43 -0
- package/lib/utils/encryptor.js +55 -0
- package/lib/utils/iterate-stream.js +48 -0
- package/lib/utils/parse-sax.js +43 -0
- package/lib/utils/shared-formula.js +44 -0
- package/lib/utils/shared-strings.js +42 -0
- package/lib/utils/stream-base64.js +72 -0
- package/lib/utils/stream-buf.js +387 -0
- package/lib/utils/string-buf.js +82 -0
- package/lib/utils/string-builder.js +35 -0
- package/lib/utils/stuttered-pipe.js +67 -0
- package/lib/utils/typed-stack.js +24 -0
- package/lib/utils/under-dash.js +184 -0
- package/lib/utils/utils.js +206 -0
- package/lib/utils/xml-stream.js +169 -0
- package/lib/utils/zip-stream.js +87 -0
- package/lib/xlsx/.rels +11 -0
- package/lib/xlsx/calcChain.xml +6 -0
- package/lib/xlsx/core.xml +7 -0
- package/lib/xlsx/defaultnumformats.js +153 -0
- package/lib/xlsx/rel-type.js +27 -0
- package/lib/xlsx/styles.xml +41 -0
- package/lib/xlsx/workbook.xml +16 -0
- package/lib/xlsx/xform/base-xform.js +145 -0
- package/lib/xlsx/xform/book/defined-name-xform.js +91 -0
- package/lib/xlsx/xform/book/sheet-xform.js +34 -0
- package/lib/xlsx/xform/book/workbook-calc-properties-xform.js +26 -0
- package/lib/xlsx/xform/book/workbook-pivot-cache-xform.js +29 -0
- package/lib/xlsx/xform/book/workbook-properties-xform.js +29 -0
- package/lib/xlsx/xform/book/workbook-view-xform.js +53 -0
- package/lib/xlsx/xform/book/workbook-xform.js +265 -0
- package/lib/xlsx/xform/comment/comment-xform.js +105 -0
- package/lib/xlsx/xform/comment/comments-xform.js +82 -0
- package/lib/xlsx/xform/comment/style/vml-position-xform.js +39 -0
- package/lib/xlsx/xform/comment/style/vml-protection-xform.js +36 -0
- package/lib/xlsx/xform/comment/vml-anchor-xform.js +60 -0
- package/lib/xlsx/xform/comment/vml-client-data-xform.js +92 -0
- package/lib/xlsx/xform/comment/vml-notes-xform.js +217 -0
- package/lib/xlsx/xform/comment/vml-shape-xform.js +95 -0
- package/lib/xlsx/xform/comment/vml-textbox-xform.js +64 -0
- package/lib/xlsx/xform/composite-xform.js +56 -0
- package/lib/xlsx/xform/core/app-heading-pairs-xform.js +32 -0
- package/lib/xlsx/xform/core/app-titles-of-parts-xform.js +28 -0
- package/lib/xlsx/xform/core/app-xform.js +100 -0
- package/lib/xlsx/xform/core/content-types-xform.js +211 -0
- package/lib/xlsx/xform/core/core-xform.js +142 -0
- package/lib/xlsx/xform/core/relationship-xform.js +25 -0
- package/lib/xlsx/xform/core/relationships-xform.js +73 -0
- package/lib/xlsx/xform/drawing/base-cell-anchor-xform.js +48 -0
- package/lib/xlsx/xform/drawing/blip-fill-xform.js +71 -0
- package/lib/xlsx/xform/drawing/blip-xform.js +42 -0
- package/lib/xlsx/xform/drawing/c-nv-pic-pr-xform.js +38 -0
- package/lib/xlsx/xform/drawing/c-nv-pr-xform.js +68 -0
- package/lib/xlsx/xform/drawing/cell-position-xform.js +77 -0
- package/lib/xlsx/xform/drawing/ctrl-prop-xform.js +74 -0
- package/lib/xlsx/xform/drawing/drawing-xform.js +109 -0
- package/lib/xlsx/xform/drawing/ext-lst-xform.js +43 -0
- package/lib/xlsx/xform/drawing/ext-xform.js +44 -0
- package/lib/xlsx/xform/drawing/hlink-click-xform.js +41 -0
- package/lib/xlsx/xform/drawing/nv-pic-pr-xform.js +65 -0
- package/lib/xlsx/xform/drawing/one-cell-anchor-xform.js +63 -0
- package/lib/xlsx/xform/drawing/pic-xform.js +77 -0
- package/lib/xlsx/xform/drawing/sp-pr.js +17 -0
- package/lib/xlsx/xform/drawing/two-cell-anchor-xform.js +62 -0
- package/lib/xlsx/xform/list-xform.js +95 -0
- package/lib/xlsx/xform/pivot-table/cache-field.js +74 -0
- package/lib/xlsx/xform/pivot-table/pivot-cache-definition-xform.js +77 -0
- package/lib/xlsx/xform/pivot-table/pivot-cache-records-xform.js +107 -0
- package/lib/xlsx/xform/pivot-table/pivot-table-xform.js +265 -0
- package/lib/xlsx/xform/sheet/auto-filter-xform.js +38 -0
- package/lib/xlsx/xform/sheet/cell-xform.js +498 -0
- package/lib/xlsx/xform/sheet/cf/cf-rule-xform.js +308 -0
- package/lib/xlsx/xform/sheet/cf/cfvo-xform.js +27 -0
- package/lib/xlsx/xform/sheet/cf/color-scale-xform.js +45 -0
- package/lib/xlsx/xform/sheet/cf/conditional-formatting-xform.js +48 -0
- package/lib/xlsx/xform/sheet/cf/conditional-formattings-xform.js +92 -0
- package/lib/xlsx/xform/sheet/cf/databar-xform.js +56 -0
- package/lib/xlsx/xform/sheet/cf/ext-lst-ref-xform.js +87 -0
- package/lib/xlsx/xform/sheet/cf/formula-xform.js +25 -0
- package/lib/xlsx/xform/sheet/cf/icon-set-xform.js +47 -0
- package/lib/xlsx/xform/sheet/cf-ext/cf-icon-ext-xform.js +27 -0
- package/lib/xlsx/xform/sheet/cf-ext/cf-rule-ext-xform.js +98 -0
- package/lib/xlsx/xform/sheet/cf-ext/cfvo-ext-xform.js +43 -0
- package/lib/xlsx/xform/sheet/cf-ext/conditional-formatting-ext-xform.js +62 -0
- package/lib/xlsx/xform/sheet/cf-ext/conditional-formattings-ext-xform.js +50 -0
- package/lib/xlsx/xform/sheet/cf-ext/databar-ext-xform.js +102 -0
- package/lib/xlsx/xform/sheet/cf-ext/f-ext-xform.js +25 -0
- package/lib/xlsx/xform/sheet/cf-ext/icon-set-ext-xform.js +73 -0
- package/lib/xlsx/xform/sheet/cf-ext/sqref-ext-xform.js +25 -0
- package/lib/xlsx/xform/sheet/col-xform.js +86 -0
- package/lib/xlsx/xform/sheet/data-validations-xform.js +257 -0
- package/lib/xlsx/xform/sheet/dimension-xform.js +29 -0
- package/lib/xlsx/xform/sheet/drawing-xform.js +33 -0
- package/lib/xlsx/xform/sheet/ext-lst-xform.js +86 -0
- package/lib/xlsx/xform/sheet/header-footer-xform.js +146 -0
- package/lib/xlsx/xform/sheet/hyperlink-xform.js +54 -0
- package/lib/xlsx/xform/sheet/merge-cell-xform.js +27 -0
- package/lib/xlsx/xform/sheet/merges.js +56 -0
- package/lib/xlsx/xform/sheet/outline-properties-xform.js +43 -0
- package/lib/xlsx/xform/sheet/page-breaks-xform.js +27 -0
- package/lib/xlsx/xform/sheet/page-margins-xform.js +49 -0
- package/lib/xlsx/xform/sheet/page-setup-properties-xform.js +35 -0
- package/lib/xlsx/xform/sheet/page-setup-xform.js +103 -0
- package/lib/xlsx/xform/sheet/picture-xform.js +33 -0
- package/lib/xlsx/xform/sheet/print-options-xform.js +49 -0
- package/lib/xlsx/xform/sheet/row-breaks-xform.js +39 -0
- package/lib/xlsx/xform/sheet/row-xform.js +145 -0
- package/lib/xlsx/xform/sheet/sheet-format-properties-xform.js +67 -0
- package/lib/xlsx/xform/sheet/sheet-properties-xform.js +90 -0
- package/lib/xlsx/xform/sheet/sheet-protection-xform.js +89 -0
- package/lib/xlsx/xform/sheet/sheet-view-xform.js +202 -0
- package/lib/xlsx/xform/sheet/table-part-xform.js +33 -0
- package/lib/xlsx/xform/sheet/worksheet-xform.js +657 -0
- package/lib/xlsx/xform/simple/boolean-xform.js +31 -0
- package/lib/xlsx/xform/simple/date-xform.js +66 -0
- package/lib/xlsx/xform/simple/float-xform.js +51 -0
- package/lib/xlsx/xform/simple/integer-xform.js +57 -0
- package/lib/xlsx/xform/simple/string-xform.js +51 -0
- package/lib/xlsx/xform/static-xform.js +64 -0
- package/lib/xlsx/xform/strings/phonetic-text-xform.js +98 -0
- package/lib/xlsx/xform/strings/rich-text-xform.js +101 -0
- package/lib/xlsx/xform/strings/shared-string-xform.js +102 -0
- package/lib/xlsx/xform/strings/shared-strings-xform.js +132 -0
- package/lib/xlsx/xform/strings/text-xform.js +44 -0
- package/lib/xlsx/xform/style/alignment-xform.js +172 -0
- package/lib/xlsx/xform/style/border-xform.js +207 -0
- package/lib/xlsx/xform/style/color-xform.js +63 -0
- package/lib/xlsx/xform/style/dxf-xform.js +111 -0
- package/lib/xlsx/xform/style/fill-xform.js +364 -0
- package/lib/xlsx/xform/style/font-xform.js +102 -0
- package/lib/xlsx/xform/style/numfmt-xform.js +63 -0
- package/lib/xlsx/xform/style/protection-xform.js +60 -0
- package/lib/xlsx/xform/style/style-xform.js +125 -0
- package/lib/xlsx/xform/style/styles-xform.js +527 -0
- package/lib/xlsx/xform/style/underline-xform.js +47 -0
- package/lib/xlsx/xform/table/auto-filter-xform.js +81 -0
- package/lib/xlsx/xform/table/custom-filter-xform.js +33 -0
- package/lib/xlsx/xform/table/filter-column-xform.js +99 -0
- package/lib/xlsx/xform/table/filter-xform.js +31 -0
- package/lib/xlsx/xform/table/table-column-xform.js +44 -0
- package/lib/xlsx/xform/table/table-style-info-xform.js +41 -0
- package/lib/xlsx/xform/table/table-xform.js +134 -0
- package/lib/xlsx/xlsx.js +1160 -0
- package/lib/xlsx/xml/theme1.js +3 -0
- package/lib/xlsx/xml/theme1.xml +318 -0
- package/package.json +159 -0
|
@@ -0,0 +1,247 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
const colCache = require('../utils/col-cache');
|
|
4
|
+
const {
|
|
5
|
+
objectFromProps,
|
|
6
|
+
range,
|
|
7
|
+
toSortedArray
|
|
8
|
+
} = require('../utils/utils');
|
|
9
|
+
|
|
10
|
+
// TK(2023-10-10): turn this into a class constructor.
|
|
11
|
+
|
|
12
|
+
// IMPORTANT: Pivot tables are NOT supported with streaming API (WorkbookWriter)
|
|
13
|
+
//
|
|
14
|
+
// Pivot tables require reading ALL source data to generate the pivot cache,
|
|
15
|
+
// which conflicts with streaming's one-pass write model. Excel requires complete
|
|
16
|
+
// pivot cache data (all unique values and all data rows) at file creation time.
|
|
17
|
+
//
|
|
18
|
+
// For large datasets, use the standard (non-streaming) Workbook API with pivot tables.
|
|
19
|
+
|
|
20
|
+
function makePivotTable(worksheet, model) {
|
|
21
|
+
// Example `model`:
|
|
22
|
+
// {
|
|
23
|
+
// sourceSheet: worksheet1,
|
|
24
|
+
// rows: ['A', 'B'],
|
|
25
|
+
// columns: ['C'],
|
|
26
|
+
// values: ['E'],
|
|
27
|
+
// pages: ['F'], // optional
|
|
28
|
+
// pageDefaults: { F: 'value' }, // optional
|
|
29
|
+
// metric: 'sum', 'count'
|
|
30
|
+
// startRow: 1, // optional: header row number (default: 1)
|
|
31
|
+
// startCell: 'A1', // optional: pivot table location (default: 'A1')
|
|
32
|
+
// valueNumFmt: '#,##0.00', // optional: number format for value field
|
|
33
|
+
// verbose: false, // optional: show progress logs
|
|
34
|
+
// }
|
|
35
|
+
|
|
36
|
+
validate(worksheet, model);
|
|
37
|
+
const {
|
|
38
|
+
sourceSheet
|
|
39
|
+
} = model;
|
|
40
|
+
let {
|
|
41
|
+
rows,
|
|
42
|
+
columns,
|
|
43
|
+
values,
|
|
44
|
+
pages = []
|
|
45
|
+
} = model;
|
|
46
|
+
const {
|
|
47
|
+
metric,
|
|
48
|
+
pageDefaults = {},
|
|
49
|
+
verbose = false
|
|
50
|
+
} = model;
|
|
51
|
+
const startRow = model.startRow || 1;
|
|
52
|
+
|
|
53
|
+
// Generate sharedItems only for categorical fields (rows, columns, pages).
|
|
54
|
+
// Value fields (values) are numeric aggregations and should NOT have sharedItems,
|
|
55
|
+
// as their raw values are written directly as <n> in cache records.
|
|
56
|
+
// This significantly reduces processing time for wide datasets (e.g. 26 cols × 60k rows).
|
|
57
|
+
if (verbose) {
|
|
58
|
+
// eslint-disable-next-line no-console
|
|
59
|
+
console.log('Generating cache fields...');
|
|
60
|
+
}
|
|
61
|
+
const usedFieldNames = [...model.rows, ...model.columns, ...pages];
|
|
62
|
+
const cacheFields = makeCacheFields(sourceSheet, usedFieldNames, startRow, verbose);
|
|
63
|
+
if (verbose) {
|
|
64
|
+
// eslint-disable-next-line no-console
|
|
65
|
+
console.log(` ✓ Generated ${cacheFields.length} cache fields (${usedFieldNames.length} with sharedItems)`);
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
// Calculate the source data range for the pivot cache
|
|
69
|
+
// The range should start from the header row (startRow) to the last row with data
|
|
70
|
+
const dimensions = sourceSheet.dimensions;
|
|
71
|
+
const sourceDataRange = dimensions ? colCache.encode(startRow, dimensions.left, dimensions.bottom, dimensions.right) : null;
|
|
72
|
+
|
|
73
|
+
// let {rows, columns, values, pages} use indices instead of names;
|
|
74
|
+
// names can then be accessed via `pivotTable.cacheFields[index].name`.
|
|
75
|
+
// *Note*: Using `reduce` as `Object.fromEntries` requires Node 12+;
|
|
76
|
+
// ExcelJS is >=8.3.0 (as of 2023-10-08).
|
|
77
|
+
const nameToIndex = cacheFields.reduce((result, cacheField, index) => {
|
|
78
|
+
result[cacheField.name] = index;
|
|
79
|
+
return result;
|
|
80
|
+
}, {});
|
|
81
|
+
rows = rows.map(row => nameToIndex[row]);
|
|
82
|
+
columns = columns.map(column => nameToIndex[column]);
|
|
83
|
+
values = values.map(value => nameToIndex[value]);
|
|
84
|
+
pages = pages.map(page => nameToIndex[page]);
|
|
85
|
+
|
|
86
|
+
// Generate unique cache ID based on the number of existing pivot tables
|
|
87
|
+
// Each pivot table gets its own cache ID (starting from 10)
|
|
88
|
+
const cacheId = String(10 + worksheet.workbook.pivotTables.length);
|
|
89
|
+
|
|
90
|
+
// Convert pageDefaults from field names to indices with item indices
|
|
91
|
+
const pageDefaultsIndices = {};
|
|
92
|
+
for (const [fieldName, defaultValue] of Object.entries(pageDefaults)) {
|
|
93
|
+
const fieldIndex = nameToIndex[fieldName];
|
|
94
|
+
if (fieldIndex !== undefined) {
|
|
95
|
+
const cacheField = cacheFields[fieldIndex];
|
|
96
|
+
if (cacheField.sharedItems) {
|
|
97
|
+
// Find the item index for the default value
|
|
98
|
+
const itemIndex = cacheField.sharedItems.findIndex(item => item === defaultValue);
|
|
99
|
+
if (itemIndex >= 0) {
|
|
100
|
+
pageDefaultsIndices[fieldIndex] = itemIndex;
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
// form pivot table object
|
|
107
|
+
return {
|
|
108
|
+
sourceSheet,
|
|
109
|
+
rows,
|
|
110
|
+
columns,
|
|
111
|
+
values,
|
|
112
|
+
pages,
|
|
113
|
+
pageDefaults: pageDefaultsIndices,
|
|
114
|
+
metric,
|
|
115
|
+
cacheFields,
|
|
116
|
+
// defined in <pivotTableDefinition> of xl/pivotTables/pivotTableN.xml;
|
|
117
|
+
// also used in xl/workbook.xml
|
|
118
|
+
cacheId,
|
|
119
|
+
// Control whether pivot table style overrides worksheet column widths
|
|
120
|
+
// '0' = preserve worksheet column widths (useful for custom sizing)
|
|
121
|
+
// '1' = apply pivot table style width/height (default Excel behavior)
|
|
122
|
+
applyWidthHeightFormats: model.applyWidthHeightFormats !== undefined ? model.applyWidthHeightFormats : '1',
|
|
123
|
+
// Data starts from this row (startRow + 1)
|
|
124
|
+
dataStartRow: startRow + 1,
|
|
125
|
+
// Source data range for the pivot cache (from header row to last data row)
|
|
126
|
+
sourceDataRange,
|
|
127
|
+
// Pivot table location on the destination sheet
|
|
128
|
+
startCell: model.startCell || 'A1',
|
|
129
|
+
// Number format for the value field (e.g. '#,##0.00' for currency)
|
|
130
|
+
valueNumFmt: model.valueNumFmt || null
|
|
131
|
+
};
|
|
132
|
+
}
|
|
133
|
+
function validate(worksheet, model) {
|
|
134
|
+
// Note: Multiple pivot tables are now supported
|
|
135
|
+
|
|
136
|
+
if (model.metric && model.metric !== 'sum' && model.metric !== 'count') {
|
|
137
|
+
throw new Error('Only the "sum" and "count" metric is supported at this time.');
|
|
138
|
+
}
|
|
139
|
+
const startRow = model.startRow || 1;
|
|
140
|
+
const headerNames = model.sourceSheet.getRow(startRow).values.slice(1);
|
|
141
|
+
const isInHeaderNames = objectFromProps(headerNames, true);
|
|
142
|
+
const pages = model.pages || [];
|
|
143
|
+
for (const name of [...model.rows, ...model.columns, ...model.values, ...pages]) {
|
|
144
|
+
if (!isInHeaderNames[name]) {
|
|
145
|
+
throw new Error(`The header name "${name}" was not found in ${model.sourceSheet.name}.`);
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
if (!model.rows.length) {
|
|
149
|
+
throw new Error('No pivot table rows specified.');
|
|
150
|
+
}
|
|
151
|
+
if (!model.columns.length) {
|
|
152
|
+
throw new Error('No pivot table columns specified.');
|
|
153
|
+
}
|
|
154
|
+
if (model.values.length !== 1) {
|
|
155
|
+
throw new Error('Exactly 1 value needs to be specified at this time.');
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
// Validate page fields don't overlap with rows/columns/values
|
|
159
|
+
const allFields = [...model.rows, ...model.columns, ...model.values];
|
|
160
|
+
for (const pageField of pages) {
|
|
161
|
+
if (allFields.includes(pageField)) {
|
|
162
|
+
throw new Error(`Page field "${pageField}" cannot also be used as a row, column, or value field.`);
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
// Validate pageDefaults reference valid page fields and values
|
|
167
|
+
if (model.pageDefaults) {
|
|
168
|
+
for (const [fieldName, defaultValue] of Object.entries(model.pageDefaults)) {
|
|
169
|
+
if (!pages.includes(fieldName)) {
|
|
170
|
+
throw new Error(`pageDefaults field "${fieldName}" is not in the pages array.`);
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
function makeCacheFields(worksheet, fieldNamesWithSharedItems) {
|
|
176
|
+
let startRow = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 1;
|
|
177
|
+
let verbose = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;
|
|
178
|
+
// Cache fields are used in pivot tables to reference source data.
|
|
179
|
+
//
|
|
180
|
+
// Example
|
|
181
|
+
// -------
|
|
182
|
+
// Turn
|
|
183
|
+
//
|
|
184
|
+
// `worksheet` sheet values [
|
|
185
|
+
// ['A', 'B', 'C', 'D', 'E'],
|
|
186
|
+
// ['a1', 'b1', 'c1', 4, 5],
|
|
187
|
+
// ['a1', 'b2', 'c1', 4, 5],
|
|
188
|
+
// ['a2', 'b1', 'c2', 14, 24],
|
|
189
|
+
// ['a2', 'b2', 'c2', 24, 35],
|
|
190
|
+
// ['a3', 'b1', 'c3', 34, 45],
|
|
191
|
+
// ['a3', 'b2', 'c3', 44, 45]
|
|
192
|
+
// ];
|
|
193
|
+
// fieldNamesWithSharedItems = ['A', 'B', 'C'];
|
|
194
|
+
// startRow = 1 (default, header row)
|
|
195
|
+
//
|
|
196
|
+
// into
|
|
197
|
+
//
|
|
198
|
+
// [
|
|
199
|
+
// { name: 'A', sharedItems: ['a1', 'a2', 'a3'] },
|
|
200
|
+
// { name: 'B', sharedItems: ['b1', 'b2'] },
|
|
201
|
+
// { name: 'C', sharedItems: ['c1', 'c2', 'c3'] },
|
|
202
|
+
// { name: 'D', sharedItems: null },
|
|
203
|
+
// { name: 'E', sharedItems: null }
|
|
204
|
+
// ]
|
|
205
|
+
|
|
206
|
+
const names = worksheet.getRow(startRow).values;
|
|
207
|
+
const nameToHasSharedItems = objectFromProps(fieldNamesWithSharedItems, true);
|
|
208
|
+
const totalColumns = names.length - 1;
|
|
209
|
+
const aggregate = (columnIndex, fieldName) => {
|
|
210
|
+
if (verbose && nameToHasSharedItems[fieldName]) {
|
|
211
|
+
// eslint-disable-next-line no-console
|
|
212
|
+
console.log(` Processing column ${columnIndex}/${totalColumns}: ${fieldName}`);
|
|
213
|
+
}
|
|
214
|
+
const columnValues = worksheet.getColumn(columnIndex).values.slice(startRow + 1);
|
|
215
|
+
|
|
216
|
+
// Deduplicate case-insensitively for Excel compatibility
|
|
217
|
+
// Excel treats pivot table values as case-insensitive, so "Apple" and "apple"
|
|
218
|
+
// are considered the same value. We keep the first occurrence of each case-insensitive variant.
|
|
219
|
+
const seen = new Map(); // lowercase -> first occurrence
|
|
220
|
+
const uniqueValues = [];
|
|
221
|
+
for (const value of columnValues) {
|
|
222
|
+
if (value === null || value === undefined) continue;
|
|
223
|
+
const key = typeof value === 'string' ? value.toLowerCase() : value;
|
|
224
|
+
if (!seen.has(key)) {
|
|
225
|
+
seen.set(key, value);
|
|
226
|
+
uniqueValues.push(value);
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
return toSortedArray(uniqueValues);
|
|
230
|
+
};
|
|
231
|
+
|
|
232
|
+
// make result
|
|
233
|
+
const result = [];
|
|
234
|
+
for (const columnIndex of range(1, names.length)) {
|
|
235
|
+
const name = names[columnIndex];
|
|
236
|
+
const sharedItems = nameToHasSharedItems[name] ? aggregate(columnIndex, name) : null;
|
|
237
|
+
result.push({
|
|
238
|
+
name,
|
|
239
|
+
sharedItems
|
|
240
|
+
});
|
|
241
|
+
}
|
|
242
|
+
return result;
|
|
243
|
+
}
|
|
244
|
+
module.exports = {
|
|
245
|
+
makePivotTable
|
|
246
|
+
};
|
|
247
|
+
//# sourceMappingURL=pivot-table.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pivot-table.js","names":["colCache","require","objectFromProps","range","toSortedArray","makePivotTable","worksheet","model","validate","sourceSheet","rows","columns","values","pages","metric","pageDefaults","verbose","startRow","console","log","usedFieldNames","cacheFields","makeCacheFields","length","dimensions","sourceDataRange","encode","left","bottom","right","nameToIndex","reduce","result","cacheField","index","name","map","row","column","value","page","cacheId","String","workbook","pivotTables","pageDefaultsIndices","fieldName","defaultValue","Object","entries","fieldIndex","undefined","sharedItems","itemIndex","findIndex","item","applyWidthHeightFormats","dataStartRow","startCell","valueNumFmt","Error","headerNames","getRow","slice","isInHeaderNames","allFields","pageField","includes","fieldNamesWithSharedItems","arguments","names","nameToHasSharedItems","totalColumns","aggregate","columnIndex","columnValues","getColumn","seen","Map","uniqueValues","key","toLowerCase","has","set","push","module","exports"],"sources":["../../../lib/doc/pivot-table.js"],"sourcesContent":["const colCache = require('../utils/col-cache');\r\nconst {objectFromProps, range, toSortedArray} = require('../utils/utils');\r\n\r\n// TK(2023-10-10): turn this into a class constructor.\r\n\r\n// IMPORTANT: Pivot tables are NOT supported with streaming API (WorkbookWriter)\r\n//\r\n// Pivot tables require reading ALL source data to generate the pivot cache,\r\n// which conflicts with streaming's one-pass write model. Excel requires complete\r\n// pivot cache data (all unique values and all data rows) at file creation time.\r\n//\r\n// For large datasets, use the standard (non-streaming) Workbook API with pivot tables.\r\n\r\nfunction makePivotTable(worksheet, model) {\r\n // Example `model`:\r\n // {\r\n // sourceSheet: worksheet1,\r\n // rows: ['A', 'B'],\r\n // columns: ['C'],\r\n // values: ['E'],\r\n // pages: ['F'], // optional\r\n // pageDefaults: { F: 'value' }, // optional\r\n // metric: 'sum', 'count'\r\n // startRow: 1, // optional: header row number (default: 1)\r\n // startCell: 'A1', // optional: pivot table location (default: 'A1')\r\n // valueNumFmt: '#,##0.00', // optional: number format for value field\r\n // verbose: false, // optional: show progress logs\r\n // }\r\n\r\n validate(worksheet, model);\r\n\r\n const {sourceSheet} = model;\r\n let {rows, columns, values, pages = []} = model;\r\n const {metric, pageDefaults = {}, verbose = false} = model;\r\n const startRow = model.startRow || 1;\r\n\r\n // Generate sharedItems only for categorical fields (rows, columns, pages).\r\n // Value fields (values) are numeric aggregations and should NOT have sharedItems,\r\n // as their raw values are written directly as <n> in cache records.\r\n // This significantly reduces processing time for wide datasets (e.g. 26 cols × 60k rows).\r\n if (verbose) {\r\n // eslint-disable-next-line no-console\r\n console.log('Generating cache fields...');\r\n }\r\n const usedFieldNames = [...model.rows, ...model.columns, ...pages];\r\n const cacheFields = makeCacheFields(sourceSheet, usedFieldNames, startRow, verbose);\r\n if (verbose) {\r\n // eslint-disable-next-line no-console\r\n console.log(` ✓ Generated ${cacheFields.length} cache fields (${usedFieldNames.length} with sharedItems)`);\r\n }\r\n\r\n // Calculate the source data range for the pivot cache\r\n // The range should start from the header row (startRow) to the last row with data\r\n const dimensions = sourceSheet.dimensions;\r\n const sourceDataRange = dimensions\r\n ? colCache.encode(startRow, dimensions.left, dimensions.bottom, dimensions.right)\r\n : null;\r\n\r\n // let {rows, columns, values, pages} use indices instead of names;\r\n // names can then be accessed via `pivotTable.cacheFields[index].name`.\r\n // *Note*: Using `reduce` as `Object.fromEntries` requires Node 12+;\r\n // ExcelJS is >=8.3.0 (as of 2023-10-08).\r\n const nameToIndex = cacheFields.reduce((result, cacheField, index) => {\r\n result[cacheField.name] = index;\r\n return result;\r\n }, {});\r\n rows = rows.map(row => nameToIndex[row]);\r\n columns = columns.map(column => nameToIndex[column]);\r\n values = values.map(value => nameToIndex[value]);\r\n pages = pages.map(page => nameToIndex[page]);\r\n\r\n // Generate unique cache ID based on the number of existing pivot tables\r\n // Each pivot table gets its own cache ID (starting from 10)\r\n const cacheId = String(10 + worksheet.workbook.pivotTables.length);\r\n\r\n // Convert pageDefaults from field names to indices with item indices\r\n const pageDefaultsIndices = {};\r\n for (const [fieldName, defaultValue] of Object.entries(pageDefaults)) {\r\n const fieldIndex = nameToIndex[fieldName];\r\n if (fieldIndex !== undefined) {\r\n const cacheField = cacheFields[fieldIndex];\r\n if (cacheField.sharedItems) {\r\n // Find the item index for the default value\r\n const itemIndex = cacheField.sharedItems.findIndex(item => item === defaultValue);\r\n if (itemIndex >= 0) {\r\n pageDefaultsIndices[fieldIndex] = itemIndex;\r\n }\r\n }\r\n }\r\n }\r\n\r\n // form pivot table object\r\n return {\r\n sourceSheet,\r\n rows,\r\n columns,\r\n values,\r\n pages,\r\n pageDefaults: pageDefaultsIndices,\r\n metric,\r\n cacheFields,\r\n // defined in <pivotTableDefinition> of xl/pivotTables/pivotTableN.xml;\r\n // also used in xl/workbook.xml\r\n cacheId,\r\n // Control whether pivot table style overrides worksheet column widths\r\n // '0' = preserve worksheet column widths (useful for custom sizing)\r\n // '1' = apply pivot table style width/height (default Excel behavior)\r\n applyWidthHeightFormats:\r\n model.applyWidthHeightFormats !== undefined ? model.applyWidthHeightFormats : '1',\r\n // Data starts from this row (startRow + 1)\r\n dataStartRow: startRow + 1,\r\n // Source data range for the pivot cache (from header row to last data row)\r\n sourceDataRange,\r\n // Pivot table location on the destination sheet\r\n startCell: model.startCell || 'A1',\r\n // Number format for the value field (e.g. '#,##0.00' for currency)\r\n valueNumFmt: model.valueNumFmt || null,\r\n };\r\n}\r\n\r\nfunction validate(worksheet, model) {\r\n // Note: Multiple pivot tables are now supported\r\n\r\n if (model.metric && model.metric !== 'sum' && model.metric !== 'count') {\r\n throw new Error('Only the \"sum\" and \"count\" metric is supported at this time.');\r\n }\r\n\r\n const startRow = model.startRow || 1;\r\n const headerNames = model.sourceSheet.getRow(startRow).values.slice(1);\r\n const isInHeaderNames = objectFromProps(headerNames, true);\r\n const pages = model.pages || [];\r\n for (const name of [...model.rows, ...model.columns, ...model.values, ...pages]) {\r\n if (!isInHeaderNames[name]) {\r\n throw new Error(`The header name \"${name}\" was not found in ${model.sourceSheet.name}.`);\r\n }\r\n }\r\n\r\n if (!model.rows.length) {\r\n throw new Error('No pivot table rows specified.');\r\n }\r\n\r\n if (!model.columns.length) {\r\n throw new Error('No pivot table columns specified.');\r\n }\r\n\r\n if (model.values.length !== 1) {\r\n throw new Error('Exactly 1 value needs to be specified at this time.');\r\n }\r\n\r\n // Validate page fields don't overlap with rows/columns/values\r\n const allFields = [...model.rows, ...model.columns, ...model.values];\r\n for (const pageField of pages) {\r\n if (allFields.includes(pageField)) {\r\n throw new Error(\r\n `Page field \"${pageField}\" cannot also be used as a row, column, or value field.`,\r\n );\r\n }\r\n }\r\n\r\n // Validate pageDefaults reference valid page fields and values\r\n if (model.pageDefaults) {\r\n for (const [fieldName, defaultValue] of Object.entries(model.pageDefaults)) {\r\n if (!pages.includes(fieldName)) {\r\n throw new Error(`pageDefaults field \"${fieldName}\" is not in the pages array.`);\r\n }\r\n }\r\n }\r\n}\r\n\r\nfunction makeCacheFields(worksheet, fieldNamesWithSharedItems, startRow = 1, verbose = false) {\r\n // Cache fields are used in pivot tables to reference source data.\r\n //\r\n // Example\r\n // -------\r\n // Turn\r\n //\r\n // `worksheet` sheet values [\r\n // ['A', 'B', 'C', 'D', 'E'],\r\n // ['a1', 'b1', 'c1', 4, 5],\r\n // ['a1', 'b2', 'c1', 4, 5],\r\n // ['a2', 'b1', 'c2', 14, 24],\r\n // ['a2', 'b2', 'c2', 24, 35],\r\n // ['a3', 'b1', 'c3', 34, 45],\r\n // ['a3', 'b2', 'c3', 44, 45]\r\n // ];\r\n // fieldNamesWithSharedItems = ['A', 'B', 'C'];\r\n // startRow = 1 (default, header row)\r\n //\r\n // into\r\n //\r\n // [\r\n // { name: 'A', sharedItems: ['a1', 'a2', 'a3'] },\r\n // { name: 'B', sharedItems: ['b1', 'b2'] },\r\n // { name: 'C', sharedItems: ['c1', 'c2', 'c3'] },\r\n // { name: 'D', sharedItems: null },\r\n // { name: 'E', sharedItems: null }\r\n // ]\r\n\r\n const names = worksheet.getRow(startRow).values;\r\n const nameToHasSharedItems = objectFromProps(fieldNamesWithSharedItems, true);\r\n const totalColumns = names.length - 1;\r\n\r\n const aggregate = (columnIndex, fieldName) => {\r\n if (verbose && nameToHasSharedItems[fieldName]) {\r\n // eslint-disable-next-line no-console\r\n console.log(` Processing column ${columnIndex}/${totalColumns}: ${fieldName}`);\r\n }\r\n const columnValues = worksheet.getColumn(columnIndex).values.slice(startRow + 1);\r\n\r\n // Deduplicate case-insensitively for Excel compatibility\r\n // Excel treats pivot table values as case-insensitive, so \"Apple\" and \"apple\"\r\n // are considered the same value. We keep the first occurrence of each case-insensitive variant.\r\n const seen = new Map(); // lowercase -> first occurrence\r\n const uniqueValues = [];\r\n\r\n for (const value of columnValues) {\r\n if (value === null || value === undefined) continue;\r\n\r\n const key = typeof value === 'string' ? value.toLowerCase() : value;\r\n if (!seen.has(key)) {\r\n seen.set(key, value);\r\n uniqueValues.push(value);\r\n }\r\n }\r\n\r\n return toSortedArray(uniqueValues);\r\n };\r\n\r\n // make result\r\n const result = [];\r\n for (const columnIndex of range(1, names.length)) {\r\n const name = names[columnIndex];\r\n const sharedItems = nameToHasSharedItems[name] ? aggregate(columnIndex, name) : null;\r\n result.push({name, sharedItems});\r\n }\r\n return result;\r\n}\r\n\r\nmodule.exports = {makePivotTable};\r\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,229 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
const colCache = require('../utils/col-cache');
|
|
4
|
+
|
|
5
|
+
// used by worksheet to calculate sheet dimensions
|
|
6
|
+
class Range {
|
|
7
|
+
constructor() {
|
|
8
|
+
this.decode(arguments);
|
|
9
|
+
}
|
|
10
|
+
setTLBR(t, l, b, r, s) {
|
|
11
|
+
if (arguments.length < 4) {
|
|
12
|
+
// setTLBR(tl, br, s)
|
|
13
|
+
const tl = colCache.decodeAddress(t);
|
|
14
|
+
const br = colCache.decodeAddress(l);
|
|
15
|
+
this.model = {
|
|
16
|
+
top: Math.min(tl.row, br.row),
|
|
17
|
+
left: Math.min(tl.col, br.col),
|
|
18
|
+
bottom: Math.max(tl.row, br.row),
|
|
19
|
+
right: Math.max(tl.col, br.col),
|
|
20
|
+
sheetName: b
|
|
21
|
+
};
|
|
22
|
+
this.setTLBR(tl.row, tl.col, br.row, br.col, s);
|
|
23
|
+
} else {
|
|
24
|
+
// setTLBR(t, l, b, r, s)
|
|
25
|
+
this.model = {
|
|
26
|
+
top: Math.min(t, b),
|
|
27
|
+
left: Math.min(l, r),
|
|
28
|
+
bottom: Math.max(t, b),
|
|
29
|
+
right: Math.max(l, r),
|
|
30
|
+
sheetName: s
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
decode(argv) {
|
|
35
|
+
switch (argv.length) {
|
|
36
|
+
case 5:
|
|
37
|
+
// [t,l,b,r,s]
|
|
38
|
+
this.setTLBR(argv[0], argv[1], argv[2], argv[3], argv[4]);
|
|
39
|
+
break;
|
|
40
|
+
case 4:
|
|
41
|
+
// [t,l,b,r]
|
|
42
|
+
this.setTLBR(argv[0], argv[1], argv[2], argv[3]);
|
|
43
|
+
break;
|
|
44
|
+
case 3:
|
|
45
|
+
// [tl,br,s]
|
|
46
|
+
this.setTLBR(argv[0], argv[1], argv[2]);
|
|
47
|
+
break;
|
|
48
|
+
case 2:
|
|
49
|
+
// [tl,br]
|
|
50
|
+
this.setTLBR(argv[0], argv[1]);
|
|
51
|
+
break;
|
|
52
|
+
case 1:
|
|
53
|
+
{
|
|
54
|
+
const value = argv[0];
|
|
55
|
+
if (value instanceof Range) {
|
|
56
|
+
// copy constructor
|
|
57
|
+
this.model = {
|
|
58
|
+
top: value.model.top,
|
|
59
|
+
left: value.model.left,
|
|
60
|
+
bottom: value.model.bottom,
|
|
61
|
+
right: value.model.right,
|
|
62
|
+
sheetName: value.sheetName
|
|
63
|
+
};
|
|
64
|
+
} else if (value instanceof Array) {
|
|
65
|
+
// an arguments array
|
|
66
|
+
this.decode(value);
|
|
67
|
+
} else if (value.top && value.left && value.bottom && value.right) {
|
|
68
|
+
// a model
|
|
69
|
+
this.model = {
|
|
70
|
+
top: value.top,
|
|
71
|
+
left: value.left,
|
|
72
|
+
bottom: value.bottom,
|
|
73
|
+
right: value.right,
|
|
74
|
+
sheetName: value.sheetName
|
|
75
|
+
};
|
|
76
|
+
} else {
|
|
77
|
+
// [sheetName!]tl:br
|
|
78
|
+
const tlbr = colCache.decodeEx(value);
|
|
79
|
+
if (tlbr.top) {
|
|
80
|
+
this.model = {
|
|
81
|
+
top: tlbr.top,
|
|
82
|
+
left: tlbr.left,
|
|
83
|
+
bottom: tlbr.bottom,
|
|
84
|
+
right: tlbr.right,
|
|
85
|
+
sheetName: tlbr.sheetName
|
|
86
|
+
};
|
|
87
|
+
} else {
|
|
88
|
+
this.model = {
|
|
89
|
+
top: tlbr.row,
|
|
90
|
+
left: tlbr.col,
|
|
91
|
+
bottom: tlbr.row,
|
|
92
|
+
right: tlbr.col,
|
|
93
|
+
sheetName: tlbr.sheetName
|
|
94
|
+
};
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
break;
|
|
98
|
+
}
|
|
99
|
+
case 0:
|
|
100
|
+
this.model = {
|
|
101
|
+
top: 0,
|
|
102
|
+
left: 0,
|
|
103
|
+
bottom: 0,
|
|
104
|
+
right: 0
|
|
105
|
+
};
|
|
106
|
+
break;
|
|
107
|
+
default:
|
|
108
|
+
throw new Error(`Invalid number of arguments to _getDimensions() - ${argv.length}`);
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
get top() {
|
|
112
|
+
return this.model.top || 1;
|
|
113
|
+
}
|
|
114
|
+
set top(value) {
|
|
115
|
+
this.model.top = value;
|
|
116
|
+
}
|
|
117
|
+
get left() {
|
|
118
|
+
return this.model.left || 1;
|
|
119
|
+
}
|
|
120
|
+
set left(value) {
|
|
121
|
+
this.model.left = value;
|
|
122
|
+
}
|
|
123
|
+
get bottom() {
|
|
124
|
+
return this.model.bottom || 1;
|
|
125
|
+
}
|
|
126
|
+
set bottom(value) {
|
|
127
|
+
this.model.bottom = value;
|
|
128
|
+
}
|
|
129
|
+
get right() {
|
|
130
|
+
return this.model.right || 1;
|
|
131
|
+
}
|
|
132
|
+
set right(value) {
|
|
133
|
+
this.model.right = value;
|
|
134
|
+
}
|
|
135
|
+
get sheetName() {
|
|
136
|
+
return this.model.sheetName;
|
|
137
|
+
}
|
|
138
|
+
set sheetName(value) {
|
|
139
|
+
this.model.sheetName = value;
|
|
140
|
+
}
|
|
141
|
+
get _serialisedSheetName() {
|
|
142
|
+
const {
|
|
143
|
+
sheetName
|
|
144
|
+
} = this.model;
|
|
145
|
+
if (sheetName) {
|
|
146
|
+
if (/^[a-zA-Z0-9]*$/.test(sheetName)) {
|
|
147
|
+
return `${sheetName}!`;
|
|
148
|
+
}
|
|
149
|
+
return `'${sheetName}'!`;
|
|
150
|
+
}
|
|
151
|
+
return '';
|
|
152
|
+
}
|
|
153
|
+
expand(top, left, bottom, right) {
|
|
154
|
+
if (!this.model.top || top < this.top) this.top = top;
|
|
155
|
+
if (!this.model.left || left < this.left) this.left = left;
|
|
156
|
+
if (!this.model.bottom || bottom > this.bottom) this.bottom = bottom;
|
|
157
|
+
if (!this.model.right || right > this.right) this.right = right;
|
|
158
|
+
}
|
|
159
|
+
expandRow(row) {
|
|
160
|
+
if (row) {
|
|
161
|
+
const {
|
|
162
|
+
dimensions,
|
|
163
|
+
number
|
|
164
|
+
} = row;
|
|
165
|
+
if (dimensions) {
|
|
166
|
+
this.expand(number, dimensions.min, number, dimensions.max);
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
expandToAddress(addressStr) {
|
|
171
|
+
const address = colCache.decodeEx(addressStr);
|
|
172
|
+
this.expand(address.row, address.col, address.row, address.col);
|
|
173
|
+
}
|
|
174
|
+
get tl() {
|
|
175
|
+
return colCache.n2l(this.left) + this.top;
|
|
176
|
+
}
|
|
177
|
+
get $t$l() {
|
|
178
|
+
return `$${colCache.n2l(this.left)}$${this.top}`;
|
|
179
|
+
}
|
|
180
|
+
get br() {
|
|
181
|
+
return colCache.n2l(this.right) + this.bottom;
|
|
182
|
+
}
|
|
183
|
+
get $b$r() {
|
|
184
|
+
return `$${colCache.n2l(this.right)}$${this.bottom}`;
|
|
185
|
+
}
|
|
186
|
+
get range() {
|
|
187
|
+
return `${this._serialisedSheetName + this.tl}:${this.br}`;
|
|
188
|
+
}
|
|
189
|
+
get $range() {
|
|
190
|
+
return `${this._serialisedSheetName + this.$t$l}:${this.$b$r}`;
|
|
191
|
+
}
|
|
192
|
+
get shortRange() {
|
|
193
|
+
return this.count > 1 ? this.range : this._serialisedSheetName + this.tl;
|
|
194
|
+
}
|
|
195
|
+
get $shortRange() {
|
|
196
|
+
return this.count > 1 ? this.$range : this._serialisedSheetName + this.$t$l;
|
|
197
|
+
}
|
|
198
|
+
get count() {
|
|
199
|
+
return (1 + this.bottom - this.top) * (1 + this.right - this.left);
|
|
200
|
+
}
|
|
201
|
+
toString() {
|
|
202
|
+
return this.range;
|
|
203
|
+
}
|
|
204
|
+
intersects(other) {
|
|
205
|
+
if (other.sheetName && this.sheetName && other.sheetName !== this.sheetName) return false;
|
|
206
|
+
if (other.bottom < this.top) return false;
|
|
207
|
+
if (other.top > this.bottom) return false;
|
|
208
|
+
if (other.right < this.left) return false;
|
|
209
|
+
if (other.left > this.right) return false;
|
|
210
|
+
return true;
|
|
211
|
+
}
|
|
212
|
+
contains(addressStr) {
|
|
213
|
+
const address = colCache.decodeEx(addressStr);
|
|
214
|
+
return this.containsEx(address);
|
|
215
|
+
}
|
|
216
|
+
containsEx(address) {
|
|
217
|
+
if (address.sheetName && this.sheetName && address.sheetName !== this.sheetName) return false;
|
|
218
|
+
return address.row >= this.top && address.row <= this.bottom && address.col >= this.left && address.col <= this.right;
|
|
219
|
+
}
|
|
220
|
+
forEachAddress(cb) {
|
|
221
|
+
for (let col = this.left; col <= this.right; col++) {
|
|
222
|
+
for (let row = this.top; row <= this.bottom; row++) {
|
|
223
|
+
cb(colCache.encodeAddress(row, col), row, col);
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
module.exports = Range;
|
|
229
|
+
//# sourceMappingURL=range.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"range.js","names":["colCache","require","Range","constructor","decode","arguments","setTLBR","t","l","b","r","s","length","tl","decodeAddress","br","model","top","Math","min","row","left","col","bottom","max","right","sheetName","argv","value","Array","tlbr","decodeEx","Error","_serialisedSheetName","test","expand","expandRow","dimensions","number","expandToAddress","addressStr","address","n2l","$t$l","$b$r","range","$range","shortRange","count","$shortRange","toString","intersects","other","contains","containsEx","forEachAddress","cb","encodeAddress","module","exports"],"sources":["../../../lib/doc/range.js"],"sourcesContent":["const colCache = require('../utils/col-cache');\r\n\r\n// used by worksheet to calculate sheet dimensions\r\nclass Range {\r\n constructor() {\r\n this.decode(arguments);\r\n }\r\n\r\n setTLBR(t, l, b, r, s) {\r\n if (arguments.length < 4) {\r\n // setTLBR(tl, br, s)\r\n const tl = colCache.decodeAddress(t);\r\n const br = colCache.decodeAddress(l);\r\n this.model = {\r\n top: Math.min(tl.row, br.row),\r\n left: Math.min(tl.col, br.col),\r\n bottom: Math.max(tl.row, br.row),\r\n right: Math.max(tl.col, br.col),\r\n sheetName: b,\r\n };\r\n\r\n this.setTLBR(tl.row, tl.col, br.row, br.col, s);\r\n } else {\r\n // setTLBR(t, l, b, r, s)\r\n this.model = {\r\n top: Math.min(t, b),\r\n left: Math.min(l, r),\r\n bottom: Math.max(t, b),\r\n right: Math.max(l, r),\r\n sheetName: s,\r\n };\r\n }\r\n }\r\n\r\n decode(argv) {\r\n switch (argv.length) {\r\n case 5: // [t,l,b,r,s]\r\n this.setTLBR(argv[0], argv[1], argv[2], argv[3], argv[4]);\r\n break;\r\n case 4: // [t,l,b,r]\r\n this.setTLBR(argv[0], argv[1], argv[2], argv[3]);\r\n break;\r\n\r\n case 3: // [tl,br,s]\r\n this.setTLBR(argv[0], argv[1], argv[2]);\r\n break;\r\n case 2: // [tl,br]\r\n this.setTLBR(argv[0], argv[1]);\r\n break;\r\n\r\n case 1: {\r\n const value = argv[0];\r\n if (value instanceof Range) {\r\n // copy constructor\r\n this.model = {\r\n top: value.model.top,\r\n left: value.model.left,\r\n bottom: value.model.bottom,\r\n right: value.model.right,\r\n sheetName: value.sheetName,\r\n };\r\n } else if (value instanceof Array) {\r\n // an arguments array\r\n this.decode(value);\r\n } else if (value.top && value.left && value.bottom && value.right) {\r\n // a model\r\n this.model = {\r\n top: value.top,\r\n left: value.left,\r\n bottom: value.bottom,\r\n right: value.right,\r\n sheetName: value.sheetName,\r\n };\r\n } else {\r\n // [sheetName!]tl:br\r\n const tlbr = colCache.decodeEx(value);\r\n if (tlbr.top) {\r\n this.model = {\r\n top: tlbr.top,\r\n left: tlbr.left,\r\n bottom: tlbr.bottom,\r\n right: tlbr.right,\r\n sheetName: tlbr.sheetName,\r\n };\r\n } else {\r\n this.model = {\r\n top: tlbr.row,\r\n left: tlbr.col,\r\n bottom: tlbr.row,\r\n right: tlbr.col,\r\n sheetName: tlbr.sheetName,\r\n };\r\n }\r\n }\r\n break;\r\n }\r\n\r\n case 0:\r\n this.model = {\r\n top: 0,\r\n left: 0,\r\n bottom: 0,\r\n right: 0,\r\n };\r\n break;\r\n\r\n default:\r\n throw new Error(`Invalid number of arguments to _getDimensions() - ${argv.length}`);\r\n }\r\n }\r\n\r\n get top() {\r\n return this.model.top || 1;\r\n }\r\n\r\n set top(value) {\r\n this.model.top = value;\r\n }\r\n\r\n get left() {\r\n return this.model.left || 1;\r\n }\r\n\r\n set left(value) {\r\n this.model.left = value;\r\n }\r\n\r\n get bottom() {\r\n return this.model.bottom || 1;\r\n }\r\n\r\n set bottom(value) {\r\n this.model.bottom = value;\r\n }\r\n\r\n get right() {\r\n return this.model.right || 1;\r\n }\r\n\r\n set right(value) {\r\n this.model.right = value;\r\n }\r\n\r\n get sheetName() {\r\n return this.model.sheetName;\r\n }\r\n\r\n set sheetName(value) {\r\n this.model.sheetName = value;\r\n }\r\n\r\n get _serialisedSheetName() {\r\n const {sheetName} = this.model;\r\n if (sheetName) {\r\n if (/^[a-zA-Z0-9]*$/.test(sheetName)) {\r\n return `${sheetName}!`;\r\n }\r\n return `'${sheetName}'!`;\r\n }\r\n return '';\r\n }\r\n\r\n expand(top, left, bottom, right) {\r\n if (!this.model.top || top < this.top) this.top = top;\r\n if (!this.model.left || left < this.left) this.left = left;\r\n if (!this.model.bottom || bottom > this.bottom) this.bottom = bottom;\r\n if (!this.model.right || right > this.right) this.right = right;\r\n }\r\n\r\n expandRow(row) {\r\n if (row) {\r\n const {dimensions, number} = row;\r\n if (dimensions) {\r\n this.expand(number, dimensions.min, number, dimensions.max);\r\n }\r\n }\r\n }\r\n\r\n expandToAddress(addressStr) {\r\n const address = colCache.decodeEx(addressStr);\r\n this.expand(address.row, address.col, address.row, address.col);\r\n }\r\n\r\n get tl() {\r\n return colCache.n2l(this.left) + this.top;\r\n }\r\n\r\n get $t$l() {\r\n return `$${colCache.n2l(this.left)}$${this.top}`;\r\n }\r\n\r\n get br() {\r\n return colCache.n2l(this.right) + this.bottom;\r\n }\r\n\r\n get $b$r() {\r\n return `$${colCache.n2l(this.right)}$${this.bottom}`;\r\n }\r\n\r\n get range() {\r\n return `${this._serialisedSheetName + this.tl}:${this.br}`;\r\n }\r\n\r\n get $range() {\r\n return `${this._serialisedSheetName + this.$t$l}:${this.$b$r}`;\r\n }\r\n\r\n get shortRange() {\r\n return this.count > 1 ? this.range : this._serialisedSheetName + this.tl;\r\n }\r\n\r\n get $shortRange() {\r\n return this.count > 1 ? this.$range : this._serialisedSheetName + this.$t$l;\r\n }\r\n\r\n get count() {\r\n return (1 + this.bottom - this.top) * (1 + this.right - this.left);\r\n }\r\n\r\n toString() {\r\n return this.range;\r\n }\r\n\r\n intersects(other) {\r\n if (other.sheetName && this.sheetName && other.sheetName !== this.sheetName) return false;\r\n if (other.bottom < this.top) return false;\r\n if (other.top > this.bottom) return false;\r\n if (other.right < this.left) return false;\r\n if (other.left > this.right) return false;\r\n return true;\r\n }\r\n\r\n contains(addressStr) {\r\n const address = colCache.decodeEx(addressStr);\r\n return this.containsEx(address);\r\n }\r\n\r\n containsEx(address) {\r\n if (address.sheetName && this.sheetName && address.sheetName !== this.sheetName) return false;\r\n return (\r\n address.row >= this.top &&\r\n address.row <= this.bottom &&\r\n address.col >= this.left &&\r\n address.col <= this.right\r\n );\r\n }\r\n\r\n forEachAddress(cb) {\r\n for (let col = this.left; col <= this.right; col++) {\r\n for (let row = this.top; row <= this.bottom; row++) {\r\n cb(colCache.encodeAddress(row, col), row, col);\r\n }\r\n }\r\n }\r\n}\r\n\r\nmodule.exports = Range;\r\n"],"mappings":"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","ignoreList":[]}
|