@alienkarma/exceljs 4.4.0-fork.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 +3024 -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/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 +137 -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 +382 -0
- package/dist/es5/doc/row.js.map +1 -0
- package/dist/es5/doc/table.js +441 -0
- package/dist/es5/doc/table.js.map +1 -0
- package/dist/es5/doc/workbook.js +205 -0
- package/dist/es5/doc/workbook.js.map +1 -0
- package/dist/es5/doc/worksheet.js +918 -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 +362 -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 +47 -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 +32 -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 +343 -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 +204 -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 +21 -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 +241 -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 +97 -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 +107 -0
- package/dist/es5/xlsx/xform/comment/vml-notes-xform.js.map +1 -0
- package/dist/es5/xlsx/xform/comment/vml-shape-xform.js +92 -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 +127 -0
- package/dist/es5/xlsx/xform/core/content-types-xform.js.map +1 -0
- package/dist/es5/xlsx/xform/core/core-xform.js +158 -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/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 +48 -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 +73 -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 +93 -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 +176 -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 +275 -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 +42 -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 +75 -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 +128 -0
- package/dist/es5/xlsx/xform/sheet/row-xform.js.map +1 -0
- package/dist/es5/xlsx/xform/sheet/sheet-format-properties-xform.js +51 -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 +522 -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 +114 -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 +89 -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 +122 -0
- package/dist/es5/xlsx/xform/table/table-xform.js.map +1 -0
- package/dist/es5/xlsx/xlsx.js +775 -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 +57759 -0
- package/dist/exceljs.bare.js.map +777 -0
- package/dist/exceljs.bare.min.js +45 -0
- package/dist/exceljs.bare.min.js.map +1 -0
- package/dist/exceljs.js +62398 -0
- package/dist/exceljs.js.map +1095 -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 +2040 -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/image.js +59 -0
- package/lib/doc/modelcontainer.js +18 -0
- package/lib/doc/note.js +65 -0
- package/lib/doc/pivot-table.js +132 -0
- package/lib/doc/range.js +257 -0
- package/lib/doc/row.js +415 -0
- package/lib/doc/table.js +465 -0
- package/lib/doc/workbook.js +224 -0
- package/lib/doc/worksheet.js +949 -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 +337 -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 +30 -0
- package/lib/utils/shared-formula.js +44 -0
- package/lib/utils/shared-strings.js +35 -0
- package/lib/utils/stream-base64.js +72 -0
- package/lib/utils/stream-buf.js +364 -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 +205 -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 +20 -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 +259 -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 +95 -0
- package/lib/xlsx/xform/comment/vml-notes-xform.js +107 -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 +135 -0
- package/lib/xlsx/xform/core/core-xform.js +136 -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/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 +43 -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 +103 -0
- package/lib/xlsx/xform/pivot-table/pivot-table-xform.js +189 -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 +301 -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 +49 -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 +98 -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 +142 -0
- package/lib/xlsx/xform/sheet/sheet-format-properties-xform.js +55 -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 +548 -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 +127 -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 +96 -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 +131 -0
- package/lib/xlsx/xlsx.js +774 -0
- package/lib/xlsx/xml/theme1.js +3 -0
- package/lib/xlsx/xml/theme1.xml +318 -0
- package/package.json +149 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"worksheet-writer.js","names":["_","require","RelType","colCache","Encryptor","Dimensions","StringBuf","Row","Column","SheetRelsWriter","SheetCommentsWriter","DataValidations","xmlBuffer","ListXform","DataValidationsXform","SheetPropertiesXform","SheetFormatPropertiesXform","ColXform","RowXform","HyperlinkXform","SheetViewXform","SheetProtectionXform","PageMarginsXform","PageSetupXform","AutoFilterXform","PictureXform","ConditionalFormattingsXform","HeaderFooterXform","RowBreaksXform","xform","dataValidations","sheetProperties","sheetFormatProperties","columns","tag","length","childXform","row","hyperlinks","sheetViews","sheetProtection","pageMargins","pageSeteup","autoFilter","picture","conditionalFormattings","headerFooter","rowBreaks","WorksheetWriter","constructor","options","id","name","state","_rows","_columns","_keys","_merges","add","_sheetRelsWriter","_sheetCommentsWriter","_dimensions","_rowZero","committed","_formulae","_siFormulae","conditionalFormatting","properties","Object","assign","defaultRowHeight","dyDescent","outlineLevelCol","outlineLevelRow","differentFirst","differentOddEven","oddHeader","oddFooter","evenHeader","evenFooter","firstHeader","firstFooter","pageSetup","margins","left","right","top","bottom","header","footer","orientation","horizontalDpi","verticalDpi","fitToPage","fitToWidth","fitToHeight","scale","pageOrder","blackAndWhite","draft","cellComments","errors","paperSize","undefined","showRowColHeaders","showGridLines","horizontalCentered","verticalCentered","colBreaks","useSharedStrings","_workbook","workbook","hasComments","_views","views","_media","_writeOpenWorksheet","startedData","stream","_stream","_openStream","pause","destroy","Error","commit","forEach","cRow","_writeRow","_writeOpenSheetData","_writeCloseSheetData","_writeAutoFilter","_writeMergeCells","_writeHyperlinks","_writeConditionalFormatting","_writeDataValidations","_writeSheetProtection","_writePageMargins","_writePageSetup","_writeBackground","_writeHeaderFooter","_writeRowBreaks","_writeLegacyData","_writeCloseWorksheet","end","dimensions","value","_headerRowCount","reduce","pv","cv","headerCount","headers","Math","max","count","defn","column","push","getColumnKey","key","setColumnKey","deleteColumnKey","eachColumnKey","f","each","getColumn","c","col","l2n","n","_nextRow","eachRow","iteratee","includeEmpty","i","getRow","hasValues","number","_commitRow","found","shift","lastRow","findRow","rowNumber","index","addRow","values","findCell","r","address","getAddress","getCell","getCellEx","mergeCells","_len","arguments","cells","Array","_key","merge","intersects","master","j","addConditionalFormatting","cf","removeConditionalFormatting","filter","splice","Function","addBackgroundImage","imageId","_background","getBackgroundImageId","protect","password","Promise","resolve","sheet","spinCount","Number","isFinite","round","algorithmName","saltValue","randomBytes","toString","hashValue","convertPasswordToHash","unprotect","_write","text","reset","addText","write","_writeSheetProperties","xmlBuf","sheetPropertiesModel","outlineProperties","tabColor","toXml","_writeSheetFormatProperties","sheetFormatPropertiesModel","defaultColWidth","_writeColumns","cols","toModel","prepare","styles","height","model","sharedStrings","hyperlinksProxy","merges","formulae","siFormulae","comments","addComments","_hyperlinks","image","getImage","pictureId","addMedia","Target","Type","Image","rId","vmlRelId","_writeDimensions","module","exports"],"sources":["../../../../lib/stream/xlsx/worksheet-writer.js"],"sourcesContent":["const _ = require('../../utils/under-dash');\r\n\r\nconst RelType = require('../../xlsx/rel-type');\r\n\r\nconst colCache = require('../../utils/col-cache');\r\nconst Encryptor = require('../../utils/encryptor');\r\nconst Dimensions = require('../../doc/range');\r\nconst StringBuf = require('../../utils/string-buf');\r\n\r\nconst Row = require('../../doc/row');\r\nconst Column = require('../../doc/column');\r\n\r\nconst SheetRelsWriter = require('./sheet-rels-writer');\r\nconst SheetCommentsWriter = require('./sheet-comments-writer');\r\nconst DataValidations = require('../../doc/data-validations');\r\n\r\nconst xmlBuffer = new StringBuf();\r\n\r\n// ============================================================================================\r\n// Xforms\r\nconst ListXform = require('../../xlsx/xform/list-xform');\r\nconst DataValidationsXform = require('../../xlsx/xform/sheet/data-validations-xform');\r\nconst SheetPropertiesXform = require('../../xlsx/xform/sheet/sheet-properties-xform');\r\nconst SheetFormatPropertiesXform = require('../../xlsx/xform/sheet/sheet-format-properties-xform');\r\nconst ColXform = require('../../xlsx/xform/sheet/col-xform');\r\nconst RowXform = require('../../xlsx/xform/sheet/row-xform');\r\nconst HyperlinkXform = require('../../xlsx/xform/sheet/hyperlink-xform');\r\nconst SheetViewXform = require('../../xlsx/xform/sheet/sheet-view-xform');\r\nconst SheetProtectionXform = require('../../xlsx/xform/sheet/sheet-protection-xform');\r\nconst PageMarginsXform = require('../../xlsx/xform/sheet/page-margins-xform');\r\nconst PageSetupXform = require('../../xlsx/xform/sheet/page-setup-xform');\r\nconst AutoFilterXform = require('../../xlsx/xform/sheet/auto-filter-xform');\r\nconst PictureXform = require('../../xlsx/xform/sheet/picture-xform');\r\nconst ConditionalFormattingsXform = require('../../xlsx/xform/sheet/cf/conditional-formattings-xform');\r\nconst HeaderFooterXform = require('../../xlsx/xform/sheet/header-footer-xform');\r\nconst RowBreaksXform = require('../../xlsx/xform/sheet/row-breaks-xform');\r\n\r\n// since prepare and render are functional, we can use singletons\r\nconst xform = {\r\n dataValidations: new DataValidationsXform(),\r\n sheetProperties: new SheetPropertiesXform(),\r\n sheetFormatProperties: new SheetFormatPropertiesXform(),\r\n columns: new ListXform({tag: 'cols', length: false, childXform: new ColXform()}),\r\n row: new RowXform(),\r\n hyperlinks: new ListXform({tag: 'hyperlinks', length: false, childXform: new HyperlinkXform()}),\r\n sheetViews: new ListXform({tag: 'sheetViews', length: false, childXform: new SheetViewXform()}),\r\n sheetProtection: new SheetProtectionXform(),\r\n pageMargins: new PageMarginsXform(),\r\n pageSeteup: new PageSetupXform(),\r\n autoFilter: new AutoFilterXform(),\r\n picture: new PictureXform(),\r\n conditionalFormattings: new ConditionalFormattingsXform(),\r\n headerFooter: new HeaderFooterXform(),\r\n rowBreaks: new RowBreaksXform(),\r\n};\r\n\r\n// ============================================================================================\r\n\r\nclass WorksheetWriter {\r\n constructor(options) {\r\n // in a workbook, each sheet will have a number\r\n this.id = options.id;\r\n\r\n // and a name\r\n this.name = options.name || `Sheet${this.id}`;\r\n\r\n // add a state\r\n this.state = options.state || 'visible';\r\n\r\n // rows are stored here while they need to be worked on.\r\n // when they are committed, they will be deleted.\r\n this._rows = [];\r\n\r\n // column definitions\r\n this._columns = null;\r\n\r\n // column keys (addRow convenience): key ==> this._columns index\r\n this._keys = {};\r\n\r\n // keep a record of all row and column pageBreaks\r\n this._merges = [];\r\n this._merges.add = function() {}; // ignore cell instruction\r\n\r\n // keep record of all hyperlinks\r\n this._sheetRelsWriter = new SheetRelsWriter(options);\r\n\r\n this._sheetCommentsWriter = new SheetCommentsWriter(this, this._sheetRelsWriter, options);\r\n\r\n // keep a record of dimensions\r\n this._dimensions = new Dimensions();\r\n\r\n // first uncommitted row\r\n this._rowZero = 1;\r\n\r\n // committed flag\r\n this.committed = false;\r\n\r\n // for data validations\r\n this.dataValidations = new DataValidations();\r\n\r\n // for sharing formulae\r\n this._formulae = {};\r\n this._siFormulae = 0;\r\n\r\n // keep a record of conditionalFormattings\r\n this.conditionalFormatting = [];\r\n\r\n // keep a record of all row and column pageBreaks\r\n this.rowBreaks = [];\r\n\r\n // for default row height, outline levels, etc\r\n this.properties = Object.assign(\r\n {},\r\n {\r\n defaultRowHeight: 15,\r\n dyDescent: 55,\r\n outlineLevelCol: 0,\r\n outlineLevelRow: 0,\r\n },\r\n options.properties\r\n );\r\n\r\n this.headerFooter = Object.assign(\r\n {},\r\n {\r\n differentFirst: false,\r\n differentOddEven: false,\r\n oddHeader: null,\r\n oddFooter: null,\r\n evenHeader: null,\r\n evenFooter: null,\r\n firstHeader: null,\r\n firstFooter: null,\r\n },\r\n options.headerFooter\r\n );\r\n\r\n // for all things printing\r\n this.pageSetup = Object.assign(\r\n {},\r\n {\r\n margins: {left: 0.7, right: 0.7, top: 0.75, bottom: 0.75, header: 0.3, footer: 0.3},\r\n orientation: 'portrait',\r\n horizontalDpi: 4294967295,\r\n verticalDpi: 4294967295,\r\n fitToPage: !!(\r\n options.pageSetup &&\r\n (options.pageSetup.fitToWidth || options.pageSetup.fitToHeight) &&\r\n !options.pageSetup.scale\r\n ),\r\n pageOrder: 'downThenOver',\r\n blackAndWhite: false,\r\n draft: false,\r\n cellComments: 'None',\r\n errors: 'displayed',\r\n scale: 100,\r\n fitToWidth: 1,\r\n fitToHeight: 1,\r\n paperSize: undefined,\r\n showRowColHeaders: false,\r\n showGridLines: false,\r\n horizontalCentered: false,\r\n verticalCentered: false,\r\n rowBreaks: null,\r\n colBreaks: null,\r\n },\r\n options.pageSetup\r\n );\r\n\r\n // using shared strings creates a smaller xlsx file but may use more memory\r\n this.useSharedStrings = options.useSharedStrings || false;\r\n\r\n this._workbook = options.workbook;\r\n\r\n this.hasComments = false;\r\n\r\n // views\r\n this._views = options.views || [];\r\n\r\n // auto filter\r\n this.autoFilter = options.autoFilter || null;\r\n\r\n this._media = [];\r\n\r\n // worksheet protection\r\n this.sheetProtection = null;\r\n\r\n // start writing to stream now\r\n this._writeOpenWorksheet();\r\n\r\n this.startedData = false;\r\n }\r\n\r\n get workbook() {\r\n return this._workbook;\r\n }\r\n\r\n get stream() {\r\n if (!this._stream) {\r\n // eslint-disable-next-line no-underscore-dangle\r\n this._stream = this._workbook._openStream(`/xl/worksheets/sheet${this.id}.xml`);\r\n\r\n // pause stream to prevent 'data' events\r\n this._stream.pause();\r\n }\r\n return this._stream;\r\n }\r\n\r\n // destroy - not a valid operation for a streaming writer\r\n // even though some streamers might be able to, it's a bad idea.\r\n destroy() {\r\n throw new Error('Invalid Operation: destroy');\r\n }\r\n\r\n commit() {\r\n if (this.committed) {\r\n return;\r\n }\r\n // commit all rows\r\n this._rows.forEach(cRow => {\r\n if (cRow) {\r\n // write the row to the stream\r\n this._writeRow(cRow);\r\n }\r\n });\r\n\r\n // we _cannot_ accept new rows from now on\r\n this._rows = null;\r\n\r\n if (!this.startedData) {\r\n this._writeOpenSheetData();\r\n }\r\n this._writeCloseSheetData();\r\n this._writeAutoFilter();\r\n this._writeMergeCells();\r\n\r\n // for some reason, Excel can't handle dimensions at the bottom of the file\r\n // this._writeDimensions();\r\n\r\n this._writeHyperlinks();\r\n this._writeConditionalFormatting();\r\n this._writeDataValidations();\r\n this._writeSheetProtection();\r\n this._writePageMargins();\r\n this._writePageSetup();\r\n this._writeBackground();\r\n this._writeHeaderFooter();\r\n this._writeRowBreaks();\r\n\r\n // Legacy Data tag for comments\r\n this._writeLegacyData();\r\n\r\n this._writeCloseWorksheet();\r\n // signal end of stream to workbook\r\n this.stream.end();\r\n\r\n this._sheetCommentsWriter.commit();\r\n // also commit the hyperlinks if any\r\n this._sheetRelsWriter.commit();\r\n\r\n this.committed = true;\r\n }\r\n\r\n // return the current dimensions of the writer\r\n get dimensions() {\r\n return this._dimensions;\r\n }\r\n\r\n get views() {\r\n return this._views;\r\n }\r\n\r\n // =========================================================================\r\n // Columns\r\n\r\n // get the current columns array.\r\n get columns() {\r\n return this._columns;\r\n }\r\n\r\n // set the columns from an array of column definitions.\r\n // Note: any headers defined will overwrite existing values.\r\n set columns(value) {\r\n // calculate max header row count\r\n this._headerRowCount = value.reduce((pv, cv) => {\r\n const headerCount = (cv.header && 1) || (cv.headers && cv.headers.length) || 0;\r\n return Math.max(pv, headerCount);\r\n }, 0);\r\n\r\n // construct Column objects\r\n let count = 1;\r\n const columns = (this._columns = []);\r\n value.forEach(defn => {\r\n const column = new Column(this, count++, false);\r\n columns.push(column);\r\n column.defn = defn;\r\n });\r\n }\r\n\r\n getColumnKey(key) {\r\n return this._keys[key];\r\n }\r\n\r\n setColumnKey(key, value) {\r\n this._keys[key] = value;\r\n }\r\n\r\n deleteColumnKey(key) {\r\n delete this._keys[key];\r\n }\r\n\r\n eachColumnKey(f) {\r\n _.each(this._keys, f);\r\n }\r\n\r\n // get a single column by col number. If it doesn't exist, it and any gaps before it\r\n // are created.\r\n getColumn(c) {\r\n if (typeof c === 'string') {\r\n // if it matches a key'd column, return that\r\n const col = this._keys[c];\r\n if (col) return col;\r\n\r\n // otherwise, assume letter\r\n c = colCache.l2n(c);\r\n }\r\n if (!this._columns) {\r\n this._columns = [];\r\n }\r\n if (c > this._columns.length) {\r\n let n = this._columns.length + 1;\r\n while (n <= c) {\r\n this._columns.push(new Column(this, n++));\r\n }\r\n }\r\n return this._columns[c - 1];\r\n }\r\n\r\n // =========================================================================\r\n // Rows\r\n get _nextRow() {\r\n return this._rowZero + this._rows.length;\r\n }\r\n\r\n // iterate over every uncommitted row in the worksheet, including maybe empty rows\r\n eachRow(options, iteratee) {\r\n if (!iteratee) {\r\n iteratee = options;\r\n options = undefined;\r\n }\r\n if (options && options.includeEmpty) {\r\n const n = this._nextRow;\r\n for (let i = this._rowZero; i < n; i++) {\r\n iteratee(this.getRow(i), i);\r\n }\r\n } else {\r\n this._rows.forEach(row => {\r\n if (row.hasValues) {\r\n iteratee(row, row.number);\r\n }\r\n });\r\n }\r\n }\r\n\r\n _commitRow(cRow) {\r\n // since rows must be written in order, we commit all rows up till and including cRow\r\n let found = false;\r\n while (this._rows.length && !found) {\r\n const row = this._rows.shift();\r\n this._rowZero++;\r\n if (row) {\r\n this._writeRow(row);\r\n found = row.number === cRow.number;\r\n this._rowZero = row.number + 1;\r\n }\r\n }\r\n }\r\n\r\n get lastRow() {\r\n // returns last uncommitted row\r\n if (this._rows.length) {\r\n return this._rows[this._rows.length - 1];\r\n }\r\n return undefined;\r\n }\r\n\r\n // find a row (if exists) by row number\r\n findRow(rowNumber) {\r\n const index = rowNumber - this._rowZero;\r\n return this._rows[index];\r\n }\r\n\r\n getRow(rowNumber) {\r\n const index = rowNumber - this._rowZero;\r\n\r\n // may fail if rows have been comitted\r\n if (index < 0) {\r\n throw new Error('Out of bounds: this row has been committed');\r\n }\r\n let row = this._rows[index];\r\n if (!row) {\r\n this._rows[index] = row = new Row(this, rowNumber);\r\n }\r\n return row;\r\n }\r\n\r\n addRow(value) {\r\n const row = new Row(this, this._nextRow);\r\n this._rows[row.number - this._rowZero] = row;\r\n row.values = value;\r\n return row;\r\n }\r\n\r\n // ================================================================================\r\n // Cells\r\n\r\n // returns the cell at [r,c] or address given by r. If not found, return undefined\r\n findCell(r, c) {\r\n const address = colCache.getAddress(r, c);\r\n const row = this.findRow(address.row);\r\n return row ? row.findCell(address.column) : undefined;\r\n }\r\n\r\n // return the cell at [r,c] or address given by r. If not found, create a new one.\r\n getCell(r, c) {\r\n const address = colCache.getAddress(r, c);\r\n const row = this.getRow(address.row);\r\n return row.getCellEx(address);\r\n }\r\n\r\n mergeCells(...cells) {\r\n // may fail if rows have been comitted\r\n const dimensions = new Dimensions(cells);\r\n\r\n // check cells aren't already merged\r\n this._merges.forEach(merge => {\r\n if (merge.intersects(dimensions)) {\r\n throw new Error('Cannot merge already merged cells');\r\n }\r\n });\r\n\r\n // apply merge\r\n const master = this.getCell(dimensions.top, dimensions.left);\r\n for (let i = dimensions.top; i <= dimensions.bottom; i++) {\r\n for (let j = dimensions.left; j <= dimensions.right; j++) {\r\n if (i > dimensions.top || j > dimensions.left) {\r\n this.getCell(i, j).merge(master);\r\n }\r\n }\r\n }\r\n\r\n // index merge\r\n this._merges.push(dimensions);\r\n }\r\n\r\n // ===========================================================================\r\n // Conditional Formatting\r\n addConditionalFormatting(cf) {\r\n this.conditionalFormatting.push(cf);\r\n }\r\n\r\n removeConditionalFormatting(filter) {\r\n if (typeof filter === 'number') {\r\n this.conditionalFormatting.splice(filter, 1);\r\n } else if (filter instanceof Function) {\r\n this.conditionalFormatting = this.conditionalFormatting.filter(filter);\r\n } else {\r\n this.conditionalFormatting = [];\r\n }\r\n }\r\n\r\n // =========================================================================\r\n\r\n addBackgroundImage(imageId) {\r\n this._background = {\r\n imageId,\r\n };\r\n }\r\n\r\n getBackgroundImageId() {\r\n return this._background && this._background.imageId;\r\n }\r\n\r\n // =========================================================================\r\n // Worksheet Protection\r\n protect(password, options) {\r\n // TODO: make this function truly async\r\n // perhaps marshal to worker thread or something\r\n return new Promise(resolve => {\r\n this.sheetProtection = {\r\n sheet: true,\r\n };\r\n if (options && 'spinCount' in options) {\r\n // force spinCount to be integer >= 0\r\n options.spinCount = Number.isFinite(options.spinCount) ? Math.round(Math.max(0, options.spinCount)) : 100000;\r\n }\r\n if (password) {\r\n this.sheetProtection.algorithmName = 'SHA-512';\r\n this.sheetProtection.saltValue = Encryptor.randomBytes(16).toString('base64');\r\n this.sheetProtection.spinCount = options && 'spinCount' in options ? options.spinCount : 100000; // allow user specified spinCount\r\n this.sheetProtection.hashValue = Encryptor.convertPasswordToHash(\r\n password,\r\n 'SHA512',\r\n this.sheetProtection.saltValue,\r\n this.sheetProtection.spinCount\r\n );\r\n }\r\n if (options) {\r\n this.sheetProtection = Object.assign(this.sheetProtection, options);\r\n if (!password && 'spinCount' in options) {\r\n delete this.sheetProtection.spinCount;\r\n }\r\n }\r\n resolve();\r\n });\r\n }\r\n\r\n unprotect() {\r\n this.sheetProtection = null;\r\n }\r\n\r\n // ================================================================================\r\n\r\n _write(text) {\r\n xmlBuffer.reset();\r\n xmlBuffer.addText(text);\r\n this.stream.write(xmlBuffer);\r\n }\r\n\r\n _writeSheetProperties(xmlBuf, properties, pageSetup) {\r\n const sheetPropertiesModel = {\r\n outlineProperties: properties && properties.outlineProperties,\r\n tabColor: properties && properties.tabColor,\r\n pageSetup:\r\n pageSetup && pageSetup.fitToPage\r\n ? {\r\n fitToPage: pageSetup.fitToPage,\r\n }\r\n : undefined,\r\n };\r\n\r\n xmlBuf.addText(xform.sheetProperties.toXml(sheetPropertiesModel));\r\n }\r\n\r\n _writeSheetFormatProperties(xmlBuf, properties) {\r\n const sheetFormatPropertiesModel = properties\r\n ? {\r\n defaultRowHeight: properties.defaultRowHeight,\r\n dyDescent: properties.dyDescent,\r\n outlineLevelCol: properties.outlineLevelCol,\r\n outlineLevelRow: properties.outlineLevelRow,\r\n }\r\n : undefined;\r\n if (properties.defaultColWidth) {\r\n sheetFormatPropertiesModel.defaultColWidth = properties.defaultColWidth;\r\n }\r\n\r\n xmlBuf.addText(xform.sheetFormatProperties.toXml(sheetFormatPropertiesModel));\r\n }\r\n\r\n _writeOpenWorksheet() {\r\n xmlBuffer.reset();\r\n\r\n xmlBuffer.addText('<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>');\r\n xmlBuffer.addText(\r\n '<worksheet xmlns=\"http://schemas.openxmlformats.org/spreadsheetml/2006/main\"' +\r\n ' xmlns:r=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships\"' +\r\n ' xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\"' +\r\n ' mc:Ignorable=\"x14ac\"' +\r\n ' xmlns:x14ac=\"http://schemas.microsoft.com/office/spreadsheetml/2009/9/ac\">'\r\n );\r\n\r\n this._writeSheetProperties(xmlBuffer, this.properties, this.pageSetup);\r\n\r\n xmlBuffer.addText(xform.sheetViews.toXml(this.views));\r\n\r\n this._writeSheetFormatProperties(xmlBuffer, this.properties);\r\n\r\n this.stream.write(xmlBuffer);\r\n }\r\n\r\n _writeColumns() {\r\n const cols = Column.toModel(this.columns);\r\n if (cols) {\r\n xform.columns.prepare(cols, {styles: this._workbook.styles});\r\n this.stream.write(xform.columns.toXml(cols));\r\n }\r\n }\r\n\r\n _writeOpenSheetData() {\r\n this._write('<sheetData>');\r\n }\r\n\r\n _writeRow(row) {\r\n if (!this.startedData) {\r\n this._writeColumns();\r\n this._writeOpenSheetData();\r\n this.startedData = true;\r\n }\r\n\r\n if (row.hasValues || row.height) {\r\n const {model} = row;\r\n const options = {\r\n styles: this._workbook.styles,\r\n sharedStrings: this.useSharedStrings ? this._workbook.sharedStrings : undefined,\r\n hyperlinks: this._sheetRelsWriter.hyperlinksProxy,\r\n merges: this._merges,\r\n formulae: this._formulae,\r\n siFormulae: this._siFormulae,\r\n comments: [],\r\n };\r\n xform.row.prepare(model, options);\r\n this.stream.write(xform.row.toXml(model));\r\n\r\n if (options.comments.length) {\r\n this.hasComments = true;\r\n this._sheetCommentsWriter.addComments(options.comments);\r\n }\r\n }\r\n }\r\n\r\n _writeCloseSheetData() {\r\n this._write('</sheetData>');\r\n }\r\n\r\n _writeMergeCells() {\r\n if (this._merges.length) {\r\n xmlBuffer.reset();\r\n xmlBuffer.addText(`<mergeCells count=\"${this._merges.length}\">`);\r\n this._merges.forEach(merge => {\r\n xmlBuffer.addText(`<mergeCell ref=\"${merge}\"/>`);\r\n });\r\n xmlBuffer.addText('</mergeCells>');\r\n\r\n this.stream.write(xmlBuffer);\r\n }\r\n }\r\n\r\n _writeHyperlinks() {\r\n // eslint-disable-next-line no-underscore-dangle\r\n this.stream.write(xform.hyperlinks.toXml(this._sheetRelsWriter._hyperlinks));\r\n }\r\n\r\n _writeConditionalFormatting() {\r\n const options = {\r\n styles: this._workbook.styles,\r\n };\r\n xform.conditionalFormattings.prepare(this.conditionalFormatting, options);\r\n this.stream.write(xform.conditionalFormattings.toXml(this.conditionalFormatting));\r\n }\r\n\r\n _writeRowBreaks() {\r\n this.stream.write(xform.rowBreaks.toXml(this.rowBreaks));\r\n }\r\n\r\n _writeDataValidations() {\r\n this.stream.write(xform.dataValidations.toXml(this.dataValidations.model));\r\n }\r\n\r\n _writeSheetProtection() {\r\n this.stream.write(xform.sheetProtection.toXml(this.sheetProtection));\r\n }\r\n\r\n _writePageMargins() {\r\n this.stream.write(xform.pageMargins.toXml(this.pageSetup.margins));\r\n }\r\n\r\n _writePageSetup() {\r\n this.stream.write(xform.pageSeteup.toXml(this.pageSetup));\r\n }\r\n\r\n _writeHeaderFooter() {\r\n this.stream.write(xform.headerFooter.toXml(this.headerFooter));\r\n }\r\n\r\n _writeAutoFilter() {\r\n this.stream.write(xform.autoFilter.toXml(this.autoFilter));\r\n }\r\n\r\n _writeBackground() {\r\n if (this._background) {\r\n if (this._background.imageId !== undefined) {\r\n const image = this._workbook.getImage(this._background.imageId);\r\n const pictureId = this._sheetRelsWriter.addMedia({\r\n Target: `../media/${image.name}`,\r\n Type: RelType.Image,\r\n });\r\n\r\n this._background = {\r\n ...this._background,\r\n rId: pictureId,\r\n };\r\n }\r\n this.stream.write(xform.picture.toXml({rId: this._background.rId}));\r\n }\r\n }\r\n\r\n _writeLegacyData() {\r\n if (this.hasComments) {\r\n xmlBuffer.reset();\r\n xmlBuffer.addText(`<legacyDrawing r:id=\"${this._sheetCommentsWriter.vmlRelId}\"/>`);\r\n this.stream.write(xmlBuffer);\r\n }\r\n }\r\n\r\n _writeDimensions() {\r\n // for some reason, Excel can't handle dimensions at the bottom of the file\r\n // and we don't know the dimensions until the commit, so don't write them.\r\n // this._write('<dimension ref=\"' + this._dimensions + '\"/>');\r\n }\r\n\r\n _writeCloseWorksheet() {\r\n this._write('</worksheet>');\r\n }\r\n}\r\n\r\nmodule.exports = WorksheetWriter;\r\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
const {
|
|
4
|
+
EventEmitter
|
|
5
|
+
} = require('events');
|
|
6
|
+
|
|
7
|
+
// =============================================================================
|
|
8
|
+
// AutoDrain - kind of /dev/null
|
|
9
|
+
class AutoDrain extends EventEmitter {
|
|
10
|
+
write(chunk) {
|
|
11
|
+
this.emit('data', chunk);
|
|
12
|
+
}
|
|
13
|
+
end() {
|
|
14
|
+
this.emit('end');
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
module.exports = AutoDrain;
|
|
18
|
+
//# sourceMappingURL=auto-drain.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auto-drain.js","names":["EventEmitter","require","AutoDrain","write","chunk","emit","end","module","exports"],"sources":["../../../lib/utils/auto-drain.js"],"sourcesContent":["const {EventEmitter} = require('events');\r\n\r\n// =============================================================================\r\n// AutoDrain - kind of /dev/null\r\nclass AutoDrain extends EventEmitter {\r\n write(chunk) {\r\n this.emit('data', chunk);\r\n }\r\n\r\n end() {\r\n this.emit('end');\r\n }\r\n}\r\n\r\nmodule.exports = AutoDrain;\r\n"],"mappings":";;AAAA,MAAM;EAACA;AAAY,CAAC,GAAGC,OAAO,CAAC,QAAQ,CAAC;;AAExC;AACA;AACA,MAAMC,SAAS,SAASF,YAAY,CAAC;EACnCG,KAAKA,CAACC,KAAK,EAAE;IACX,IAAI,CAACC,IAAI,CAAC,MAAM,EAAED,KAAK,CAAC;EAC1B;EAEAE,GAAGA,CAAA,EAAG;IACJ,IAAI,CAACD,IAAI,CAAC,KAAK,CAAC;EAClB;AACF;AAEAE,MAAM,CAACC,OAAO,GAAGN,SAAS","ignoreList":[]}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
// eslint-disable-next-line node/no-unsupported-features/node-builtins
|
|
4
|
+
const textDecoder = typeof TextDecoder === 'undefined' ? null : new TextDecoder('utf-8');
|
|
5
|
+
function bufferToString(chunk) {
|
|
6
|
+
if (typeof chunk === 'string') {
|
|
7
|
+
return chunk;
|
|
8
|
+
}
|
|
9
|
+
if (textDecoder) {
|
|
10
|
+
return textDecoder.decode(chunk);
|
|
11
|
+
}
|
|
12
|
+
return chunk.toString();
|
|
13
|
+
}
|
|
14
|
+
exports.bufferToString = bufferToString;
|
|
15
|
+
//# sourceMappingURL=browser-buffer-decode.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"browser-buffer-decode.js","names":["textDecoder","TextDecoder","bufferToString","chunk","decode","toString","exports"],"sources":["../../../lib/utils/browser-buffer-decode.js"],"sourcesContent":["// eslint-disable-next-line node/no-unsupported-features/node-builtins\r\nconst textDecoder = typeof TextDecoder === 'undefined' ? null : new TextDecoder('utf-8');\r\n\r\nfunction bufferToString(chunk) {\r\n if (typeof chunk === 'string') {\r\n return chunk;\r\n }\r\n if (textDecoder) {\r\n return textDecoder.decode(chunk);\r\n }\r\n return chunk.toString();\r\n}\r\n\r\nexports.bufferToString = bufferToString;\r\n"],"mappings":";;AAAA;AACA,MAAMA,WAAW,GAAG,OAAOC,WAAW,KAAK,WAAW,GAAG,IAAI,GAAG,IAAIA,WAAW,CAAC,OAAO,CAAC;AAExF,SAASC,cAAcA,CAACC,KAAK,EAAE;EAC7B,IAAI,OAAOA,KAAK,KAAK,QAAQ,EAAE;IAC7B,OAAOA,KAAK;EACd;EACA,IAAIH,WAAW,EAAE;IACf,OAAOA,WAAW,CAACI,MAAM,CAACD,KAAK,CAAC;EAClC;EACA,OAAOA,KAAK,CAACE,QAAQ,CAAC,CAAC;AACzB;AAEAC,OAAO,CAACJ,cAAc,GAAGA,cAAc","ignoreList":[]}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
// eslint-disable-next-line node/no-unsupported-features/node-builtins
|
|
4
|
+
const textEncoder = typeof TextEncoder === 'undefined' ? null : new TextEncoder('utf-8');
|
|
5
|
+
const {
|
|
6
|
+
Buffer
|
|
7
|
+
} = require('buffer');
|
|
8
|
+
function stringToBuffer(str) {
|
|
9
|
+
if (typeof str !== 'string') {
|
|
10
|
+
return str;
|
|
11
|
+
}
|
|
12
|
+
if (textEncoder) {
|
|
13
|
+
return Buffer.from(textEncoder.encode(str).buffer);
|
|
14
|
+
}
|
|
15
|
+
return Buffer.from(str);
|
|
16
|
+
}
|
|
17
|
+
exports.stringToBuffer = stringToBuffer;
|
|
18
|
+
//# sourceMappingURL=browser-buffer-encode.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"browser-buffer-encode.js","names":["textEncoder","TextEncoder","Buffer","require","stringToBuffer","str","from","encode","buffer","exports"],"sources":["../../../lib/utils/browser-buffer-encode.js"],"sourcesContent":["// eslint-disable-next-line node/no-unsupported-features/node-builtins\r\nconst textEncoder = typeof TextEncoder === 'undefined' ? null : new TextEncoder('utf-8');\r\nconst {Buffer} = require('buffer');\r\n\r\nfunction stringToBuffer(str) {\r\n if (typeof str !== 'string') {\r\n return str;\r\n }\r\n if (textEncoder) {\r\n return Buffer.from(textEncoder.encode(str).buffer);\r\n }\r\n return Buffer.from(str);\r\n}\r\n\r\nexports.stringToBuffer = stringToBuffer;\r\n"],"mappings":";;AAAA;AACA,MAAMA,WAAW,GAAG,OAAOC,WAAW,KAAK,WAAW,GAAG,IAAI,GAAG,IAAIA,WAAW,CAAC,OAAO,CAAC;AACxF,MAAM;EAACC;AAAM,CAAC,GAAGC,OAAO,CAAC,QAAQ,CAAC;AAElC,SAASC,cAAcA,CAACC,GAAG,EAAE;EAC3B,IAAI,OAAOA,GAAG,KAAK,QAAQ,EAAE;IAC3B,OAAOA,GAAG;EACZ;EACA,IAAIL,WAAW,EAAE;IACf,OAAOE,MAAM,CAACI,IAAI,CAACN,WAAW,CAACO,MAAM,CAACF,GAAG,CAAC,CAACG,MAAM,CAAC;EACpD;EACA,OAAON,MAAM,CAACI,IAAI,CAACD,GAAG,CAAC;AACzB;AAEAI,OAAO,CAACL,cAAc,GAAGA,cAAc","ignoreList":[]}
|
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
const _ = require('./under-dash');
|
|
4
|
+
const colCache = require('./col-cache');
|
|
5
|
+
class CellMatrix {
|
|
6
|
+
constructor(template) {
|
|
7
|
+
this.template = template;
|
|
8
|
+
this.sheets = {};
|
|
9
|
+
}
|
|
10
|
+
addCell(addressStr) {
|
|
11
|
+
this.addCellEx(colCache.decodeEx(addressStr));
|
|
12
|
+
}
|
|
13
|
+
getCell(addressStr) {
|
|
14
|
+
return this.findCellEx(colCache.decodeEx(addressStr), true);
|
|
15
|
+
}
|
|
16
|
+
findCell(addressStr) {
|
|
17
|
+
return this.findCellEx(colCache.decodeEx(addressStr), false);
|
|
18
|
+
}
|
|
19
|
+
findCellAt(sheetName, rowNumber, colNumber) {
|
|
20
|
+
const sheet = this.sheets[sheetName];
|
|
21
|
+
const row = sheet && sheet[rowNumber];
|
|
22
|
+
return row && row[colNumber];
|
|
23
|
+
}
|
|
24
|
+
addCellEx(address) {
|
|
25
|
+
if (address.top) {
|
|
26
|
+
for (let row = address.top; row <= address.bottom; row++) {
|
|
27
|
+
for (let col = address.left; col <= address.right; col++) {
|
|
28
|
+
this.getCellAt(address.sheetName, row, col);
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
} else {
|
|
32
|
+
this.findCellEx(address, true);
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
getCellEx(address) {
|
|
36
|
+
return this.findCellEx(address, true);
|
|
37
|
+
}
|
|
38
|
+
findCellEx(address, create) {
|
|
39
|
+
const sheet = this.findSheet(address, create);
|
|
40
|
+
const row = this.findSheetRow(sheet, address, create);
|
|
41
|
+
return this.findRowCell(row, address, create);
|
|
42
|
+
}
|
|
43
|
+
getCellAt(sheetName, rowNumber, colNumber) {
|
|
44
|
+
const sheet = this.sheets[sheetName] || (this.sheets[sheetName] = []);
|
|
45
|
+
const row = sheet[rowNumber] || (sheet[rowNumber] = []);
|
|
46
|
+
const cell = row[colNumber] || (row[colNumber] = {
|
|
47
|
+
sheetName,
|
|
48
|
+
address: colCache.n2l(colNumber) + rowNumber,
|
|
49
|
+
row: rowNumber,
|
|
50
|
+
col: colNumber
|
|
51
|
+
});
|
|
52
|
+
return cell;
|
|
53
|
+
}
|
|
54
|
+
removeCellEx(address) {
|
|
55
|
+
const sheet = this.findSheet(address);
|
|
56
|
+
if (!sheet) {
|
|
57
|
+
return;
|
|
58
|
+
}
|
|
59
|
+
const row = this.findSheetRow(sheet, address);
|
|
60
|
+
if (!row) {
|
|
61
|
+
return;
|
|
62
|
+
}
|
|
63
|
+
delete row[address.col];
|
|
64
|
+
}
|
|
65
|
+
forEachInSheet(sheetName, callback) {
|
|
66
|
+
const sheet = this.sheets[sheetName];
|
|
67
|
+
if (sheet) {
|
|
68
|
+
sheet.forEach((row, rowNumber) => {
|
|
69
|
+
if (row) {
|
|
70
|
+
row.forEach((cell, colNumber) => {
|
|
71
|
+
if (cell) {
|
|
72
|
+
callback(cell, rowNumber, colNumber);
|
|
73
|
+
}
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
forEach(callback) {
|
|
80
|
+
_.each(this.sheets, (sheet, sheetName) => {
|
|
81
|
+
this.forEachInSheet(sheetName, callback);
|
|
82
|
+
});
|
|
83
|
+
}
|
|
84
|
+
map(callback) {
|
|
85
|
+
const results = [];
|
|
86
|
+
this.forEach(cell => {
|
|
87
|
+
results.push(callback(cell));
|
|
88
|
+
});
|
|
89
|
+
return results;
|
|
90
|
+
}
|
|
91
|
+
findSheet(address, create) {
|
|
92
|
+
const name = address.sheetName;
|
|
93
|
+
if (this.sheets[name]) {
|
|
94
|
+
return this.sheets[name];
|
|
95
|
+
}
|
|
96
|
+
if (create) {
|
|
97
|
+
return this.sheets[name] = [];
|
|
98
|
+
}
|
|
99
|
+
return undefined;
|
|
100
|
+
}
|
|
101
|
+
findSheetRow(sheet, address, create) {
|
|
102
|
+
const {
|
|
103
|
+
row
|
|
104
|
+
} = address;
|
|
105
|
+
if (sheet && sheet[row]) {
|
|
106
|
+
return sheet[row];
|
|
107
|
+
}
|
|
108
|
+
if (create) {
|
|
109
|
+
return sheet[row] = [];
|
|
110
|
+
}
|
|
111
|
+
return undefined;
|
|
112
|
+
}
|
|
113
|
+
findRowCell(row, address, create) {
|
|
114
|
+
const {
|
|
115
|
+
col
|
|
116
|
+
} = address;
|
|
117
|
+
if (row && row[col]) {
|
|
118
|
+
return row[col];
|
|
119
|
+
}
|
|
120
|
+
if (create) {
|
|
121
|
+
return row[col] = this.template ? Object.assign(address, JSON.parse(JSON.stringify(this.template))) : address;
|
|
122
|
+
}
|
|
123
|
+
return undefined;
|
|
124
|
+
}
|
|
125
|
+
spliceRows(sheetName, start, numDelete, numInsert) {
|
|
126
|
+
const sheet = this.sheets[sheetName];
|
|
127
|
+
if (sheet) {
|
|
128
|
+
const inserts = [];
|
|
129
|
+
for (let i = 0; i < numInsert; i++) {
|
|
130
|
+
inserts.push([]);
|
|
131
|
+
}
|
|
132
|
+
sheet.splice(start, numDelete, ...inserts);
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
spliceColumns(sheetName, start, numDelete, numInsert) {
|
|
136
|
+
const sheet = this.sheets[sheetName];
|
|
137
|
+
if (sheet) {
|
|
138
|
+
const inserts = [];
|
|
139
|
+
for (let i = 0; i < numInsert; i++) {
|
|
140
|
+
inserts.push(null);
|
|
141
|
+
}
|
|
142
|
+
_.each(sheet, row => {
|
|
143
|
+
row.splice(start, numDelete, ...inserts);
|
|
144
|
+
});
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
module.exports = CellMatrix;
|
|
149
|
+
//# sourceMappingURL=cell-matrix.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cell-matrix.js","names":["_","require","colCache","CellMatrix","constructor","template","sheets","addCell","addressStr","addCellEx","decodeEx","getCell","findCellEx","findCell","findCellAt","sheetName","rowNumber","colNumber","sheet","row","address","top","bottom","col","left","right","getCellAt","getCellEx","create","findSheet","findSheetRow","findRowCell","cell","n2l","removeCellEx","forEachInSheet","callback","forEach","each","map","results","push","name","undefined","Object","assign","JSON","parse","stringify","spliceRows","start","numDelete","numInsert","inserts","i","splice","spliceColumns","module","exports"],"sources":["../../../lib/utils/cell-matrix.js"],"sourcesContent":["const _ = require('./under-dash');\r\nconst colCache = require('./col-cache');\r\n\r\nclass CellMatrix {\r\n constructor(template) {\r\n this.template = template;\r\n this.sheets = {};\r\n }\r\n\r\n addCell(addressStr) {\r\n this.addCellEx(colCache.decodeEx(addressStr));\r\n }\r\n\r\n getCell(addressStr) {\r\n return this.findCellEx(colCache.decodeEx(addressStr), true);\r\n }\r\n\r\n findCell(addressStr) {\r\n return this.findCellEx(colCache.decodeEx(addressStr), false);\r\n }\r\n\r\n findCellAt(sheetName, rowNumber, colNumber) {\r\n const sheet = this.sheets[sheetName];\r\n const row = sheet && sheet[rowNumber];\r\n return row && row[colNumber];\r\n }\r\n\r\n addCellEx(address) {\r\n if (address.top) {\r\n for (let row = address.top; row <= address.bottom; row++) {\r\n for (let col = address.left; col <= address.right; col++) {\r\n this.getCellAt(address.sheetName, row, col);\r\n }\r\n }\r\n } else {\r\n this.findCellEx(address, true);\r\n }\r\n }\r\n\r\n getCellEx(address) {\r\n return this.findCellEx(address, true);\r\n }\r\n\r\n findCellEx(address, create) {\r\n const sheet = this.findSheet(address, create);\r\n const row = this.findSheetRow(sheet, address, create);\r\n return this.findRowCell(row, address, create);\r\n }\r\n\r\n getCellAt(sheetName, rowNumber, colNumber) {\r\n const sheet = this.sheets[sheetName] || (this.sheets[sheetName] = []);\r\n const row = sheet[rowNumber] || (sheet[rowNumber] = []);\r\n const cell =\r\n row[colNumber] ||\r\n (row[colNumber] = {\r\n sheetName,\r\n address: colCache.n2l(colNumber) + rowNumber,\r\n row: rowNumber,\r\n col: colNumber,\r\n });\r\n return cell;\r\n }\r\n\r\n removeCellEx(address) {\r\n const sheet = this.findSheet(address);\r\n if (!sheet) {\r\n return;\r\n }\r\n const row = this.findSheetRow(sheet, address);\r\n if (!row) {\r\n return;\r\n }\r\n delete row[address.col];\r\n }\r\n\r\n forEachInSheet(sheetName, callback) {\r\n const sheet = this.sheets[sheetName];\r\n if (sheet) {\r\n sheet.forEach((row, rowNumber) => {\r\n if (row) {\r\n row.forEach((cell, colNumber) => {\r\n if (cell) {\r\n callback(cell, rowNumber, colNumber);\r\n }\r\n });\r\n }\r\n });\r\n }\r\n }\r\n\r\n forEach(callback) {\r\n _.each(this.sheets, (sheet, sheetName) => {\r\n this.forEachInSheet(sheetName, callback);\r\n });\r\n }\r\n\r\n map(callback) {\r\n const results = [];\r\n this.forEach(cell => {\r\n results.push(callback(cell));\r\n });\r\n return results;\r\n }\r\n\r\n findSheet(address, create) {\r\n const name = address.sheetName;\r\n if (this.sheets[name]) {\r\n return this.sheets[name];\r\n }\r\n if (create) {\r\n return (this.sheets[name] = []);\r\n }\r\n return undefined;\r\n }\r\n\r\n findSheetRow(sheet, address, create) {\r\n const {row} = address;\r\n if (sheet && sheet[row]) {\r\n return sheet[row];\r\n }\r\n if (create) {\r\n return (sheet[row] = []);\r\n }\r\n return undefined;\r\n }\r\n\r\n findRowCell(row, address, create) {\r\n const {col} = address;\r\n if (row && row[col]) {\r\n return row[col];\r\n }\r\n if (create) {\r\n return (row[col] = this.template\r\n ? Object.assign(address, JSON.parse(JSON.stringify(this.template)))\r\n : address);\r\n }\r\n return undefined;\r\n }\r\n\r\n spliceRows(sheetName, start, numDelete, numInsert) {\r\n const sheet = this.sheets[sheetName];\r\n if (sheet) {\r\n const inserts = [];\r\n for (let i = 0; i < numInsert; i++) {\r\n inserts.push([]);\r\n }\r\n sheet.splice(start, numDelete, ...inserts);\r\n }\r\n }\r\n\r\n spliceColumns(sheetName, start, numDelete, numInsert) {\r\n const sheet = this.sheets[sheetName];\r\n if (sheet) {\r\n const inserts = [];\r\n for (let i = 0; i < numInsert; i++) {\r\n inserts.push(null);\r\n }\r\n _.each(sheet, row => {\r\n row.splice(start, numDelete, ...inserts);\r\n });\r\n }\r\n }\r\n}\r\n\r\nmodule.exports = CellMatrix;\r\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,258 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
const addressRegex = /^[A-Z]+\d+$/;
|
|
4
|
+
// =========================================================================
|
|
5
|
+
// Column Letter to Number conversion
|
|
6
|
+
const colCache = {
|
|
7
|
+
_dictionary: ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'],
|
|
8
|
+
_l2nFill: 0,
|
|
9
|
+
_l2n: {},
|
|
10
|
+
_n2l: [],
|
|
11
|
+
_level(n) {
|
|
12
|
+
if (n <= 26) {
|
|
13
|
+
return 1;
|
|
14
|
+
}
|
|
15
|
+
if (n <= 26 * 26) {
|
|
16
|
+
return 2;
|
|
17
|
+
}
|
|
18
|
+
return 3;
|
|
19
|
+
},
|
|
20
|
+
_fill(level) {
|
|
21
|
+
let c;
|
|
22
|
+
let v;
|
|
23
|
+
let l1;
|
|
24
|
+
let l2;
|
|
25
|
+
let l3;
|
|
26
|
+
let n = 1;
|
|
27
|
+
if (level >= 4) {
|
|
28
|
+
throw new Error('Out of bounds. Excel supports columns from 1 to 16384');
|
|
29
|
+
}
|
|
30
|
+
if (this._l2nFill < 1 && level >= 1) {
|
|
31
|
+
while (n <= 26) {
|
|
32
|
+
c = this._dictionary[n - 1];
|
|
33
|
+
this._n2l[n] = c;
|
|
34
|
+
this._l2n[c] = n;
|
|
35
|
+
n++;
|
|
36
|
+
}
|
|
37
|
+
this._l2nFill = 1;
|
|
38
|
+
}
|
|
39
|
+
if (this._l2nFill < 2 && level >= 2) {
|
|
40
|
+
n = 27;
|
|
41
|
+
while (n <= 26 + 26 * 26) {
|
|
42
|
+
v = n - (26 + 1);
|
|
43
|
+
l1 = v % 26;
|
|
44
|
+
l2 = Math.floor(v / 26);
|
|
45
|
+
c = this._dictionary[l2] + this._dictionary[l1];
|
|
46
|
+
this._n2l[n] = c;
|
|
47
|
+
this._l2n[c] = n;
|
|
48
|
+
n++;
|
|
49
|
+
}
|
|
50
|
+
this._l2nFill = 2;
|
|
51
|
+
}
|
|
52
|
+
if (this._l2nFill < 3 && level >= 3) {
|
|
53
|
+
n = 26 + 26 * 26 + 1;
|
|
54
|
+
while (n <= 16384) {
|
|
55
|
+
v = n - (26 * 26 + 26 + 1);
|
|
56
|
+
l1 = v % 26;
|
|
57
|
+
l2 = Math.floor(v / 26) % 26;
|
|
58
|
+
l3 = Math.floor(v / (26 * 26));
|
|
59
|
+
c = this._dictionary[l3] + this._dictionary[l2] + this._dictionary[l1];
|
|
60
|
+
this._n2l[n] = c;
|
|
61
|
+
this._l2n[c] = n;
|
|
62
|
+
n++;
|
|
63
|
+
}
|
|
64
|
+
this._l2nFill = 3;
|
|
65
|
+
}
|
|
66
|
+
},
|
|
67
|
+
l2n(l) {
|
|
68
|
+
if (!this._l2n[l]) {
|
|
69
|
+
this._fill(l.length);
|
|
70
|
+
}
|
|
71
|
+
if (!this._l2n[l]) {
|
|
72
|
+
throw new Error(`Out of bounds. Invalid column letter: ${l}`);
|
|
73
|
+
}
|
|
74
|
+
return this._l2n[l];
|
|
75
|
+
},
|
|
76
|
+
n2l(n) {
|
|
77
|
+
if (n < 1 || n > 16384) {
|
|
78
|
+
throw new Error(`${n} is out of bounds. Excel supports columns from 1 to 16384`);
|
|
79
|
+
}
|
|
80
|
+
if (!this._n2l[n]) {
|
|
81
|
+
this._fill(this._level(n));
|
|
82
|
+
}
|
|
83
|
+
return this._n2l[n];
|
|
84
|
+
},
|
|
85
|
+
// =========================================================================
|
|
86
|
+
// Address processing
|
|
87
|
+
_hash: {},
|
|
88
|
+
// check if value looks like an address
|
|
89
|
+
validateAddress(value) {
|
|
90
|
+
if (!addressRegex.test(value)) {
|
|
91
|
+
throw new Error(`Invalid Address: ${value}`);
|
|
92
|
+
}
|
|
93
|
+
return true;
|
|
94
|
+
},
|
|
95
|
+
// convert address string into structure
|
|
96
|
+
decodeAddress(value) {
|
|
97
|
+
const addr = value.length < 5 && this._hash[value];
|
|
98
|
+
if (addr) {
|
|
99
|
+
return addr;
|
|
100
|
+
}
|
|
101
|
+
let hasCol = false;
|
|
102
|
+
let col = '';
|
|
103
|
+
let colNumber = 0;
|
|
104
|
+
let hasRow = false;
|
|
105
|
+
let row = '';
|
|
106
|
+
let rowNumber = 0;
|
|
107
|
+
for (let i = 0, char; i < value.length; i++) {
|
|
108
|
+
char = value.charCodeAt(i);
|
|
109
|
+
// col should before row
|
|
110
|
+
if (!hasRow && char >= 65 && char <= 90) {
|
|
111
|
+
// 65 = 'A'.charCodeAt(0)
|
|
112
|
+
// 90 = 'Z'.charCodeAt(0)
|
|
113
|
+
hasCol = true;
|
|
114
|
+
col += value[i];
|
|
115
|
+
// colNumber starts from 1
|
|
116
|
+
colNumber = colNumber * 26 + char - 64;
|
|
117
|
+
} else if (char >= 48 && char <= 57) {
|
|
118
|
+
// 48 = '0'.charCodeAt(0)
|
|
119
|
+
// 57 = '9'.charCodeAt(0)
|
|
120
|
+
hasRow = true;
|
|
121
|
+
row += value[i];
|
|
122
|
+
// rowNumber starts from 0
|
|
123
|
+
rowNumber = rowNumber * 10 + char - 48;
|
|
124
|
+
} else if (hasRow && hasCol && char !== 36) {
|
|
125
|
+
// 36 = '$'.charCodeAt(0)
|
|
126
|
+
break;
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
if (!hasCol) {
|
|
130
|
+
colNumber = undefined;
|
|
131
|
+
} else if (colNumber > 16384) {
|
|
132
|
+
throw new Error(`Out of bounds. Invalid column letter: ${col}`);
|
|
133
|
+
}
|
|
134
|
+
if (!hasRow) {
|
|
135
|
+
rowNumber = undefined;
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
// in case $row$col
|
|
139
|
+
value = col + row;
|
|
140
|
+
const address = {
|
|
141
|
+
address: value,
|
|
142
|
+
col: colNumber,
|
|
143
|
+
row: rowNumber,
|
|
144
|
+
$col$row: `$${col}$${row}`
|
|
145
|
+
};
|
|
146
|
+
|
|
147
|
+
// mem fix - cache only the tl 100x100 square
|
|
148
|
+
if (colNumber <= 100 && rowNumber <= 100) {
|
|
149
|
+
this._hash[value] = address;
|
|
150
|
+
this._hash[address.$col$row] = address;
|
|
151
|
+
}
|
|
152
|
+
return address;
|
|
153
|
+
},
|
|
154
|
+
// convert r,c into structure (if only 1 arg, assume r is address string)
|
|
155
|
+
getAddress(r, c) {
|
|
156
|
+
if (c) {
|
|
157
|
+
const address = this.n2l(c) + r;
|
|
158
|
+
return this.decodeAddress(address);
|
|
159
|
+
}
|
|
160
|
+
return this.decodeAddress(r);
|
|
161
|
+
},
|
|
162
|
+
// convert [address], [tl:br] into address structures
|
|
163
|
+
decode(value) {
|
|
164
|
+
const parts = value.split(':');
|
|
165
|
+
if (parts.length === 2) {
|
|
166
|
+
const tl = this.decodeAddress(parts[0]);
|
|
167
|
+
const br = this.decodeAddress(parts[1]);
|
|
168
|
+
const result = {
|
|
169
|
+
top: Math.min(tl.row, br.row),
|
|
170
|
+
left: Math.min(tl.col, br.col),
|
|
171
|
+
bottom: Math.max(tl.row, br.row),
|
|
172
|
+
right: Math.max(tl.col, br.col)
|
|
173
|
+
};
|
|
174
|
+
// reconstruct tl, br and dimensions
|
|
175
|
+
result.tl = this.n2l(result.left) + result.top;
|
|
176
|
+
result.br = this.n2l(result.right) + result.bottom;
|
|
177
|
+
result.dimensions = `${result.tl}:${result.br}`;
|
|
178
|
+
return result;
|
|
179
|
+
}
|
|
180
|
+
return this.decodeAddress(value);
|
|
181
|
+
},
|
|
182
|
+
// convert [sheetName!][$]col[$]row[[$]col[$]row] into address or range structures
|
|
183
|
+
decodeEx(value) {
|
|
184
|
+
const groups = value.match(/(?:(?:(?:'((?:[^']|'')*)')|([^'^ !]*))!)?(.*)/);
|
|
185
|
+
const sheetName = groups[1] || groups[2]; // Qouted and unqouted groups
|
|
186
|
+
const reference = groups[3]; // Remaining address
|
|
187
|
+
|
|
188
|
+
const parts = reference.split(':');
|
|
189
|
+
if (parts.length > 1) {
|
|
190
|
+
let tl = this.decodeAddress(parts[0]);
|
|
191
|
+
let br = this.decodeAddress(parts[1]);
|
|
192
|
+
const top = Math.min(tl.row, br.row);
|
|
193
|
+
const left = Math.min(tl.col, br.col);
|
|
194
|
+
const bottom = Math.max(tl.row, br.row);
|
|
195
|
+
const right = Math.max(tl.col, br.col);
|
|
196
|
+
tl = this.n2l(left) + top;
|
|
197
|
+
br = this.n2l(right) + bottom;
|
|
198
|
+
return {
|
|
199
|
+
top,
|
|
200
|
+
left,
|
|
201
|
+
bottom,
|
|
202
|
+
right,
|
|
203
|
+
sheetName,
|
|
204
|
+
tl: {
|
|
205
|
+
address: tl,
|
|
206
|
+
col: left,
|
|
207
|
+
row: top,
|
|
208
|
+
$col$row: `$${this.n2l(left)}$${top}`,
|
|
209
|
+
sheetName
|
|
210
|
+
},
|
|
211
|
+
br: {
|
|
212
|
+
address: br,
|
|
213
|
+
col: right,
|
|
214
|
+
row: bottom,
|
|
215
|
+
$col$row: `$${this.n2l(right)}$${bottom}`,
|
|
216
|
+
sheetName
|
|
217
|
+
},
|
|
218
|
+
dimensions: `${tl}:${br}`
|
|
219
|
+
};
|
|
220
|
+
}
|
|
221
|
+
if (reference.startsWith('#')) {
|
|
222
|
+
return sheetName ? {
|
|
223
|
+
sheetName,
|
|
224
|
+
error: reference
|
|
225
|
+
} : {
|
|
226
|
+
error: reference
|
|
227
|
+
};
|
|
228
|
+
}
|
|
229
|
+
const address = this.decodeAddress(reference);
|
|
230
|
+
return sheetName ? {
|
|
231
|
+
sheetName,
|
|
232
|
+
...address
|
|
233
|
+
} : address;
|
|
234
|
+
},
|
|
235
|
+
// convert row,col into address string
|
|
236
|
+
encodeAddress(row, col) {
|
|
237
|
+
return colCache.n2l(col) + row;
|
|
238
|
+
},
|
|
239
|
+
// convert row,col into string address or t,l,b,r into range
|
|
240
|
+
encode() {
|
|
241
|
+
switch (arguments.length) {
|
|
242
|
+
case 2:
|
|
243
|
+
return colCache.encodeAddress(arguments[0], arguments[1]);
|
|
244
|
+
case 4:
|
|
245
|
+
return `${colCache.encodeAddress(arguments[0], arguments[1])}:${colCache.encodeAddress(arguments[2], arguments[3])}`;
|
|
246
|
+
default:
|
|
247
|
+
throw new Error('Can only encode with 2 or 4 arguments');
|
|
248
|
+
}
|
|
249
|
+
},
|
|
250
|
+
// return true if address is contained within range
|
|
251
|
+
inRange(range, address) {
|
|
252
|
+
const [left, top,, right, bottom] = range;
|
|
253
|
+
const [col, row] = address;
|
|
254
|
+
return col >= left && col <= right && row >= top && row <= bottom;
|
|
255
|
+
}
|
|
256
|
+
};
|
|
257
|
+
module.exports = colCache;
|
|
258
|
+
//# sourceMappingURL=col-cache.js.map
|