@cj-tech-master/excelts 5.0.6 → 5.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/browser/index.browser.d.ts +1 -1
- package/dist/browser/index.d.ts +1 -1
- package/dist/browser/modules/archive/unzip/stream.base.js +19 -19
- package/dist/browser/modules/archive/unzip/stream.browser.js +3 -3
- package/dist/browser/modules/csv/csv-core.js +6 -3
- package/dist/browser/modules/csv/csv.browser.js +2 -2
- package/dist/browser/modules/csv/csv.js +1 -1
- package/dist/browser/modules/excel/anchor.js +4 -4
- package/dist/browser/modules/excel/cell.js +5 -5
- package/dist/browser/modules/excel/column.js +4 -4
- package/dist/browser/modules/excel/defined-names.js +1 -1
- package/dist/browser/modules/excel/form-control.js +1 -1
- package/dist/browser/modules/excel/pivot-table.d.ts +168 -17
- package/dist/browser/modules/excel/pivot-table.js +278 -70
- package/dist/browser/modules/excel/row.js +4 -4
- package/dist/browser/modules/excel/stream/workbook-reader.browser.js +4 -4
- package/dist/browser/modules/excel/stream/workbook-writer.browser.js +4 -4
- package/dist/browser/modules/excel/stream/worksheet-reader.js +1 -1
- package/dist/browser/modules/excel/stream/worksheet-writer.js +4 -4
- package/dist/browser/modules/excel/table.js +2 -2
- package/dist/browser/modules/excel/types.d.ts +0 -4
- package/dist/browser/modules/excel/utils/cell-format.js +3 -3
- package/dist/browser/modules/excel/utils/shared-formula.js +1 -1
- package/dist/browser/modules/excel/utils/stream-buf.js +2 -2
- package/dist/browser/modules/excel/utils/string-buf.js +1 -1
- package/dist/browser/modules/excel/workbook.d.ts +0 -2
- package/dist/browser/modules/excel/workbook.js +4 -5
- package/dist/browser/modules/excel/worksheet.js +9 -9
- package/dist/browser/modules/excel/xlsx/xform/base-xform.d.ts +5 -5
- package/dist/browser/modules/excel/xlsx/xform/base-xform.js +1 -1
- package/dist/browser/modules/excel/xlsx/xform/book/defined-name-xform.js +2 -2
- package/dist/browser/modules/excel/xlsx/xform/book/workbook-view-xform.js +4 -4
- package/dist/browser/modules/excel/xlsx/xform/book/workbook-xform.js +16 -4
- package/dist/browser/modules/excel/xlsx/xform/comment/comment-xform.d.ts +1 -2
- package/dist/browser/modules/excel/xlsx/xform/comment/comments-xform.d.ts +1 -2
- package/dist/browser/modules/excel/xlsx/xform/comment/style/vml-position-xform.d.ts +3 -4
- package/dist/browser/modules/excel/xlsx/xform/comment/style/vml-position-xform.js +1 -1
- package/dist/browser/modules/excel/xlsx/xform/comment/style/vml-protection-xform.js +1 -1
- package/dist/browser/modules/excel/xlsx/xform/comment/vml-client-data-xform.d.ts +1 -2
- package/dist/browser/modules/excel/xlsx/xform/comment/vml-notes-xform.d.ts +1 -2
- package/dist/browser/modules/excel/xlsx/xform/comment/vml-shape-xform.js +1 -1
- package/dist/browser/modules/excel/xlsx/xform/comment/vml-textbox-xform.d.ts +1 -2
- package/dist/browser/modules/excel/xlsx/xform/comment/vml-textbox-xform.js +1 -1
- package/dist/browser/modules/excel/xlsx/xform/composite-xform.d.ts +1 -1
- package/dist/browser/modules/excel/xlsx/xform/core/app-xform.js +1 -1
- package/dist/browser/modules/excel/xlsx/xform/core/content-types-xform.js +24 -11
- package/dist/browser/modules/excel/xlsx/xform/drawing/base-cell-anchor-xform.js +1 -1
- package/dist/browser/modules/excel/xlsx/xform/drawing/blip-xform.d.ts +1 -2
- package/dist/browser/modules/excel/xlsx/xform/drawing/cell-position-xform.d.ts +1 -2
- package/dist/browser/modules/excel/xlsx/xform/drawing/ctrl-prop-xform.d.ts +1 -2
- package/dist/browser/modules/excel/xlsx/xform/drawing/drawing-xform.d.ts +1 -2
- package/dist/browser/modules/excel/xlsx/xform/drawing/ext-xform.d.ts +1 -2
- package/dist/browser/modules/excel/xlsx/xform/drawing/ext-xform.js +2 -2
- package/dist/browser/modules/excel/xlsx/xform/drawing/one-cell-anchor-xform.js +1 -1
- package/dist/browser/modules/excel/xlsx/xform/drawing/two-cell-anchor-xform.js +1 -1
- package/dist/browser/modules/excel/xlsx/xform/drawing/vml-drawing-xform.d.ts +1 -2
- package/dist/browser/modules/excel/xlsx/xform/list-xform.d.ts +1 -2
- package/dist/browser/modules/excel/xlsx/xform/list-xform.js +3 -3
- package/dist/browser/modules/excel/xlsx/xform/pivot-table/cache-field-xform.d.ts +5 -15
- package/dist/browser/modules/excel/xlsx/xform/pivot-table/cache-field-xform.js +134 -52
- package/dist/browser/modules/excel/xlsx/xform/pivot-table/cache-field.d.ts +14 -15
- package/dist/browser/modules/excel/xlsx/xform/pivot-table/cache-field.js +244 -70
- package/dist/browser/modules/excel/xlsx/xform/pivot-table/pivot-cache-definition-xform.d.ts +13 -29
- package/dist/browser/modules/excel/xlsx/xform/pivot-table/pivot-cache-definition-xform.js +213 -37
- package/dist/browser/modules/excel/xlsx/xform/pivot-table/pivot-cache-records-xform.d.ts +7 -34
- package/dist/browser/modules/excel/xlsx/xform/pivot-table/pivot-cache-records-xform.js +143 -41
- package/dist/browser/modules/excel/xlsx/xform/pivot-table/pivot-table-xform.d.ts +101 -27
- package/dist/browser/modules/excel/xlsx/xform/pivot-table/pivot-table-xform.js +793 -408
- package/dist/browser/modules/excel/xlsx/xform/pivot-table/raw-xml-collector.d.ts +78 -0
- package/dist/browser/modules/excel/xlsx/xform/pivot-table/raw-xml-collector.js +149 -0
- package/dist/browser/modules/excel/xlsx/xform/sheet/cell-xform.js +1 -1
- package/dist/browser/modules/excel/xlsx/xform/sheet/cf/cf-rule-xform.js +1 -1
- package/dist/browser/modules/excel/xlsx/xform/sheet/cf/conditional-formattings-xform.js +1 -1
- package/dist/browser/modules/excel/xlsx/xform/sheet/cf-ext/cf-rule-ext-xform.js +1 -1
- package/dist/browser/modules/excel/xlsx/xform/sheet/col-xform.js +3 -3
- package/dist/browser/modules/excel/xlsx/xform/sheet/data-validations-xform.js +3 -3
- package/dist/browser/modules/excel/xlsx/xform/sheet/header-footer-xform.js +6 -6
- package/dist/browser/modules/excel/xlsx/xform/sheet/page-setup-xform.js +11 -11
- package/dist/browser/modules/excel/xlsx/xform/sheet/row-xform.d.ts +1 -2
- package/dist/browser/modules/excel/xlsx/xform/sheet/sheet-format-properties-xform.js +3 -3
- package/dist/browser/modules/excel/xlsx/xform/sheet/sheet-view-xform.d.ts +1 -2
- package/dist/browser/modules/excel/xlsx/xform/sheet/sheet-view-xform.js +10 -10
- package/dist/browser/modules/excel/xlsx/xform/sheet/worksheet-xform.js +12 -12
- package/dist/browser/modules/excel/xlsx/xform/strings/phonetic-text-xform.js +2 -2
- package/dist/browser/modules/excel/xlsx/xform/style/color-xform.js +1 -1
- package/dist/browser/modules/excel/xlsx/xform/style/style-xform.js +5 -5
- package/dist/browser/modules/excel/xlsx/xform/table/auto-filter-xform.d.ts +1 -2
- package/dist/browser/modules/excel/xlsx/xform/table/custom-filter-xform.d.ts +1 -2
- package/dist/browser/modules/excel/xlsx/xform/table/filter-column-xform.d.ts +1 -2
- package/dist/browser/modules/excel/xlsx/xform/table/filter-xform.d.ts +1 -2
- package/dist/browser/modules/excel/xlsx/xform/table/table-column-xform.d.ts +1 -2
- package/dist/browser/modules/excel/xlsx/xform/table/table-style-info-xform.d.ts +1 -2
- package/dist/browser/modules/excel/xlsx/xform/table/table-xform.d.ts +1 -2
- package/dist/browser/modules/excel/xlsx/xlsx.browser.d.ts +5 -2
- package/dist/browser/modules/excel/xlsx/xlsx.browser.js +88 -54
- package/dist/browser/utils/env.d.ts +0 -5
- package/dist/browser/utils/env.js +0 -7
- package/dist/browser/utils/utils.base.d.ts +8 -13
- package/dist/browser/utils/utils.base.js +40 -47
- package/dist/browser/utils/utils.browser.d.ts +1 -1
- package/dist/browser/utils/utils.browser.js +1 -1
- package/dist/browser/utils/utils.d.ts +1 -1
- package/dist/browser/utils/utils.js +1 -1
- package/dist/cjs/modules/archive/unzip/stream.base.js +19 -19
- package/dist/cjs/modules/archive/unzip/stream.browser.js +3 -3
- package/dist/cjs/modules/csv/csv-core.js +6 -3
- package/dist/cjs/modules/csv/csv.browser.js +2 -2
- package/dist/cjs/modules/csv/csv.js +1 -1
- package/dist/cjs/modules/excel/anchor.js +4 -4
- package/dist/cjs/modules/excel/cell.js +5 -5
- package/dist/cjs/modules/excel/column.js +4 -4
- package/dist/cjs/modules/excel/defined-names.js +1 -1
- package/dist/cjs/modules/excel/form-control.js +1 -1
- package/dist/cjs/modules/excel/pivot-table.js +280 -70
- package/dist/cjs/modules/excel/row.js +4 -4
- package/dist/cjs/modules/excel/stream/workbook-reader.browser.js +4 -4
- package/dist/cjs/modules/excel/stream/workbook-writer.browser.js +4 -4
- package/dist/cjs/modules/excel/stream/worksheet-reader.js +1 -1
- package/dist/cjs/modules/excel/stream/worksheet-writer.js +4 -4
- package/dist/cjs/modules/excel/table.js +2 -2
- package/dist/cjs/modules/excel/utils/cell-format.js +3 -3
- package/dist/cjs/modules/excel/utils/shared-formula.js +1 -1
- package/dist/cjs/modules/excel/utils/stream-buf.js +2 -2
- package/dist/cjs/modules/excel/utils/string-buf.js +1 -1
- package/dist/cjs/modules/excel/workbook.js +4 -5
- package/dist/cjs/modules/excel/worksheet.js +9 -9
- package/dist/cjs/modules/excel/xlsx/xform/base-xform.js +1 -1
- package/dist/cjs/modules/excel/xlsx/xform/book/defined-name-xform.js +2 -2
- package/dist/cjs/modules/excel/xlsx/xform/book/workbook-view-xform.js +4 -4
- package/dist/cjs/modules/excel/xlsx/xform/book/workbook-xform.js +16 -4
- package/dist/cjs/modules/excel/xlsx/xform/comment/style/vml-position-xform.js +1 -1
- package/dist/cjs/modules/excel/xlsx/xform/comment/style/vml-protection-xform.js +1 -1
- package/dist/cjs/modules/excel/xlsx/xform/comment/vml-shape-xform.js +1 -1
- package/dist/cjs/modules/excel/xlsx/xform/comment/vml-textbox-xform.js +1 -1
- package/dist/cjs/modules/excel/xlsx/xform/core/app-xform.js +1 -1
- package/dist/cjs/modules/excel/xlsx/xform/core/content-types-xform.js +24 -11
- package/dist/cjs/modules/excel/xlsx/xform/drawing/base-cell-anchor-xform.js +1 -1
- package/dist/cjs/modules/excel/xlsx/xform/drawing/ext-xform.js +2 -2
- package/dist/cjs/modules/excel/xlsx/xform/drawing/one-cell-anchor-xform.js +1 -1
- package/dist/cjs/modules/excel/xlsx/xform/drawing/two-cell-anchor-xform.js +1 -1
- package/dist/cjs/modules/excel/xlsx/xform/list-xform.js +3 -3
- package/dist/cjs/modules/excel/xlsx/xform/pivot-table/cache-field-xform.js +133 -51
- package/dist/cjs/modules/excel/xlsx/xform/pivot-table/cache-field.js +245 -71
- package/dist/cjs/modules/excel/xlsx/xform/pivot-table/pivot-cache-definition-xform.js +212 -36
- package/dist/cjs/modules/excel/xlsx/xform/pivot-table/pivot-cache-records-xform.js +142 -40
- package/dist/cjs/modules/excel/xlsx/xform/pivot-table/pivot-table-xform.js +793 -408
- package/dist/cjs/modules/excel/xlsx/xform/pivot-table/raw-xml-collector.js +153 -0
- package/dist/cjs/modules/excel/xlsx/xform/sheet/cell-xform.js +1 -1
- package/dist/cjs/modules/excel/xlsx/xform/sheet/cf/cf-rule-xform.js +1 -1
- package/dist/cjs/modules/excel/xlsx/xform/sheet/cf/conditional-formattings-xform.js +1 -1
- package/dist/cjs/modules/excel/xlsx/xform/sheet/cf-ext/cf-rule-ext-xform.js +1 -1
- package/dist/cjs/modules/excel/xlsx/xform/sheet/col-xform.js +3 -3
- package/dist/cjs/modules/excel/xlsx/xform/sheet/data-validations-xform.js +3 -3
- package/dist/cjs/modules/excel/xlsx/xform/sheet/header-footer-xform.js +6 -6
- package/dist/cjs/modules/excel/xlsx/xform/sheet/page-setup-xform.js +11 -11
- package/dist/cjs/modules/excel/xlsx/xform/sheet/sheet-format-properties-xform.js +3 -3
- package/dist/cjs/modules/excel/xlsx/xform/sheet/sheet-view-xform.js +10 -10
- package/dist/cjs/modules/excel/xlsx/xform/sheet/worksheet-xform.js +12 -12
- package/dist/cjs/modules/excel/xlsx/xform/strings/phonetic-text-xform.js +2 -2
- package/dist/cjs/modules/excel/xlsx/xform/style/color-xform.js +1 -1
- package/dist/cjs/modules/excel/xlsx/xform/style/style-xform.js +5 -5
- package/dist/cjs/modules/excel/xlsx/xlsx.browser.js +88 -54
- package/dist/cjs/utils/env.js +0 -8
- package/dist/cjs/utils/utils.base.js +41 -54
- package/dist/cjs/utils/utils.browser.js +2 -7
- package/dist/cjs/utils/utils.js +2 -7
- package/dist/esm/modules/archive/unzip/stream.base.js +19 -19
- package/dist/esm/modules/archive/unzip/stream.browser.js +3 -3
- package/dist/esm/modules/csv/csv-core.js +6 -3
- package/dist/esm/modules/csv/csv.browser.js +2 -2
- package/dist/esm/modules/csv/csv.js +1 -1
- package/dist/esm/modules/excel/anchor.js +4 -4
- package/dist/esm/modules/excel/cell.js +5 -5
- package/dist/esm/modules/excel/column.js +4 -4
- package/dist/esm/modules/excel/defined-names.js +1 -1
- package/dist/esm/modules/excel/form-control.js +1 -1
- package/dist/esm/modules/excel/pivot-table.js +278 -70
- package/dist/esm/modules/excel/row.js +4 -4
- package/dist/esm/modules/excel/stream/workbook-reader.browser.js +4 -4
- package/dist/esm/modules/excel/stream/workbook-writer.browser.js +4 -4
- package/dist/esm/modules/excel/stream/worksheet-reader.js +1 -1
- package/dist/esm/modules/excel/stream/worksheet-writer.js +4 -4
- package/dist/esm/modules/excel/table.js +2 -2
- package/dist/esm/modules/excel/utils/cell-format.js +3 -3
- package/dist/esm/modules/excel/utils/shared-formula.js +1 -1
- package/dist/esm/modules/excel/utils/stream-buf.js +2 -2
- package/dist/esm/modules/excel/utils/string-buf.js +1 -1
- package/dist/esm/modules/excel/workbook.js +4 -5
- package/dist/esm/modules/excel/worksheet.js +9 -9
- package/dist/esm/modules/excel/xlsx/xform/base-xform.js +1 -1
- package/dist/esm/modules/excel/xlsx/xform/book/defined-name-xform.js +2 -2
- package/dist/esm/modules/excel/xlsx/xform/book/workbook-view-xform.js +4 -4
- package/dist/esm/modules/excel/xlsx/xform/book/workbook-xform.js +16 -4
- package/dist/esm/modules/excel/xlsx/xform/comment/style/vml-position-xform.js +1 -1
- package/dist/esm/modules/excel/xlsx/xform/comment/style/vml-protection-xform.js +1 -1
- package/dist/esm/modules/excel/xlsx/xform/comment/vml-shape-xform.js +1 -1
- package/dist/esm/modules/excel/xlsx/xform/comment/vml-textbox-xform.js +1 -1
- package/dist/esm/modules/excel/xlsx/xform/core/app-xform.js +1 -1
- package/dist/esm/modules/excel/xlsx/xform/core/content-types-xform.js +24 -11
- package/dist/esm/modules/excel/xlsx/xform/drawing/base-cell-anchor-xform.js +1 -1
- package/dist/esm/modules/excel/xlsx/xform/drawing/ext-xform.js +2 -2
- package/dist/esm/modules/excel/xlsx/xform/drawing/one-cell-anchor-xform.js +1 -1
- package/dist/esm/modules/excel/xlsx/xform/drawing/two-cell-anchor-xform.js +1 -1
- package/dist/esm/modules/excel/xlsx/xform/list-xform.js +3 -3
- package/dist/esm/modules/excel/xlsx/xform/pivot-table/cache-field-xform.js +134 -52
- package/dist/esm/modules/excel/xlsx/xform/pivot-table/cache-field.js +244 -70
- package/dist/esm/modules/excel/xlsx/xform/pivot-table/pivot-cache-definition-xform.js +213 -37
- package/dist/esm/modules/excel/xlsx/xform/pivot-table/pivot-cache-records-xform.js +143 -41
- package/dist/esm/modules/excel/xlsx/xform/pivot-table/pivot-table-xform.js +793 -408
- package/dist/esm/modules/excel/xlsx/xform/pivot-table/raw-xml-collector.js +149 -0
- package/dist/esm/modules/excel/xlsx/xform/sheet/cell-xform.js +1 -1
- package/dist/esm/modules/excel/xlsx/xform/sheet/cf/cf-rule-xform.js +1 -1
- package/dist/esm/modules/excel/xlsx/xform/sheet/cf/conditional-formattings-xform.js +1 -1
- package/dist/esm/modules/excel/xlsx/xform/sheet/cf-ext/cf-rule-ext-xform.js +1 -1
- package/dist/esm/modules/excel/xlsx/xform/sheet/col-xform.js +3 -3
- package/dist/esm/modules/excel/xlsx/xform/sheet/data-validations-xform.js +3 -3
- package/dist/esm/modules/excel/xlsx/xform/sheet/header-footer-xform.js +6 -6
- package/dist/esm/modules/excel/xlsx/xform/sheet/page-setup-xform.js +11 -11
- package/dist/esm/modules/excel/xlsx/xform/sheet/sheet-format-properties-xform.js +3 -3
- package/dist/esm/modules/excel/xlsx/xform/sheet/sheet-view-xform.js +10 -10
- package/dist/esm/modules/excel/xlsx/xform/sheet/worksheet-xform.js +12 -12
- package/dist/esm/modules/excel/xlsx/xform/strings/phonetic-text-xform.js +2 -2
- package/dist/esm/modules/excel/xlsx/xform/style/color-xform.js +1 -1
- package/dist/esm/modules/excel/xlsx/xform/style/style-xform.js +5 -5
- package/dist/esm/modules/excel/xlsx/xlsx.browser.js +88 -54
- package/dist/esm/utils/env.js +0 -7
- package/dist/esm/utils/utils.base.js +40 -47
- package/dist/esm/utils/utils.browser.js +1 -1
- package/dist/esm/utils/utils.js +1 -1
- package/dist/iife/excelts.iife.js +1553 -718
- package/dist/iife/excelts.iife.js.map +1 -1
- package/dist/iife/excelts.iife.min.js +36 -105
- package/dist/types/index.browser.d.ts +1 -1
- package/dist/types/index.d.ts +1 -1
- package/dist/types/modules/excel/pivot-table.d.ts +168 -17
- package/dist/types/modules/excel/types.d.ts +0 -4
- package/dist/types/modules/excel/workbook.d.ts +0 -2
- package/dist/types/modules/excel/xlsx/xform/base-xform.d.ts +5 -5
- package/dist/types/modules/excel/xlsx/xform/comment/comment-xform.d.ts +1 -2
- package/dist/types/modules/excel/xlsx/xform/comment/comments-xform.d.ts +1 -2
- package/dist/types/modules/excel/xlsx/xform/comment/style/vml-position-xform.d.ts +3 -4
- package/dist/types/modules/excel/xlsx/xform/comment/vml-client-data-xform.d.ts +1 -2
- package/dist/types/modules/excel/xlsx/xform/comment/vml-notes-xform.d.ts +1 -2
- package/dist/types/modules/excel/xlsx/xform/comment/vml-textbox-xform.d.ts +1 -2
- package/dist/types/modules/excel/xlsx/xform/composite-xform.d.ts +1 -1
- package/dist/types/modules/excel/xlsx/xform/drawing/blip-xform.d.ts +1 -2
- package/dist/types/modules/excel/xlsx/xform/drawing/cell-position-xform.d.ts +1 -2
- package/dist/types/modules/excel/xlsx/xform/drawing/ctrl-prop-xform.d.ts +1 -2
- package/dist/types/modules/excel/xlsx/xform/drawing/drawing-xform.d.ts +1 -2
- package/dist/types/modules/excel/xlsx/xform/drawing/ext-xform.d.ts +1 -2
- package/dist/types/modules/excel/xlsx/xform/drawing/vml-drawing-xform.d.ts +1 -2
- package/dist/types/modules/excel/xlsx/xform/list-xform.d.ts +1 -2
- package/dist/types/modules/excel/xlsx/xform/pivot-table/cache-field-xform.d.ts +5 -15
- package/dist/types/modules/excel/xlsx/xform/pivot-table/cache-field.d.ts +14 -15
- package/dist/types/modules/excel/xlsx/xform/pivot-table/pivot-cache-definition-xform.d.ts +13 -29
- package/dist/types/modules/excel/xlsx/xform/pivot-table/pivot-cache-records-xform.d.ts +7 -34
- package/dist/types/modules/excel/xlsx/xform/pivot-table/pivot-table-xform.d.ts +101 -27
- package/dist/types/modules/excel/xlsx/xform/pivot-table/raw-xml-collector.d.ts +78 -0
- package/dist/types/modules/excel/xlsx/xform/sheet/row-xform.d.ts +1 -2
- package/dist/types/modules/excel/xlsx/xform/sheet/sheet-view-xform.d.ts +1 -2
- package/dist/types/modules/excel/xlsx/xform/table/auto-filter-xform.d.ts +1 -2
- package/dist/types/modules/excel/xlsx/xform/table/custom-filter-xform.d.ts +1 -2
- package/dist/types/modules/excel/xlsx/xform/table/filter-column-xform.d.ts +1 -2
- package/dist/types/modules/excel/xlsx/xform/table/filter-xform.d.ts +1 -2
- package/dist/types/modules/excel/xlsx/xform/table/table-column-xform.d.ts +1 -2
- package/dist/types/modules/excel/xlsx/xform/table/table-style-info-xform.d.ts +1 -2
- package/dist/types/modules/excel/xlsx/xform/table/table-xform.d.ts +1 -2
- package/dist/types/modules/excel/xlsx/xlsx.browser.d.ts +5 -2
- package/dist/types/utils/env.d.ts +0 -5
- package/dist/types/utils/utils.base.d.ts +8 -13
- package/dist/types/utils/utils.browser.d.ts +1 -1
- package/dist/types/utils/utils.d.ts +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
import { xmlEncode } from "../../../../../utils/utils.js";
|
|
2
|
+
/**
|
|
3
|
+
* Reusable utility for collecting raw XML fragments during SAX parsing.
|
|
4
|
+
*
|
|
5
|
+
* Many pivot-table xforms need to capture entire sub-trees (extLst, formats,
|
|
6
|
+
* conditionalFormats, filters, fieldGroup, unknown elements, …) as raw strings
|
|
7
|
+
* for roundtrip preservation. The pattern — `active` flag, `depth` counter,
|
|
8
|
+
* `buffer` of string fragments, plus identical `feedOpen` / `feedClose` /
|
|
9
|
+
* `feedText` logic — was previously copy-pasted across multiple files.
|
|
10
|
+
*
|
|
11
|
+
* Usage:
|
|
12
|
+
* ```ts
|
|
13
|
+
* const collector = new RawXmlCollector("extLst");
|
|
14
|
+
* // In parseOpen, when you see <extLst>:
|
|
15
|
+
* collector.start(); // opens with <extLst>
|
|
16
|
+
* // For every child open tag while active:
|
|
17
|
+
* collector.feedOpen(name, attributes);
|
|
18
|
+
* // For every text node while active:
|
|
19
|
+
* collector.feedText(text);
|
|
20
|
+
* // For every close tag while active:
|
|
21
|
+
* if (collector.feedClose(name)) { ... } // returns true when root tag closed
|
|
22
|
+
* // Retrieve result:
|
|
23
|
+
* collector.result; // joined XML string
|
|
24
|
+
* ```
|
|
25
|
+
*/
|
|
26
|
+
class RawXmlCollector {
|
|
27
|
+
constructor(rootTag) {
|
|
28
|
+
/** Whether the collector is currently capturing. */
|
|
29
|
+
this.active = false;
|
|
30
|
+
/** Nesting depth *within* the root element (0 = direct children). */
|
|
31
|
+
this.depth = 0;
|
|
32
|
+
/** String fragments being accumulated. */
|
|
33
|
+
this.buffer = [];
|
|
34
|
+
/** Index of the last open-tag entry in the buffer (for self-closing collapse). */
|
|
35
|
+
this.lastOpenIndex = -1;
|
|
36
|
+
this.rootTag = rootTag;
|
|
37
|
+
}
|
|
38
|
+
// ---------------------------------------------------------------------------
|
|
39
|
+
// Lifecycle
|
|
40
|
+
// ---------------------------------------------------------------------------
|
|
41
|
+
/**
|
|
42
|
+
* Begin collecting. Pushes the opening root tag (with optional attributes)
|
|
43
|
+
* and resets depth.
|
|
44
|
+
*
|
|
45
|
+
* @param attributes - Attributes on the root element (may be undefined/null).
|
|
46
|
+
*/
|
|
47
|
+
start(attributes) {
|
|
48
|
+
this.active = true;
|
|
49
|
+
this.depth = 0;
|
|
50
|
+
const attrsStr = serializeAttributes(attributes);
|
|
51
|
+
this.buffer = [`<${this.rootTag}${attrsStr ? " " + attrsStr : ""}>`];
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Begin collecting with a dynamically determined root tag.
|
|
55
|
+
* Used for catch-all unknown element collectors where the tag name
|
|
56
|
+
* is not known at construction time.
|
|
57
|
+
*/
|
|
58
|
+
startAs(rootTag, attributes) {
|
|
59
|
+
this.rootTag = rootTag;
|
|
60
|
+
this.start(attributes);
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Reset the collector to its initial idle state.
|
|
64
|
+
*/
|
|
65
|
+
reset() {
|
|
66
|
+
this.active = false;
|
|
67
|
+
this.depth = 0;
|
|
68
|
+
this.buffer.length = 0;
|
|
69
|
+
this.lastOpenIndex = -1;
|
|
70
|
+
}
|
|
71
|
+
// ---------------------------------------------------------------------------
|
|
72
|
+
// Feed methods — call these from parseOpen / parseText / parseClose
|
|
73
|
+
// ---------------------------------------------------------------------------
|
|
74
|
+
/**
|
|
75
|
+
* Feed an open-tag event. Must only be called while `active` is true.
|
|
76
|
+
*/
|
|
77
|
+
feedOpen(name, attributes) {
|
|
78
|
+
const attrsStr = serializeAttributes(attributes);
|
|
79
|
+
this.buffer.push(`<${name}${attrsStr ? " " + attrsStr : ""}>`);
|
|
80
|
+
this.depth++;
|
|
81
|
+
this.lastOpenIndex = this.buffer.length - 1;
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Feed a text-node event. Must only be called while `active` is true.
|
|
85
|
+
*/
|
|
86
|
+
feedText(text) {
|
|
87
|
+
this.buffer.push(xmlEncode(text));
|
|
88
|
+
this.lastOpenIndex = -1;
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Feed a close-tag event.
|
|
92
|
+
*
|
|
93
|
+
* @returns `true` when the **root** close tag has been received (collector
|
|
94
|
+
* deactivates itself and the result is ready). `false` for any
|
|
95
|
+
* nested close tag.
|
|
96
|
+
*/
|
|
97
|
+
feedClose(name) {
|
|
98
|
+
if (name === this.rootTag && this.depth === 0) {
|
|
99
|
+
this.buffer.push(`</${name}>`);
|
|
100
|
+
this.active = false;
|
|
101
|
+
this.lastOpenIndex = -1;
|
|
102
|
+
return true;
|
|
103
|
+
}
|
|
104
|
+
// Guard against depth going negative (e.g. mismatched close tags)
|
|
105
|
+
if (this.depth > 0) {
|
|
106
|
+
this.depth--;
|
|
107
|
+
}
|
|
108
|
+
// Collapse self-closing: if the close tag matches the last open tag and
|
|
109
|
+
// nothing was written between them, rewrite `<tag ...>` → `<tag ... />`
|
|
110
|
+
if (this.lastOpenIndex >= 0 && this.lastOpenIndex === this.buffer.length - 1) {
|
|
111
|
+
const openTag = this.buffer[this.lastOpenIndex];
|
|
112
|
+
// openTag ends with ">" — replace with " />"
|
|
113
|
+
this.buffer[this.lastOpenIndex] = openTag.slice(0, -1) + " />";
|
|
114
|
+
this.lastOpenIndex = -1;
|
|
115
|
+
return false;
|
|
116
|
+
}
|
|
117
|
+
this.lastOpenIndex = -1;
|
|
118
|
+
this.buffer.push(`</${name}>`);
|
|
119
|
+
return false;
|
|
120
|
+
}
|
|
121
|
+
// ---------------------------------------------------------------------------
|
|
122
|
+
// Result
|
|
123
|
+
// ---------------------------------------------------------------------------
|
|
124
|
+
/** The collected XML string. Only meaningful after `feedClose` returns true. */
|
|
125
|
+
get result() {
|
|
126
|
+
return this.buffer.join("");
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
// ---------------------------------------------------------------------------
|
|
130
|
+
// Helpers
|
|
131
|
+
// ---------------------------------------------------------------------------
|
|
132
|
+
/**
|
|
133
|
+
* Serialize an attributes object to an XML attribute string.
|
|
134
|
+
* `null`, `undefined`, and empty objects produce an empty string.
|
|
135
|
+
*/
|
|
136
|
+
function serializeAttributes(attributes) {
|
|
137
|
+
if (!attributes) {
|
|
138
|
+
return "";
|
|
139
|
+
}
|
|
140
|
+
const entries = Object.entries(attributes);
|
|
141
|
+
if (entries.length === 0) {
|
|
142
|
+
return "";
|
|
143
|
+
}
|
|
144
|
+
return entries
|
|
145
|
+
.filter(([, v]) => v != null)
|
|
146
|
+
.map(([k, v]) => `${k}="${xmlEncode(String(v))}"`)
|
|
147
|
+
.join(" ");
|
|
148
|
+
}
|
|
149
|
+
export { RawXmlCollector, serializeAttributes };
|
|
@@ -379,7 +379,7 @@ class CellXform extends BaseXform {
|
|
|
379
379
|
return true;
|
|
380
380
|
case "r":
|
|
381
381
|
this.model.value = this.model.value || {};
|
|
382
|
-
this.model.value.richText = this.model.value.richText
|
|
382
|
+
this.model.value.richText = this.model.value.richText ?? [];
|
|
383
383
|
this.model.value.richText.push(this.parser.model);
|
|
384
384
|
this.parser = undefined;
|
|
385
385
|
this.currentNode = undefined;
|
|
@@ -250,7 +250,7 @@ class CfRuleXform extends CompositeXform {
|
|
|
250
250
|
break;
|
|
251
251
|
case "formula":
|
|
252
252
|
// except - formula is a string and appends to formulae
|
|
253
|
-
this.model.formulae = this.model.formulae
|
|
253
|
+
this.model.formulae = this.model.formulae ?? [];
|
|
254
254
|
this.model.formulae.push(parser.model);
|
|
255
255
|
break;
|
|
256
256
|
}
|
|
@@ -13,7 +13,7 @@ class ConditionalFormattingsXform extends BaseXform {
|
|
|
13
13
|
}
|
|
14
14
|
prepare(model, options) {
|
|
15
15
|
// ensure each rule has a priority value
|
|
16
|
-
let nextPriority = model.reduce((p, cf) => Math.max(p, ...cf.rules.map((rule) => rule.priority
|
|
16
|
+
let nextPriority = model.reduce((p, cf) => Math.max(p, ...cf.rules.map((rule) => rule.priority ?? 0)), 1);
|
|
17
17
|
model.forEach((cf) => {
|
|
18
18
|
cf.rules.forEach((rule) => {
|
|
19
19
|
if (!rule.priority) {
|
|
@@ -61,7 +61,7 @@ class CfRuleExtXform extends CompositeXform {
|
|
|
61
61
|
xmlStream.openNode(this.tag, {
|
|
62
62
|
type: "iconSet",
|
|
63
63
|
priority: model.priority,
|
|
64
|
-
id: model.x14Id
|
|
64
|
+
id: model.x14Id ?? `{${uuidV4()}}`
|
|
65
65
|
});
|
|
66
66
|
this.iconSetXform.render(xmlStream, model);
|
|
67
67
|
xmlStream.closeNode();
|
|
@@ -38,9 +38,9 @@ class ColXform extends BaseXform {
|
|
|
38
38
|
parseOpen(node) {
|
|
39
39
|
if (node.name === "col") {
|
|
40
40
|
const model = (this.model = {
|
|
41
|
-
min: parseInt(node.attributes.min
|
|
42
|
-
max: parseInt(node.attributes.max
|
|
43
|
-
width: node.attributes.width === undefined ? undefined : parseFloat(node.attributes.width
|
|
41
|
+
min: parseInt(node.attributes.min ?? "0", 10),
|
|
42
|
+
max: parseInt(node.attributes.max ?? "0", 10),
|
|
43
|
+
width: node.attributes.width === undefined ? undefined : parseFloat(node.attributes.width ?? "0")
|
|
44
44
|
});
|
|
45
45
|
if (node.attributes.style) {
|
|
46
46
|
model.styleId = parseInt(node.attributes.style, 10);
|
|
@@ -159,7 +159,7 @@ class DataValidationsXform extends BaseXform {
|
|
|
159
159
|
xmlStream.addAttribute("error", value.error);
|
|
160
160
|
}
|
|
161
161
|
xmlStream.addAttribute("sqref", value.sqref);
|
|
162
|
-
(value.formulae
|
|
162
|
+
(value.formulae ?? []).forEach((formula, index) => {
|
|
163
163
|
xmlStream.openNode(`formula${index + 1}`);
|
|
164
164
|
if (value.type === "date") {
|
|
165
165
|
xmlStream.writeText(dateToExcel(new Date(formula)));
|
|
@@ -181,7 +181,7 @@ class DataValidationsXform extends BaseXform {
|
|
|
181
181
|
return true;
|
|
182
182
|
case "dataValidation": {
|
|
183
183
|
this._address = node.attributes.sqref;
|
|
184
|
-
const dataValidation = { type: node.attributes.type
|
|
184
|
+
const dataValidation = { type: node.attributes.type ?? "any", formulae: [] };
|
|
185
185
|
if (node.attributes.type) {
|
|
186
186
|
assignBool(dataValidation, node.attributes, "allowBlank");
|
|
187
187
|
}
|
|
@@ -227,7 +227,7 @@ class DataValidationsXform extends BaseXform {
|
|
|
227
227
|
delete this._dataValidation.operator;
|
|
228
228
|
}
|
|
229
229
|
// The four known cases: 1. E4:L9 N4:U9 2.E4 L9 3. N4:U9 4. E4
|
|
230
|
-
const list = this._address.split(/\s+/g)
|
|
230
|
+
const list = this._address.split(/\s+/g);
|
|
231
231
|
list.forEach((addr) => {
|
|
232
232
|
if (addr.includes(":")) {
|
|
233
233
|
// Store ranges directly to avoid expanding large (or many) validations.
|
|
@@ -85,22 +85,22 @@ class HeaderFooterXform extends BaseXform {
|
|
|
85
85
|
parseText(text) {
|
|
86
86
|
switch (this.currentNode) {
|
|
87
87
|
case "oddHeader":
|
|
88
|
-
this.model.oddHeader = (this.model.oddHeader
|
|
88
|
+
this.model.oddHeader = (this.model.oddHeader ?? "") + text;
|
|
89
89
|
break;
|
|
90
90
|
case "oddFooter":
|
|
91
|
-
this.model.oddFooter = (this.model.oddFooter
|
|
91
|
+
this.model.oddFooter = (this.model.oddFooter ?? "") + text;
|
|
92
92
|
break;
|
|
93
93
|
case "evenHeader":
|
|
94
|
-
this.model.evenHeader = (this.model.evenHeader
|
|
94
|
+
this.model.evenHeader = (this.model.evenHeader ?? "") + text;
|
|
95
95
|
break;
|
|
96
96
|
case "evenFooter":
|
|
97
|
-
this.model.evenFooter = (this.model.evenFooter
|
|
97
|
+
this.model.evenFooter = (this.model.evenFooter ?? "") + text;
|
|
98
98
|
break;
|
|
99
99
|
case "firstHeader":
|
|
100
|
-
this.model.firstHeader = (this.model.firstHeader
|
|
100
|
+
this.model.firstHeader = (this.model.firstHeader ?? "") + text;
|
|
101
101
|
break;
|
|
102
102
|
case "firstFooter":
|
|
103
|
-
this.model.firstFooter = (this.model.firstFooter
|
|
103
|
+
this.model.firstFooter = (this.model.firstFooter ?? "") + text;
|
|
104
104
|
break;
|
|
105
105
|
default:
|
|
106
106
|
break;
|
|
@@ -81,21 +81,21 @@ class PageSetupXform extends BaseXform {
|
|
|
81
81
|
case this.tag:
|
|
82
82
|
this.model = {
|
|
83
83
|
paperSize: pageSizeToModel(node.attributes.paperSize),
|
|
84
|
-
orientation: node.attributes.orientation
|
|
85
|
-
horizontalDpi: parseInt(node.attributes.horizontalDpi
|
|
86
|
-
verticalDpi: parseInt(node.attributes.verticalDpi
|
|
87
|
-
pageOrder: node.attributes.pageOrder
|
|
84
|
+
orientation: node.attributes.orientation ?? "portrait",
|
|
85
|
+
horizontalDpi: parseInt(node.attributes.horizontalDpi ?? "4294967295", 10),
|
|
86
|
+
verticalDpi: parseInt(node.attributes.verticalDpi ?? "4294967295", 10),
|
|
87
|
+
pageOrder: node.attributes.pageOrder ?? "downThenOver",
|
|
88
88
|
blackAndWhite: node.attributes.blackAndWhite === "1",
|
|
89
89
|
draft: node.attributes.draft === "1",
|
|
90
|
-
cellComments: node.attributes.cellComments
|
|
91
|
-
errors: node.attributes.errors
|
|
92
|
-
scale: parseInt(node.attributes.scale
|
|
93
|
-
fitToWidth: parseInt(node.attributes.fitToWidth
|
|
94
|
-
fitToHeight: parseInt(node.attributes.fitToHeight
|
|
95
|
-
firstPageNumber: parseInt(node.attributes.firstPageNumber
|
|
90
|
+
cellComments: node.attributes.cellComments ?? "None",
|
|
91
|
+
errors: node.attributes.errors ?? "displayed",
|
|
92
|
+
scale: parseInt(node.attributes.scale ?? "100", 10),
|
|
93
|
+
fitToWidth: parseInt(node.attributes.fitToWidth ?? "1", 10),
|
|
94
|
+
fitToHeight: parseInt(node.attributes.fitToHeight ?? "1", 10),
|
|
95
|
+
firstPageNumber: parseInt(node.attributes.firstPageNumber ?? "1", 10),
|
|
96
96
|
useFirstPageNumber: node.attributes.useFirstPageNumber === "1",
|
|
97
97
|
usePrinterDefaults: node.attributes.usePrinterDefaults === "1",
|
|
98
|
-
copies: parseInt(node.attributes.copies
|
|
98
|
+
copies: parseInt(node.attributes.copies ?? "1", 10)
|
|
99
99
|
};
|
|
100
100
|
return true;
|
|
101
101
|
default:
|
|
@@ -29,12 +29,12 @@ class SheetFormatPropertiesXform extends BaseXform {
|
|
|
29
29
|
parseOpen(node) {
|
|
30
30
|
if (node.name === "sheetFormatPr") {
|
|
31
31
|
this.model = {
|
|
32
|
-
defaultRowHeight: parseFloat(node.attributes.defaultRowHeight
|
|
32
|
+
defaultRowHeight: parseFloat(node.attributes.defaultRowHeight ?? "0"),
|
|
33
33
|
dyDescent: node.attributes["x14ac:dyDescent"] !== undefined
|
|
34
34
|
? parseFloat(node.attributes["x14ac:dyDescent"])
|
|
35
35
|
: undefined,
|
|
36
|
-
outlineLevelRow: parseInt(node.attributes.outlineLevelRow
|
|
37
|
-
outlineLevelCol: parseInt(node.attributes.outlineLevelCol
|
|
36
|
+
outlineLevelRow: parseInt(node.attributes.outlineLevelRow ?? "0", 10),
|
|
37
|
+
outlineLevelCol: parseInt(node.attributes.outlineLevelCol ?? "0", 10)
|
|
38
38
|
};
|
|
39
39
|
if (node.attributes.defaultColWidth) {
|
|
40
40
|
this.model.defaultColWidth = parseFloat(node.attributes.defaultColWidth);
|
|
@@ -25,7 +25,7 @@ class SheetViewXform extends BaseXform {
|
|
|
25
25
|
if (model.tabSelected) {
|
|
26
26
|
initialAttrs.tabSelected = "1";
|
|
27
27
|
}
|
|
28
|
-
initialAttrs.workbookViewId = model.workbookViewId
|
|
28
|
+
initialAttrs.workbookViewId = model.workbookViewId ?? 0;
|
|
29
29
|
xmlStream.openNode("sheetView", initialAttrs);
|
|
30
30
|
const add = function (name, value, included) {
|
|
31
31
|
if (included) {
|
|
@@ -46,8 +46,8 @@ class SheetViewXform extends BaseXform {
|
|
|
46
46
|
let activePane;
|
|
47
47
|
switch (model.state) {
|
|
48
48
|
case "frozen":
|
|
49
|
-
xSplit = model.xSplit
|
|
50
|
-
ySplit = model.ySplit
|
|
49
|
+
xSplit = model.xSplit ?? 0;
|
|
50
|
+
ySplit = model.ySplit ?? 0;
|
|
51
51
|
topLeftCell = model.topLeftCell || colCache.getAddress(ySplit + 1, xSplit + 1).address;
|
|
52
52
|
activePane =
|
|
53
53
|
(model.xSplit && model.ySplit && "bottomRight") ||
|
|
@@ -105,8 +105,8 @@ class SheetViewXform extends BaseXform {
|
|
|
105
105
|
showRuler: !(node.attributes.showRuler === "0"),
|
|
106
106
|
showRowColHeaders: !(node.attributes.showRowColHeaders === "0"),
|
|
107
107
|
showGridLines: !(node.attributes.showGridLines === "0"),
|
|
108
|
-
zoomScale: parseInt(node.attributes.zoomScale
|
|
109
|
-
zoomScaleNormal: parseInt(node.attributes.zoomScaleNormal
|
|
108
|
+
zoomScale: parseInt(node.attributes.zoomScale ?? "100", 10),
|
|
109
|
+
zoomScaleNormal: parseInt(node.attributes.zoomScaleNormal ?? "100", 10),
|
|
110
110
|
style: node.attributes.view
|
|
111
111
|
};
|
|
112
112
|
this.pane = undefined;
|
|
@@ -114,15 +114,15 @@ class SheetViewXform extends BaseXform {
|
|
|
114
114
|
return true;
|
|
115
115
|
case "pane":
|
|
116
116
|
this.pane = {
|
|
117
|
-
xSplit: parseInt(node.attributes.xSplit
|
|
118
|
-
ySplit: parseInt(node.attributes.ySplit
|
|
117
|
+
xSplit: parseInt(node.attributes.xSplit ?? "0", 10),
|
|
118
|
+
ySplit: parseInt(node.attributes.ySplit ?? "0", 10),
|
|
119
119
|
topLeftCell: node.attributes.topLeftCell,
|
|
120
|
-
activePane: node.attributes.activePane
|
|
120
|
+
activePane: node.attributes.activePane ?? "topLeft",
|
|
121
121
|
state: node.attributes.state
|
|
122
122
|
};
|
|
123
123
|
return true;
|
|
124
124
|
case "selection": {
|
|
125
|
-
const name = node.attributes.pane
|
|
125
|
+
const name = node.attributes.pane ?? "topLeft";
|
|
126
126
|
this.selections[name] = {
|
|
127
127
|
pane: name,
|
|
128
128
|
activeCell: node.attributes.activeCell
|
|
@@ -144,7 +144,7 @@ class SheetViewXform extends BaseXform {
|
|
|
144
144
|
workbookViewId: this.sheetView.workbookViewId,
|
|
145
145
|
rightToLeft: this.sheetView.rightToLeft,
|
|
146
146
|
tabSelected: this.sheetView.tabSelected,
|
|
147
|
-
state: VIEW_STATES[this.pane.state]
|
|
147
|
+
state: VIEW_STATES[this.pane.state] ?? "split", // split is default
|
|
148
148
|
xSplit: this.pane.xSplit,
|
|
149
149
|
ySplit: this.pane.ySplit,
|
|
150
150
|
topLeftCell: this.pane.topLeftCell,
|
|
@@ -85,7 +85,7 @@ class WorkSheetXform extends BaseXform {
|
|
|
85
85
|
constructor(options) {
|
|
86
86
|
super();
|
|
87
87
|
const { maxRows, maxCols, ignoreNodes } = options || {};
|
|
88
|
-
this.ignoreNodes = ignoreNodes
|
|
88
|
+
this.ignoreNodes = ignoreNodes ?? [];
|
|
89
89
|
this.map = {
|
|
90
90
|
sheetPr: new SheetPropertiesXform(),
|
|
91
91
|
dimension: new DimensionXform(),
|
|
@@ -293,7 +293,7 @@ class WorkSheetXform extends BaseXform {
|
|
|
293
293
|
});
|
|
294
294
|
});
|
|
295
295
|
// prepare pivot tables
|
|
296
|
-
(model.pivotTables
|
|
296
|
+
(model.pivotTables ?? []).forEach((pivotTable) => {
|
|
297
297
|
rels.push({
|
|
298
298
|
Id: nextRid(rels),
|
|
299
299
|
Type: RelType.PivotTable,
|
|
@@ -557,8 +557,8 @@ class WorkSheetXform extends BaseXform {
|
|
|
557
557
|
drawing: this.map.drawing.model,
|
|
558
558
|
tables: this.map.tableParts.model,
|
|
559
559
|
conditionalFormattings,
|
|
560
|
-
rowBreaks: this.map.rowBreaks.model
|
|
561
|
-
colBreaks: this.map.colBreaks.model
|
|
560
|
+
rowBreaks: this.map.rowBreaks.model ?? [],
|
|
561
|
+
colBreaks: this.map.colBreaks.model ?? []
|
|
562
562
|
};
|
|
563
563
|
if (this.map.autoFilter.model) {
|
|
564
564
|
this.model.autoFilter = this.map.autoFilter.model;
|
|
@@ -576,7 +576,7 @@ class WorkSheetXform extends BaseXform {
|
|
|
576
576
|
reconcile(model, options) {
|
|
577
577
|
// options.merges = new Merges();
|
|
578
578
|
// options.merges.reconcile(model.mergeCells, model.rows);
|
|
579
|
-
const rels = (model.relationships
|
|
579
|
+
const rels = (model.relationships ?? []).reduce((h, rel) => {
|
|
580
580
|
h[rel.Id] = rel;
|
|
581
581
|
if (rel.Type === RelType.Comments) {
|
|
582
582
|
model.comments = options.comments[rel.Target].comments;
|
|
@@ -589,13 +589,13 @@ class WorkSheetXform extends BaseXform {
|
|
|
589
589
|
}
|
|
590
590
|
return h;
|
|
591
591
|
}, {});
|
|
592
|
-
options.commentsMap = (model.comments
|
|
592
|
+
options.commentsMap = (model.comments ?? []).reduce((h, comment) => {
|
|
593
593
|
if (comment.ref) {
|
|
594
594
|
h[comment.ref] = comment;
|
|
595
595
|
}
|
|
596
596
|
return h;
|
|
597
597
|
}, {});
|
|
598
|
-
options.hyperlinkMap = (model.hyperlinks
|
|
598
|
+
options.hyperlinkMap = (model.hyperlinks ?? []).reduce((h, hyperlink) => {
|
|
599
599
|
if (hyperlink.rId) {
|
|
600
600
|
h[hyperlink.address] = rels[hyperlink.rId].Target;
|
|
601
601
|
}
|
|
@@ -603,9 +603,9 @@ class WorkSheetXform extends BaseXform {
|
|
|
603
603
|
}, {});
|
|
604
604
|
options.formulae = {};
|
|
605
605
|
// compact the rows and cells
|
|
606
|
-
model.rows =
|
|
606
|
+
model.rows = model.rows?.filter(Boolean) ?? [];
|
|
607
607
|
model.rows.forEach(row => {
|
|
608
|
-
row.cells =
|
|
608
|
+
row.cells = row.cells?.filter(Boolean) ?? [];
|
|
609
609
|
});
|
|
610
610
|
this.map.cols.reconcile(model.cols, options);
|
|
611
611
|
this.map.sheetData.reconcile(model.rows, options);
|
|
@@ -623,7 +623,7 @@ class WorkSheetXform extends BaseXform {
|
|
|
623
623
|
model.drawing = {
|
|
624
624
|
...drawing,
|
|
625
625
|
name: drawingName,
|
|
626
|
-
rels: options.drawingRels?.[drawingName]
|
|
626
|
+
rels: options.drawingRels?.[drawingName] ?? drawing.rels ?? []
|
|
627
627
|
};
|
|
628
628
|
// Also extract images to model.media for backward compatibility
|
|
629
629
|
drawing.anchors.forEach(anchor => {
|
|
@@ -651,14 +651,14 @@ class WorkSheetXform extends BaseXform {
|
|
|
651
651
|
});
|
|
652
652
|
}
|
|
653
653
|
}
|
|
654
|
-
model.tables = (model.tables
|
|
654
|
+
model.tables = (model.tables ?? []).map(tablePart => {
|
|
655
655
|
const rel = rels[tablePart.rId];
|
|
656
656
|
return options.tables[rel.Target];
|
|
657
657
|
});
|
|
658
658
|
// Link pivot tables from relationships to worksheet
|
|
659
659
|
// This is needed so that when writing, the worksheet knows which pivot tables it contains
|
|
660
660
|
model.pivotTables = [];
|
|
661
|
-
(model.relationships
|
|
661
|
+
(model.relationships ?? []).forEach(rel => {
|
|
662
662
|
if (rel.Type === RelType.PivotTable && options.pivotTables) {
|
|
663
663
|
const pivotTable = options.pivotTables[rel.Target];
|
|
664
664
|
if (pivotTable) {
|
|
@@ -14,8 +14,8 @@ class PhoneticTextXform extends BaseXform {
|
|
|
14
14
|
}
|
|
15
15
|
render(xmlStream, model) {
|
|
16
16
|
xmlStream.openNode(this.tag, {
|
|
17
|
-
sb: model.sb
|
|
18
|
-
eb: model.eb
|
|
17
|
+
sb: model.sb ?? 0,
|
|
18
|
+
eb: model.eb ?? 0
|
|
19
19
|
});
|
|
20
20
|
if (model && Object.prototype.hasOwnProperty.call(model, "richText") && model.richText) {
|
|
21
21
|
const { r } = this.map;
|
|
@@ -16,13 +16,13 @@ class StyleXform extends BaseXform {
|
|
|
16
16
|
}
|
|
17
17
|
render(xmlStream, model) {
|
|
18
18
|
xmlStream.openNode("xf", {
|
|
19
|
-
numFmtId: model.numFmtId
|
|
20
|
-
fontId: model.fontId
|
|
21
|
-
fillId: model.fillId
|
|
22
|
-
borderId: model.borderId
|
|
19
|
+
numFmtId: model.numFmtId ?? 0,
|
|
20
|
+
fontId: model.fontId ?? 0,
|
|
21
|
+
fillId: model.fillId ?? 0,
|
|
22
|
+
borderId: model.borderId ?? 0
|
|
23
23
|
});
|
|
24
24
|
if (this.xfId) {
|
|
25
|
-
xmlStream.addAttribute("xfId", model.xfId
|
|
25
|
+
xmlStream.addAttribute("xfId", model.xfId ?? 0);
|
|
26
26
|
}
|
|
27
27
|
if (model.applyNumberFormat || model.numFmtId) {
|
|
28
28
|
xmlStream.addAttribute("applyNumberFormat", "1");
|