@rowsncolumns/toolkit 24.4.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE.md +100 -0
- package/Readme.md +27 -0
- package/dist/cjs/autofilter-condition.d.ts +43 -0
- package/dist/cjs/autofilter-condition.d.ts.map +1 -0
- package/dist/cjs/autofilter-condition.js +155 -0
- package/dist/cjs/csv-export.d.ts +49 -0
- package/dist/cjs/csv-export.d.ts.map +1 -0
- package/dist/cjs/csv-export.js +142 -0
- package/dist/cjs/csv-import-worker.d.ts +16 -0
- package/dist/cjs/csv-import-worker.d.ts.map +1 -0
- package/dist/cjs/csv-import-worker.js +60 -0
- package/dist/cjs/csv-import.d.ts +38 -0
- package/dist/cjs/csv-import.d.ts.map +1 -0
- package/dist/cjs/csv-import.js +166 -0
- package/dist/cjs/csv-parser/helpers.d.ts +14 -0
- package/dist/cjs/csv-parser/helpers.d.ts.map +1 -0
- package/dist/cjs/csv-parser/helpers.js +145 -0
- package/dist/cjs/csv-parser/types.d.ts +66 -0
- package/dist/cjs/csv-parser/types.d.ts.map +1 -0
- package/dist/cjs/csv-parser/types.js +14 -0
- package/dist/cjs/csv-parser/worker.d.ts +2 -0
- package/dist/cjs/csv-parser/worker.d.ts.map +1 -0
- package/dist/cjs/csv-parser/worker.js +200 -0
- package/dist/cjs/excel-export.d.ts +11 -0
- package/dist/cjs/excel-export.d.ts.map +1 -0
- package/dist/cjs/excel-export.js +22 -0
- package/dist/cjs/excel-import-session.d.ts +51 -0
- package/dist/cjs/excel-import-session.d.ts.map +1 -0
- package/dist/cjs/excel-import-session.js +307 -0
- package/dist/cjs/excel-import-worker.d.ts +7 -0
- package/dist/cjs/excel-import-worker.d.ts.map +1 -0
- package/dist/cjs/excel-import-worker.js +119 -0
- package/dist/cjs/excel-parser/builtin-numfmts.d.ts +24 -0
- package/dist/cjs/excel-parser/builtin-numfmts.d.ts.map +1 -0
- package/dist/cjs/excel-parser/builtin-numfmts.js +63 -0
- package/dist/cjs/excel-parser/cfb-decryptor.d.ts +53 -0
- package/dist/cjs/excel-parser/cfb-decryptor.d.ts.map +1 -0
- package/dist/cjs/excel-parser/cfb-decryptor.js +553 -0
- package/dist/cjs/excel-parser/cfb-encryptor.d.ts +23 -0
- package/dist/cjs/excel-parser/cfb-encryptor.d.ts.map +1 -0
- package/dist/cjs/excel-parser/cfb-encryptor.js +200 -0
- package/dist/cjs/excel-parser/dv-cell-stamp.d.ts +29 -0
- package/dist/cjs/excel-parser/dv-cell-stamp.d.ts.map +1 -0
- package/dist/cjs/excel-parser/dv-cell-stamp.js +239 -0
- package/dist/cjs/excel-parser/helpers.d.ts +28 -0
- package/dist/cjs/excel-parser/helpers.d.ts.map +1 -0
- package/dist/cjs/excel-parser/helpers.js +188 -0
- package/dist/cjs/excel-parser/interface.d.ts +179 -0
- package/dist/cjs/excel-parser/interface.d.ts.map +1 -0
- package/dist/cjs/excel-parser/interface.js +1 -0
- package/dist/cjs/excel-parser/plugins/base/index.d.ts +31 -0
- package/dist/cjs/excel-parser/plugins/base/index.d.ts.map +1 -0
- package/dist/cjs/excel-parser/plugins/base/index.js +101 -0
- package/dist/cjs/excel-parser/plugins/ods/conditional-formatting.d.ts +16 -0
- package/dist/cjs/excel-parser/plugins/ods/conditional-formatting.d.ts.map +1 -0
- package/dist/cjs/excel-parser/plugins/ods/conditional-formatting.js +488 -0
- package/dist/cjs/excel-parser/plugins/ods/data-validations.d.ts +15 -0
- package/dist/cjs/excel-parser/plugins/ods/data-validations.d.ts.map +1 -0
- package/dist/cjs/excel-parser/plugins/ods/data-validations.js +353 -0
- package/dist/cjs/excel-parser/plugins/ods/formula.d.ts +8 -0
- package/dist/cjs/excel-parser/plugins/ods/formula.d.ts.map +1 -0
- package/dist/cjs/excel-parser/plugins/ods/formula.js +82 -0
- package/dist/cjs/excel-parser/plugins/ods/index.d.ts +122 -0
- package/dist/cjs/excel-parser/plugins/ods/index.d.ts.map +1 -0
- package/dist/cjs/excel-parser/plugins/ods/index.js +3642 -0
- package/dist/cjs/excel-parser/plugins/ods/sparklines.d.ts +25 -0
- package/dist/cjs/excel-parser/plugins/ods/sparklines.d.ts.map +1 -0
- package/dist/cjs/excel-parser/plugins/ods/sparklines.js +221 -0
- package/dist/cjs/excel-parser/plugins/ods/styles.d.ts +60 -0
- package/dist/cjs/excel-parser/plugins/ods/styles.d.ts.map +1 -0
- package/dist/cjs/excel-parser/plugins/ods/styles.js +808 -0
- package/dist/cjs/excel-parser/plugins/ods/types.d.ts +7 -0
- package/dist/cjs/excel-parser/plugins/ods/types.d.ts.map +1 -0
- package/dist/cjs/excel-parser/plugins/ods/types.js +1 -0
- package/dist/cjs/excel-parser/plugins/xls/index.d.ts +5 -0
- package/dist/cjs/excel-parser/plugins/xls/index.d.ts.map +1 -0
- package/dist/cjs/excel-parser/plugins/xls/index.js +19 -0
- package/dist/cjs/excel-parser/plugins/xlsb/biff-record-reader.d.ts +13 -0
- package/dist/cjs/excel-parser/plugins/xlsb/biff-record-reader.d.ts.map +1 -0
- package/dist/cjs/excel-parser/plugins/xlsb/biff-record-reader.js +49 -0
- package/dist/cjs/excel-parser/plugins/xlsb/index.d.ts +117 -0
- package/dist/cjs/excel-parser/plugins/xlsb/index.d.ts.map +1 -0
- package/dist/cjs/excel-parser/plugins/xlsb/index.js +2972 -0
- package/dist/cjs/excel-parser/plugins/xlsb/rgce-parser.d.ts +18 -0
- package/dist/cjs/excel-parser/plugins/xlsb/rgce-parser.d.ts.map +1 -0
- package/dist/cjs/excel-parser/plugins/xlsb/rgce-parser.js +527 -0
- package/dist/cjs/excel-parser/plugins/xlsm/index.d.ts +5 -0
- package/dist/cjs/excel-parser/plugins/xlsm/index.d.ts.map +1 -0
- package/dist/cjs/excel-parser/plugins/xlsm/index.js +10 -0
- package/dist/cjs/excel-parser/plugins/xlsx/charts.d.ts +60 -0
- package/dist/cjs/excel-parser/plugins/xlsx/charts.d.ts.map +1 -0
- package/dist/cjs/excel-parser/plugins/xlsx/charts.js +2178 -0
- package/dist/cjs/excel-parser/plugins/xlsx/conditional-formatting.d.ts +18 -0
- package/dist/cjs/excel-parser/plugins/xlsx/conditional-formatting.d.ts.map +1 -0
- package/dist/cjs/excel-parser/plugins/xlsx/conditional-formatting.js +620 -0
- package/dist/cjs/excel-parser/plugins/xlsx/data-validations.d.ts +4 -0
- package/dist/cjs/excel-parser/plugins/xlsx/data-validations.d.ts.map +1 -0
- package/dist/cjs/excel-parser/plugins/xlsx/data-validations.js +515 -0
- package/dist/cjs/excel-parser/plugins/xlsx/drawing.d.ts +39 -0
- package/dist/cjs/excel-parser/plugins/xlsx/drawing.d.ts.map +1 -0
- package/dist/cjs/excel-parser/plugins/xlsx/drawing.js +941 -0
- package/dist/cjs/excel-parser/plugins/xlsx/index.d.ts +320 -0
- package/dist/cjs/excel-parser/plugins/xlsx/index.d.ts.map +1 -0
- package/dist/cjs/excel-parser/plugins/xlsx/index.js +6056 -0
- package/dist/cjs/excel-parser/plugins/xlsx/numfmt.d.ts +2 -0
- package/dist/cjs/excel-parser/plugins/xlsx/numfmt.d.ts.map +1 -0
- package/dist/cjs/excel-parser/plugins/xlsx/numfmt.js +3 -0
- package/dist/cjs/excel-parser/plugins/xlsx/pivots.d.ts +40 -0
- package/dist/cjs/excel-parser/plugins/xlsx/pivots.d.ts.map +1 -0
- package/dist/cjs/excel-parser/plugins/xlsx/pivots.js +342 -0
- package/dist/cjs/excel-parser/plugins/xlsx/relationships.d.ts +8 -0
- package/dist/cjs/excel-parser/plugins/xlsx/relationships.d.ts.map +1 -0
- package/dist/cjs/excel-parser/plugins/xlsx/relationships.js +26 -0
- package/dist/cjs/excel-parser/plugins/xlsx/sheet-views.d.ts +26 -0
- package/dist/cjs/excel-parser/plugins/xlsx/sheet-views.d.ts.map +1 -0
- package/dist/cjs/excel-parser/plugins/xlsx/sheet-views.js +59 -0
- package/dist/cjs/excel-parser/plugins/xlsx/styles.d.ts +44 -0
- package/dist/cjs/excel-parser/plugins/xlsx/styles.d.ts.map +1 -0
- package/dist/cjs/excel-parser/plugins/xlsx/styles.js +1377 -0
- package/dist/cjs/excel-parser/plugins/xlsx/theme.d.ts +50 -0
- package/dist/cjs/excel-parser/plugins/xlsx/theme.d.ts.map +1 -0
- package/dist/cjs/excel-parser/plugins/xlsx/theme.js +150 -0
- package/dist/cjs/excel-parser/plugins/xlsx/threaded-comments.d.ts +47 -0
- package/dist/cjs/excel-parser/plugins/xlsx/threaded-comments.d.ts.map +1 -0
- package/dist/cjs/excel-parser/plugins/xlsx/threaded-comments.js +141 -0
- package/dist/cjs/excel-parser/plugins/xlsx/value-type-detection.d.ts +44 -0
- package/dist/cjs/excel-parser/plugins/xlsx/value-type-detection.d.ts.map +1 -0
- package/dist/cjs/excel-parser/plugins/xlsx/value-type-detection.js +407 -0
- package/dist/cjs/excel-parser/registry.d.ts +5 -0
- package/dist/cjs/excel-parser/registry.d.ts.map +1 -0
- package/dist/cjs/excel-parser/registry.js +21 -0
- package/dist/cjs/excel-parser/style-registry.d.ts +51 -0
- package/dist/cjs/excel-parser/style-registry.d.ts.map +1 -0
- package/dist/cjs/excel-parser/style-registry.js +175 -0
- package/dist/cjs/excel-parser/theme-default.d.ts +3 -0
- package/dist/cjs/excel-parser/theme-default.d.ts.map +1 -0
- package/dist/cjs/excel-parser/theme-default.js +19 -0
- package/dist/cjs/excel-parser/types.d.ts +365 -0
- package/dist/cjs/excel-parser/types.d.ts.map +1 -0
- package/dist/cjs/excel-parser/types.js +59 -0
- package/dist/cjs/excel-parser/utils.d.ts +6 -0
- package/dist/cjs/excel-parser/utils.d.ts.map +1 -0
- package/dist/cjs/excel-parser/utils.js +30 -0
- package/dist/cjs/excel-parser/workbook.d.ts +51 -0
- package/dist/cjs/excel-parser/workbook.d.ts.map +1 -0
- package/dist/cjs/excel-parser/workbook.js +317 -0
- package/dist/cjs/excel-parser/worker.d.ts +2 -0
- package/dist/cjs/excel-parser/worker.d.ts.map +1 -0
- package/dist/cjs/excel-parser/worker.js +1149 -0
- package/dist/cjs/excel-parser/zip-parser-streaming.d.ts +13 -0
- package/dist/cjs/excel-parser/zip-parser-streaming.d.ts.map +1 -0
- package/dist/cjs/excel-parser/zip-parser-streaming.js +200 -0
- package/dist/cjs/excel-parser/zip-parser.d.ts +11 -0
- package/dist/cjs/excel-parser/zip-parser.d.ts.map +1 -0
- package/dist/cjs/excel-parser/zip-parser.js +49 -0
- package/dist/cjs/exporter/invalid-data-validation.d.ts +19 -0
- package/dist/cjs/exporter/invalid-data-validation.d.ts.map +1 -0
- package/dist/cjs/exporter/invalid-data-validation.js +39 -0
- package/dist/cjs/exporter/ods/ods-export.d.ts +26 -0
- package/dist/cjs/exporter/ods/ods-export.d.ts.map +1 -0
- package/dist/cjs/exporter/ods/ods-export.js +3714 -0
- package/dist/cjs/exporter/ods/sparkline-builder.d.ts +33 -0
- package/dist/cjs/exporter/ods/sparkline-builder.d.ts.map +1 -0
- package/dist/cjs/exporter/ods/sparkline-builder.js +221 -0
- package/dist/cjs/exporter/xlsx/chart-builder.d.ts +3 -0
- package/dist/cjs/exporter/xlsx/chart-builder.d.ts.map +1 -0
- package/dist/cjs/exporter/xlsx/chart-builder.js +1901 -0
- package/dist/cjs/exporter/xlsx/chart-templates.d.ts +1781 -0
- package/dist/cjs/exporter/xlsx/chart-templates.d.ts.map +1 -0
- package/dist/cjs/exporter/xlsx/chart-templates.js +1798 -0
- package/dist/cjs/exporter/xlsx/future-functions.d.ts +10 -0
- package/dist/cjs/exporter/xlsx/future-functions.d.ts.map +1 -0
- package/dist/cjs/exporter/xlsx/future-functions.js +264 -0
- package/dist/cjs/exporter/xlsx/pivot-builder.d.ts +58 -0
- package/dist/cjs/exporter/xlsx/pivot-builder.d.ts.map +1 -0
- package/dist/cjs/exporter/xlsx/pivot-builder.js +277 -0
- package/dist/cjs/exporter/xlsx/power-query-builder.d.ts +26 -0
- package/dist/cjs/exporter/xlsx/power-query-builder.d.ts.map +1 -0
- package/dist/cjs/exporter/xlsx/power-query-builder.js +306 -0
- package/dist/cjs/exporter/xlsx/slicer-builder.d.ts +11 -0
- package/dist/cjs/exporter/xlsx/slicer-builder.d.ts.map +1 -0
- package/dist/cjs/exporter/xlsx/slicer-builder.js +87 -0
- package/dist/cjs/exporter/xlsx/sparkline-builder.d.ts +61 -0
- package/dist/cjs/exporter/xlsx/sparkline-builder.d.ts.map +1 -0
- package/dist/cjs/exporter/xlsx/sparkline-builder.js +489 -0
- package/dist/cjs/exporter/xlsx/style-builder.d.ts +93 -0
- package/dist/cjs/exporter/xlsx/style-builder.d.ts.map +1 -0
- package/dist/cjs/exporter/xlsx/style-builder.js +813 -0
- package/dist/cjs/exporter/xlsx/threaded-comments-builder.d.ts +58 -0
- package/dist/cjs/exporter/xlsx/threaded-comments-builder.d.ts.map +1 -0
- package/dist/cjs/exporter/xlsx/threaded-comments-builder.js +189 -0
- package/dist/cjs/exporter/xlsx/xlsx-export.d.ts +121 -0
- package/dist/cjs/exporter/xlsx/xlsx-export.d.ts.map +1 -0
- package/dist/cjs/exporter/xlsx/xlsx-export.js +4596 -0
- package/dist/cjs/helpers/theme-xml-generator.d.ts +8 -0
- package/dist/cjs/helpers/theme-xml-generator.d.ts.map +1 -0
- package/dist/cjs/helpers/theme-xml-generator.js +33 -0
- package/dist/cjs/helpers.d.ts +34 -0
- package/dist/cjs/helpers.d.ts.map +1 -0
- package/dist/cjs/helpers.js +189 -0
- package/dist/cjs/index.d.ts +16 -0
- package/dist/cjs/index.d.ts.map +1 -0
- package/dist/cjs/index.js +15 -0
- package/dist/cjs/indexed-colors.d.ts +2 -0
- package/dist/cjs/indexed-colors.d.ts.map +1 -0
- package/dist/cjs/indexed-colors.js +75 -0
- package/dist/cjs/ods-export.d.ts +24 -0
- package/dist/cjs/ods-export.d.ts.map +1 -0
- package/dist/cjs/ods-export.js +23 -0
- package/dist/cjs/parse.d.ts +24 -0
- package/dist/cjs/parse.d.ts.map +1 -0
- package/dist/cjs/parse.js +68 -0
- package/dist/cjs/power-query.d.ts +41 -0
- package/dist/cjs/power-query.d.ts.map +1 -0
- package/dist/cjs/power-query.js +22 -0
- package/dist/cjs/server.d.ts +9 -0
- package/dist/cjs/server.d.ts.map +1 -0
- package/dist/cjs/server.js +8 -0
- package/dist/cjs/theme1.d.ts +3 -0
- package/dist/cjs/theme1.d.ts.map +1 -0
- package/dist/cjs/theme1.js +2 -0
- package/dist/cjs/tsconfig.cjs.tsbuildinfo +1 -0
- package/dist/cjs/types.d.ts +14 -0
- package/dist/cjs/types.d.ts.map +1 -0
- package/dist/cjs/types.js +14 -0
- package/dist/cjs/vitest.config.d.ts +3 -0
- package/dist/cjs/vitest.config.d.ts.map +1 -0
- package/dist/cjs/vitest.config.js +16 -0
- package/dist/esm/autofilter-condition.d.ts +43 -0
- package/dist/esm/autofilter-condition.d.ts.map +1 -0
- package/dist/esm/autofilter-condition.js +145 -0
- package/dist/esm/csv-export.d.ts +49 -0
- package/dist/esm/csv-export.d.ts.map +1 -0
- package/dist/esm/csv-export.js +126 -0
- package/dist/esm/csv-import-worker.d.ts +16 -0
- package/dist/esm/csv-import-worker.d.ts.map +1 -0
- package/dist/esm/csv-import-worker.js +60 -0
- package/dist/esm/csv-import.d.ts +38 -0
- package/dist/esm/csv-import.d.ts.map +1 -0
- package/dist/esm/csv-import.js +132 -0
- package/dist/esm/csv-parser/helpers.d.ts +14 -0
- package/dist/esm/csv-parser/helpers.d.ts.map +1 -0
- package/dist/esm/csv-parser/helpers.js +0 -0
- package/dist/esm/csv-parser/types.d.ts +66 -0
- package/dist/esm/csv-parser/types.d.ts.map +1 -0
- package/dist/esm/csv-parser/types.js +14 -0
- package/dist/esm/csv-parser/worker.d.ts +2 -0
- package/dist/esm/csv-parser/worker.d.ts.map +1 -0
- package/dist/esm/csv-parser/worker.js +154 -0
- package/dist/esm/excel-export.d.ts +11 -0
- package/dist/esm/excel-export.d.ts.map +1 -0
- package/dist/esm/excel-export.js +13 -0
- package/dist/esm/excel-import-session.d.ts +51 -0
- package/dist/esm/excel-import-session.d.ts.map +1 -0
- package/dist/esm/excel-import-session.js +255 -0
- package/dist/esm/excel-import-worker.d.ts +7 -0
- package/dist/esm/excel-import-worker.d.ts.map +1 -0
- package/dist/esm/excel-import-worker.js +116 -0
- package/dist/esm/excel-parser/builtin-numfmts.d.ts +24 -0
- package/dist/esm/excel-parser/builtin-numfmts.d.ts.map +1 -0
- package/dist/esm/excel-parser/builtin-numfmts.js +59 -0
- package/dist/esm/excel-parser/cfb-decryptor.d.ts +53 -0
- package/dist/esm/excel-parser/cfb-decryptor.d.ts.map +1 -0
- package/dist/esm/excel-parser/cfb-decryptor.js +493 -0
- package/dist/esm/excel-parser/cfb-encryptor.d.ts +23 -0
- package/dist/esm/excel-parser/cfb-encryptor.d.ts.map +1 -0
- package/dist/esm/excel-parser/cfb-encryptor.js +181 -0
- package/dist/esm/excel-parser/dv-cell-stamp.d.ts +29 -0
- package/dist/esm/excel-parser/dv-cell-stamp.d.ts.map +1 -0
- package/dist/esm/excel-parser/dv-cell-stamp.js +155 -0
- package/dist/esm/excel-parser/helpers.d.ts +28 -0
- package/dist/esm/excel-parser/helpers.d.ts.map +1 -0
- package/dist/esm/excel-parser/helpers.js +160 -0
- package/dist/esm/excel-parser/interface.d.ts +179 -0
- package/dist/esm/excel-parser/interface.d.ts.map +1 -0
- package/dist/esm/excel-parser/interface.js +1 -0
- package/dist/esm/excel-parser/plugins/base/index.d.ts +31 -0
- package/dist/esm/excel-parser/plugins/base/index.d.ts.map +1 -0
- package/dist/esm/excel-parser/plugins/base/index.js +64 -0
- package/dist/esm/excel-parser/plugins/ods/conditional-formatting.d.ts +16 -0
- package/dist/esm/excel-parser/plugins/ods/conditional-formatting.d.ts.map +1 -0
- package/dist/esm/excel-parser/plugins/ods/conditional-formatting.js +405 -0
- package/dist/esm/excel-parser/plugins/ods/data-validations.d.ts +15 -0
- package/dist/esm/excel-parser/plugins/ods/data-validations.d.ts.map +1 -0
- package/dist/esm/excel-parser/plugins/ods/data-validations.js +331 -0
- package/dist/esm/excel-parser/plugins/ods/formula.d.ts +8 -0
- package/dist/esm/excel-parser/plugins/ods/formula.d.ts.map +1 -0
- package/dist/esm/excel-parser/plugins/ods/formula.js +82 -0
- package/dist/esm/excel-parser/plugins/ods/index.d.ts +122 -0
- package/dist/esm/excel-parser/plugins/ods/index.d.ts.map +1 -0
- package/dist/esm/excel-parser/plugins/ods/index.js +2896 -0
- package/dist/esm/excel-parser/plugins/ods/sparklines.d.ts +25 -0
- package/dist/esm/excel-parser/plugins/ods/sparklines.d.ts.map +1 -0
- package/dist/esm/excel-parser/plugins/ods/sparklines.js +188 -0
- package/dist/esm/excel-parser/plugins/ods/styles.d.ts +60 -0
- package/dist/esm/excel-parser/plugins/ods/styles.d.ts.map +1 -0
- package/dist/esm/excel-parser/plugins/ods/styles.js +732 -0
- package/dist/esm/excel-parser/plugins/ods/types.d.ts +7 -0
- package/dist/esm/excel-parser/plugins/ods/types.d.ts.map +1 -0
- package/dist/esm/excel-parser/plugins/ods/types.js +1 -0
- package/dist/esm/excel-parser/plugins/xls/index.d.ts +5 -0
- package/dist/esm/excel-parser/plugins/xls/index.d.ts.map +1 -0
- package/dist/esm/excel-parser/plugins/xls/index.js +7 -0
- package/dist/esm/excel-parser/plugins/xlsb/biff-record-reader.d.ts +13 -0
- package/dist/esm/excel-parser/plugins/xlsb/biff-record-reader.d.ts.map +1 -0
- package/dist/esm/excel-parser/plugins/xlsb/biff-record-reader.js +48 -0
- package/dist/esm/excel-parser/plugins/xlsb/index.d.ts +117 -0
- package/dist/esm/excel-parser/plugins/xlsb/index.d.ts.map +1 -0
- package/dist/esm/excel-parser/plugins/xlsb/index.js +2339 -0
- package/dist/esm/excel-parser/plugins/xlsb/rgce-parser.d.ts +18 -0
- package/dist/esm/excel-parser/plugins/xlsb/rgce-parser.d.ts.map +1 -0
- package/dist/esm/excel-parser/plugins/xlsb/rgce-parser.js +522 -0
- package/dist/esm/excel-parser/plugins/xlsm/index.d.ts +5 -0
- package/dist/esm/excel-parser/plugins/xlsm/index.d.ts.map +1 -0
- package/dist/esm/excel-parser/plugins/xlsm/index.js +6 -0
- package/dist/esm/excel-parser/plugins/xlsx/charts.d.ts +60 -0
- package/dist/esm/excel-parser/plugins/xlsx/charts.d.ts.map +1 -0
- package/dist/esm/excel-parser/plugins/xlsx/charts.js +2036 -0
- package/dist/esm/excel-parser/plugins/xlsx/conditional-formatting.d.ts +18 -0
- package/dist/esm/excel-parser/plugins/xlsx/conditional-formatting.d.ts.map +1 -0
- package/dist/esm/excel-parser/plugins/xlsx/conditional-formatting.js +621 -0
- package/dist/esm/excel-parser/plugins/xlsx/data-validations.d.ts +4 -0
- package/dist/esm/excel-parser/plugins/xlsx/data-validations.d.ts.map +1 -0
- package/dist/esm/excel-parser/plugins/xlsx/data-validations.js +493 -0
- package/dist/esm/excel-parser/plugins/xlsx/drawing.d.ts +39 -0
- package/dist/esm/excel-parser/plugins/xlsx/drawing.d.ts.map +1 -0
- package/dist/esm/excel-parser/plugins/xlsx/drawing.js +905 -0
- package/dist/esm/excel-parser/plugins/xlsx/index.d.ts +320 -0
- package/dist/esm/excel-parser/plugins/xlsx/index.d.ts.map +1 -0
- package/dist/esm/excel-parser/plugins/xlsx/index.js +4654 -0
- package/dist/esm/excel-parser/plugins/xlsx/numfmt.d.ts +2 -0
- package/dist/esm/excel-parser/plugins/xlsx/numfmt.d.ts.map +1 -0
- package/dist/esm/excel-parser/plugins/xlsx/numfmt.js +3 -0
- package/dist/esm/excel-parser/plugins/xlsx/pivots.d.ts +40 -0
- package/dist/esm/excel-parser/plugins/xlsx/pivots.d.ts.map +1 -0
- package/dist/esm/excel-parser/plugins/xlsx/pivots.js +254 -0
- package/dist/esm/excel-parser/plugins/xlsx/relationships.d.ts +8 -0
- package/dist/esm/excel-parser/plugins/xlsx/relationships.d.ts.map +1 -0
- package/dist/esm/excel-parser/plugins/xlsx/relationships.js +13 -0
- package/dist/esm/excel-parser/plugins/xlsx/sheet-views.d.ts +26 -0
- package/dist/esm/excel-parser/plugins/xlsx/sheet-views.d.ts.map +1 -0
- package/dist/esm/excel-parser/plugins/xlsx/sheet-views.js +64 -0
- package/dist/esm/excel-parser/plugins/xlsx/styles.d.ts +44 -0
- package/dist/esm/excel-parser/plugins/xlsx/styles.d.ts.map +1 -0
- package/dist/esm/excel-parser/plugins/xlsx/styles.js +1365 -0
- package/dist/esm/excel-parser/plugins/xlsx/theme.d.ts +50 -0
- package/dist/esm/excel-parser/plugins/xlsx/theme.d.ts.map +1 -0
- package/dist/esm/excel-parser/plugins/xlsx/theme.js +127 -0
- package/dist/esm/excel-parser/plugins/xlsx/threaded-comments.d.ts +47 -0
- package/dist/esm/excel-parser/plugins/xlsx/threaded-comments.d.ts.map +1 -0
- package/dist/esm/excel-parser/plugins/xlsx/threaded-comments.js +103 -0
- package/dist/esm/excel-parser/plugins/xlsx/value-type-detection.d.ts +44 -0
- package/dist/esm/excel-parser/plugins/xlsx/value-type-detection.d.ts.map +1 -0
- package/dist/esm/excel-parser/plugins/xlsx/value-type-detection.js +399 -0
- package/dist/esm/excel-parser/registry.d.ts +5 -0
- package/dist/esm/excel-parser/registry.d.ts.map +1 -0
- package/dist/esm/excel-parser/registry.js +20 -0
- package/dist/esm/excel-parser/style-registry.d.ts +51 -0
- package/dist/esm/excel-parser/style-registry.d.ts.map +1 -0
- package/dist/esm/excel-parser/style-registry.js +163 -0
- package/dist/esm/excel-parser/theme-default.d.ts +3 -0
- package/dist/esm/excel-parser/theme-default.d.ts.map +1 -0
- package/dist/esm/excel-parser/theme-default.js +19 -0
- package/dist/esm/excel-parser/types.d.ts +365 -0
- package/dist/esm/excel-parser/types.d.ts.map +1 -0
- package/dist/esm/excel-parser/types.js +59 -0
- package/dist/esm/excel-parser/utils.d.ts +6 -0
- package/dist/esm/excel-parser/utils.d.ts.map +1 -0
- package/dist/esm/excel-parser/utils.js +25 -0
- package/dist/esm/excel-parser/workbook.d.ts +51 -0
- package/dist/esm/excel-parser/workbook.d.ts.map +1 -0
- package/dist/esm/excel-parser/workbook.js +192 -0
- package/dist/esm/excel-parser/worker.d.ts +2 -0
- package/dist/esm/excel-parser/worker.d.ts.map +1 -0
- package/dist/esm/excel-parser/worker.js +862 -0
- package/dist/esm/excel-parser/zip-parser-streaming.d.ts +13 -0
- package/dist/esm/excel-parser/zip-parser-streaming.d.ts.map +1 -0
- package/dist/esm/excel-parser/zip-parser-streaming.js +119 -0
- package/dist/esm/excel-parser/zip-parser.d.ts +11 -0
- package/dist/esm/excel-parser/zip-parser.d.ts.map +1 -0
- package/dist/esm/excel-parser/zip-parser.js +43 -0
- package/dist/esm/exporter/invalid-data-validation.d.ts +19 -0
- package/dist/esm/exporter/invalid-data-validation.d.ts.map +1 -0
- package/dist/esm/exporter/invalid-data-validation.js +37 -0
- package/dist/esm/exporter/ods/ods-export.d.ts +26 -0
- package/dist/esm/exporter/ods/ods-export.d.ts.map +1 -0
- package/dist/esm/exporter/ods/ods-export.js +3238 -0
- package/dist/esm/exporter/ods/sparkline-builder.d.ts +33 -0
- package/dist/esm/exporter/ods/sparkline-builder.d.ts.map +1 -0
- package/dist/esm/exporter/ods/sparkline-builder.js +165 -0
- package/dist/esm/exporter/xlsx/chart-builder.d.ts +3 -0
- package/dist/esm/exporter/xlsx/chart-builder.d.ts.map +1 -0
- package/dist/esm/exporter/xlsx/chart-builder.js +1805 -0
- package/dist/esm/exporter/xlsx/chart-templates.d.ts +1781 -0
- package/dist/esm/exporter/xlsx/chart-templates.d.ts.map +1 -0
- package/dist/esm/exporter/xlsx/chart-templates.js +1798 -0
- package/dist/esm/exporter/xlsx/future-functions.d.ts +10 -0
- package/dist/esm/exporter/xlsx/future-functions.d.ts.map +1 -0
- package/dist/esm/exporter/xlsx/future-functions.js +264 -0
- package/dist/esm/exporter/xlsx/pivot-builder.d.ts +58 -0
- package/dist/esm/exporter/xlsx/pivot-builder.d.ts.map +1 -0
- package/dist/esm/exporter/xlsx/pivot-builder.js +230 -0
- package/dist/esm/exporter/xlsx/power-query-builder.d.ts +26 -0
- package/dist/esm/exporter/xlsx/power-query-builder.d.ts.map +1 -0
- package/dist/esm/exporter/xlsx/power-query-builder.js +257 -0
- package/dist/esm/exporter/xlsx/slicer-builder.d.ts +11 -0
- package/dist/esm/exporter/xlsx/slicer-builder.d.ts.map +1 -0
- package/dist/esm/exporter/xlsx/slicer-builder.js +84 -0
- package/dist/esm/exporter/xlsx/sparkline-builder.d.ts +61 -0
- package/dist/esm/exporter/xlsx/sparkline-builder.d.ts.map +1 -0
- package/dist/esm/exporter/xlsx/sparkline-builder.js +437 -0
- package/dist/esm/exporter/xlsx/style-builder.d.ts +93 -0
- package/dist/esm/exporter/xlsx/style-builder.d.ts.map +1 -0
- package/dist/esm/exporter/xlsx/style-builder.js +795 -0
- package/dist/esm/exporter/xlsx/threaded-comments-builder.d.ts +58 -0
- package/dist/esm/exporter/xlsx/threaded-comments-builder.d.ts.map +1 -0
- package/dist/esm/exporter/xlsx/threaded-comments-builder.js +175 -0
- package/dist/esm/exporter/xlsx/xlsx-export.d.ts +121 -0
- package/dist/esm/exporter/xlsx/xlsx-export.d.ts.map +1 -0
- package/dist/esm/exporter/xlsx/xlsx-export.js +4062 -0
- package/dist/esm/helpers/theme-xml-generator.d.ts +8 -0
- package/dist/esm/helpers/theme-xml-generator.d.ts.map +1 -0
- package/dist/esm/helpers/theme-xml-generator.js +33 -0
- package/dist/esm/helpers.d.ts +34 -0
- package/dist/esm/helpers.d.ts.map +1 -0
- package/dist/esm/helpers.js +182 -0
- package/dist/esm/index.d.ts +16 -0
- package/dist/esm/index.d.ts.map +1 -0
- package/dist/esm/index.js +15 -0
- package/dist/esm/indexed-colors.d.ts +2 -0
- package/dist/esm/indexed-colors.d.ts.map +1 -0
- package/dist/esm/indexed-colors.js +75 -0
- package/dist/esm/ods-export.d.ts +24 -0
- package/dist/esm/ods-export.d.ts.map +1 -0
- package/dist/esm/ods-export.js +12 -0
- package/dist/esm/parse.d.ts +24 -0
- package/dist/esm/parse.d.ts.map +1 -0
- package/dist/esm/parse.js +55 -0
- package/dist/esm/power-query.d.ts +41 -0
- package/dist/esm/power-query.d.ts.map +1 -0
- package/dist/esm/power-query.js +19 -0
- package/dist/esm/server.d.ts +9 -0
- package/dist/esm/server.d.ts.map +1 -0
- package/dist/esm/server.js +8 -0
- package/dist/esm/theme1.d.ts +3 -0
- package/dist/esm/theme1.d.ts.map +1 -0
- package/dist/esm/theme1.js +2 -0
- package/dist/esm/tsconfig.esm.tsbuildinfo +1 -0
- package/dist/esm/types.d.ts +14 -0
- package/dist/esm/types.d.ts.map +1 -0
- package/dist/esm/types.js +14 -0
- package/dist/esm/vitest.config.d.ts +3 -0
- package/dist/esm/vitest.config.d.ts.map +1 -0
- package/dist/esm/vitest.config.js +16 -0
- package/package.json +62 -0
- package/xlsx.d.ts +52 -0
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { BooleanCondition, CellFormat, ConditionalFormatRule, DistinctRule, TopBottomRule } from "@rowsncolumns/spreadsheet";
|
|
2
|
+
export declare function parseTopBottomCondition(cfRule: any, format: CellFormat): TopBottomRule | undefined;
|
|
3
|
+
export declare function parseDistinctRule(ruleType: string, format: CellFormat): DistinctRule;
|
|
4
|
+
/**
|
|
5
|
+
* Parse a boolean rule condition
|
|
6
|
+
* @param cfRule The conditional formatting rule
|
|
7
|
+
* @returns BooleanCondition object
|
|
8
|
+
*/
|
|
9
|
+
export declare function parseBooleanCondition(cfRule: any): BooleanCondition | undefined;
|
|
10
|
+
/**
|
|
11
|
+
* Get conditional formatting rules from a sheet
|
|
12
|
+
* @param sheetData The sheet data
|
|
13
|
+
* @param sheetId The sheet ID
|
|
14
|
+
* @param workbookStyles The workbook styles
|
|
15
|
+
* @returns Array of ConditionalFormatRule objects
|
|
16
|
+
*/
|
|
17
|
+
export declare function getConditionalFormattingFromSheet(sheetData: any, sheetId: number, workbookStyles: any, indexedColors?: Array<string | undefined>): ConditionalFormatRule[];
|
|
18
|
+
//# sourceMappingURL=conditional-formatting.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"conditional-formatting.d.ts","sourceRoot":"","sources":["../../../../../excel-parser/plugins/xlsx/conditional-formatting.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,gBAAgB,EAChB,UAAU,EAGV,qBAAqB,EAGrB,YAAY,EAKZ,aAAa,EACd,MAAM,2BAA2B,CAAC;AAgLnC,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,GAAG,EACX,MAAM,EAAE,UAAU,GACjB,aAAa,GAAG,SAAS,CAuC3B;AAED,wBAAgB,iBAAiB,CAC/B,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,UAAU,GACjB,YAAY,CAKd;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,GAAG,GACV,gBAAgB,GAAG,SAAS,CAgI9B;AA8KD;;;;;;GAMG;AACH,wBAAgB,iCAAiC,CAC/C,SAAS,EAAE,GAAG,EACd,OAAO,EAAE,MAAM,EACf,cAAc,EAAE,GAAG,EACnB,aAAa,CAAC,EAAE,KAAK,CAAC,MAAM,GAAG,SAAS,CAAC,GACxC,qBAAqB,EAAE,CAsLzB"}
|
|
@@ -0,0 +1,621 @@
|
|
|
1
|
+
import { get, set } from "lodash-es";
|
|
2
|
+
import { getRangeFromAddressRef } from "../../helpers";
|
|
3
|
+
import { extractColor } from "./styles";
|
|
4
|
+
/**
|
|
5
|
+
* Parse cell format from dxf format definition. Theme color
|
|
6
|
+
* references (`<color theme="N" tint="T"/>`) are intentionally
|
|
7
|
+
* preserved as `{ theme, tint }` objects on output — consumers
|
|
8
|
+
* resolve them via `getStringifiedColor(color, theme)` so users can
|
|
9
|
+
* switch themes / dark mode and have CF colors re-resolve.
|
|
10
|
+
* Symmetric with how regular cell `backgroundColor` is stored.
|
|
11
|
+
*
|
|
12
|
+
* @param dxf The differential formatting element
|
|
13
|
+
* @param indexedColors Indexed color palette overrides
|
|
14
|
+
* @returns CellFormat object
|
|
15
|
+
*/
|
|
16
|
+
function parseDxfFormat(dxf, indexedColors) {
|
|
17
|
+
const format = {};
|
|
18
|
+
// Font formatting. OOXML boolean flag elements default to TRUE when the `val`
|
|
19
|
+
// attribute is absent, but `val="0"`/`"false"` means explicitly OFF — key presence
|
|
20
|
+
// alone treated `<strike val="0"/>` (an explicit "not struck" dxf font) as struck.
|
|
21
|
+
// Mirrors styles.ts' `isTruthyFlagNode` + its `<u val="none"/>` handling.
|
|
22
|
+
const isTruthyFlagNode = (node) => {
|
|
23
|
+
if (node === undefined || node === null)
|
|
24
|
+
return false;
|
|
25
|
+
const val = typeof node === "object" ? (node.a$?.val ?? node["#text"] ?? node) : node;
|
|
26
|
+
if (val === undefined || val === null || val === true)
|
|
27
|
+
return true;
|
|
28
|
+
const str = String(val).toLowerCase();
|
|
29
|
+
if (str === "" || str === "true" || str === "1")
|
|
30
|
+
return true;
|
|
31
|
+
return false;
|
|
32
|
+
};
|
|
33
|
+
if (dxf.font) {
|
|
34
|
+
if ("b" in dxf.font && isTruthyFlagNode(dxf.font.b)) {
|
|
35
|
+
set(format, "textFormat.bold", true);
|
|
36
|
+
}
|
|
37
|
+
if ("i" in dxf.font && isTruthyFlagNode(dxf.font.i)) {
|
|
38
|
+
set(format, "textFormat.italic", true);
|
|
39
|
+
}
|
|
40
|
+
if ("u" in dxf.font) {
|
|
41
|
+
// Underline is not a boolean — `<u val="none"/>` means no underline; anything
|
|
42
|
+
// else (including an absent val) is some form of underline.
|
|
43
|
+
const uNode = dxf.font.u;
|
|
44
|
+
const uVal = typeof uNode === "object" ? (uNode?.a$?.val ?? uNode?.["#text"]) : uNode;
|
|
45
|
+
const uStr = uVal === undefined || uVal === null ? "" : String(uVal).toLowerCase();
|
|
46
|
+
if (uStr !== "none") {
|
|
47
|
+
set(format, "textFormat.underline", true);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
if ("strike" in dxf.font && isTruthyFlagNode(dxf.font.strike)) {
|
|
51
|
+
set(format, "textFormat.strikethrough", true);
|
|
52
|
+
}
|
|
53
|
+
if (dxf.font.color)
|
|
54
|
+
set(format, "textFormat.color", extractColor(dxf.font.color, indexedColors));
|
|
55
|
+
}
|
|
56
|
+
// Fill formatting
|
|
57
|
+
if (dxf.fill && dxf.fill.patternFill && dxf.fill.patternFill.bgColor) {
|
|
58
|
+
format.backgroundColor = extractColor(dxf.fill.patternFill.bgColor, indexedColors);
|
|
59
|
+
}
|
|
60
|
+
return format;
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Map Excel condition type to our condition type
|
|
64
|
+
* @param cfType Excel conditional formatting type
|
|
65
|
+
* @returns Standardized condition type
|
|
66
|
+
*/
|
|
67
|
+
function mapConditionType(cfType) {
|
|
68
|
+
const typeMap = {
|
|
69
|
+
containsText: "TEXT_CONTAINS",
|
|
70
|
+
notContainsText: "TEXT_NOT_CONTAINS",
|
|
71
|
+
beginsWith: "TEXT_STARTS_WITH",
|
|
72
|
+
endsWith: "TEXT_ENDS_WITH",
|
|
73
|
+
containsBlanks: "BLANK",
|
|
74
|
+
notContainsBlanks: "NOT_BLANK",
|
|
75
|
+
containsErrors: "ERROR",
|
|
76
|
+
notContainsErrors: "NOT_ERROR",
|
|
77
|
+
expression: "CUSTOM_FORMULA",
|
|
78
|
+
};
|
|
79
|
+
return typeMap[cfType] || cfType;
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Map Excel operator to our condition operator
|
|
83
|
+
* @param operator Excel operator
|
|
84
|
+
* @returns Standardized operator
|
|
85
|
+
*/
|
|
86
|
+
function mapOperator(operator) {
|
|
87
|
+
const operatorMap = {
|
|
88
|
+
lessThan: "NUMBER_LESS",
|
|
89
|
+
lessThanOrEqual: "NUMBER_LESS_THAN_EQ",
|
|
90
|
+
equal: "NUMBER_EQ",
|
|
91
|
+
notEqual: "NUMBER_NOT_EQ",
|
|
92
|
+
greaterThanOrEqual: "NUMBER_GREATER_THAN_EQ",
|
|
93
|
+
greaterThan: "NUMBER_GREATER",
|
|
94
|
+
between: "NUMBER_BETWEEN",
|
|
95
|
+
notBetween: "NUMBER_NOT_BETWEEN",
|
|
96
|
+
containsText: "TEXT_CONTAINS",
|
|
97
|
+
};
|
|
98
|
+
return operatorMap[operator] || operator;
|
|
99
|
+
}
|
|
100
|
+
function asArray(entry) {
|
|
101
|
+
if (entry === undefined || entry === null) {
|
|
102
|
+
return [];
|
|
103
|
+
}
|
|
104
|
+
return Array.isArray(entry) ? entry : [entry];
|
|
105
|
+
}
|
|
106
|
+
function extractFormulaText(entry) {
|
|
107
|
+
if (entry === undefined || entry === null) {
|
|
108
|
+
return undefined;
|
|
109
|
+
}
|
|
110
|
+
if (typeof entry === "string" || typeof entry === "number") {
|
|
111
|
+
return String(entry);
|
|
112
|
+
}
|
|
113
|
+
if (typeof entry === "object") {
|
|
114
|
+
const textNode = (typeof entry.t$ === "string" && entry.t$) ||
|
|
115
|
+
(typeof entry._text === "string" && entry._text) ||
|
|
116
|
+
(typeof entry["#text"] === "string" && entry["#text"]);
|
|
117
|
+
const attributeFormula = typeof entry?.a$?.["xm:f"] === "string" ? entry.a$["xm:f"] : undefined;
|
|
118
|
+
if (textNode && !textNode.trim().startsWith("#REF!")) {
|
|
119
|
+
return textNode;
|
|
120
|
+
}
|
|
121
|
+
if (attributeFormula && attributeFormula.trim()) {
|
|
122
|
+
return attributeFormula;
|
|
123
|
+
}
|
|
124
|
+
if (textNode) {
|
|
125
|
+
return textNode;
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
return undefined;
|
|
129
|
+
}
|
|
130
|
+
function normalizeFormulaExpression(entry) {
|
|
131
|
+
const text = extractFormulaText(entry);
|
|
132
|
+
if (text === undefined) {
|
|
133
|
+
return undefined;
|
|
134
|
+
}
|
|
135
|
+
const trimmed = text.trim();
|
|
136
|
+
if (!trimmed) {
|
|
137
|
+
return undefined;
|
|
138
|
+
}
|
|
139
|
+
return trimmed.startsWith("=") ? trimmed : `=${trimmed}`;
|
|
140
|
+
}
|
|
141
|
+
export function parseTopBottomCondition(cfRule, format) {
|
|
142
|
+
if (!cfRule) {
|
|
143
|
+
return undefined;
|
|
144
|
+
}
|
|
145
|
+
const ruleAttributes = cfRule.a$ ?? {};
|
|
146
|
+
const top10Node = cfRule.top10 ?? cfRule["x:top10"];
|
|
147
|
+
const top10Attributes = top10Node?.a$ ?? {};
|
|
148
|
+
const attributes = {
|
|
149
|
+
...ruleAttributes,
|
|
150
|
+
...top10Attributes,
|
|
151
|
+
};
|
|
152
|
+
const rankAttr = attributes.rank ??
|
|
153
|
+
attributes.val ??
|
|
154
|
+
attributes.value ??
|
|
155
|
+
attributes.rankNumber;
|
|
156
|
+
const rank = rankAttr !== undefined && !Number.isNaN(Number(rankAttr))
|
|
157
|
+
? Number(rankAttr)
|
|
158
|
+
: 10;
|
|
159
|
+
if (!Number.isFinite(rank) || rank <= 0) {
|
|
160
|
+
return undefined;
|
|
161
|
+
}
|
|
162
|
+
const percentAttr = attributes.percent ?? attributes.isPercent;
|
|
163
|
+
const bottomAttr = attributes.bottom ?? attributes.isBottom;
|
|
164
|
+
const isPercent = percentAttr === "1" || percentAttr === "true";
|
|
165
|
+
const isBottom = bottomAttr === "1" || bottomAttr === "true";
|
|
166
|
+
return {
|
|
167
|
+
type: isBottom ? "BOTTOM" : "TOP",
|
|
168
|
+
rank,
|
|
169
|
+
isPercent,
|
|
170
|
+
format,
|
|
171
|
+
};
|
|
172
|
+
}
|
|
173
|
+
export function parseDistinctRule(ruleType, format) {
|
|
174
|
+
return {
|
|
175
|
+
type: ruleType === "duplicateValues" ? "DUPLICATE" : "UNIQUE",
|
|
176
|
+
format,
|
|
177
|
+
};
|
|
178
|
+
}
|
|
179
|
+
/**
|
|
180
|
+
* Parse a boolean rule condition
|
|
181
|
+
* @param cfRule The conditional formatting rule
|
|
182
|
+
* @returns BooleanCondition object
|
|
183
|
+
*/
|
|
184
|
+
export function parseBooleanCondition(cfRule) {
|
|
185
|
+
const rawType = cfRule.a$.type;
|
|
186
|
+
if (!rawType) {
|
|
187
|
+
return undefined;
|
|
188
|
+
}
|
|
189
|
+
if (rawType === "timePeriod") {
|
|
190
|
+
const periodMap = {
|
|
191
|
+
today: "DATE_TODAY",
|
|
192
|
+
yesterday: "DATE_YESTERDAY",
|
|
193
|
+
tomorrow: "DATE_TOMORROW",
|
|
194
|
+
last7Days: "DATE_LAST_7_DAYS",
|
|
195
|
+
lastWeek: "DATE_LAST_WEEK",
|
|
196
|
+
thisWeek: "DATE_THIS_WEEK",
|
|
197
|
+
nextWeek: "DATE_NEXT_WEEK",
|
|
198
|
+
lastMonth: "DATE_LAST_MONTH",
|
|
199
|
+
thisMonth: "DATE_THIS_MONTH",
|
|
200
|
+
nextMonth: "DATE_NEXT_MONTH",
|
|
201
|
+
};
|
|
202
|
+
const mapped = periodMap[String(cfRule.a$.timePeriod ?? "")];
|
|
203
|
+
if (!mapped) {
|
|
204
|
+
return undefined;
|
|
205
|
+
}
|
|
206
|
+
return { type: mapped };
|
|
207
|
+
}
|
|
208
|
+
if (rawType === "aboveAverage") {
|
|
209
|
+
const aboveAverage = String(cfRule.a$.aboveAverage ?? "1") !== "0";
|
|
210
|
+
return {
|
|
211
|
+
type: aboveAverage ? "NUMBER_ABOVE_AVERAGE" : "NUMBER_BELOW_AVERAGE",
|
|
212
|
+
};
|
|
213
|
+
}
|
|
214
|
+
const type = mapConditionType(rawType);
|
|
215
|
+
if (!type) {
|
|
216
|
+
return undefined;
|
|
217
|
+
}
|
|
218
|
+
const condition = {
|
|
219
|
+
type,
|
|
220
|
+
};
|
|
221
|
+
// Parse operators and values
|
|
222
|
+
const operator = cfRule.a$.operator;
|
|
223
|
+
if (cfRule.a$.operator) {
|
|
224
|
+
condition.type = mapOperator(cfRule.a$.operator);
|
|
225
|
+
}
|
|
226
|
+
// Parse formula values
|
|
227
|
+
const values = [];
|
|
228
|
+
// Handle both with and without namespace prefix
|
|
229
|
+
const formulaEntries = asArray(cfRule.formula ?? cfRule["x:formula"]);
|
|
230
|
+
const formula1Entries = asArray(cfRule.formula1 ?? cfRule["x:formula1"]);
|
|
231
|
+
const formula2Entries = asArray(cfRule.formula2 ?? cfRule["x:formula2"]);
|
|
232
|
+
const effectiveFormulaEntries = formulaEntries.length > 0
|
|
233
|
+
? formulaEntries
|
|
234
|
+
: [...formula1Entries, ...formula2Entries];
|
|
235
|
+
if (condition.type === "CUSTOM_FORMULA") {
|
|
236
|
+
effectiveFormulaEntries.forEach((entry) => {
|
|
237
|
+
const normalized = normalizeFormulaExpression(entry);
|
|
238
|
+
if (normalized !== undefined) {
|
|
239
|
+
values.push({ userEnteredValue: normalized });
|
|
240
|
+
}
|
|
241
|
+
});
|
|
242
|
+
}
|
|
243
|
+
else if (["containsText", "notContainsText", "beginsWith", "endsWith"].includes(rawType)) {
|
|
244
|
+
// Prefer text attribute for text based rules, ignore implementation formula
|
|
245
|
+
if (cfRule.a$.text) {
|
|
246
|
+
values.push({ userEnteredValue: cfRule.a$.text });
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
else if ([
|
|
250
|
+
"containsBlanks",
|
|
251
|
+
"notContainsBlanks",
|
|
252
|
+
"containsErrors",
|
|
253
|
+
"notContainsErrors",
|
|
254
|
+
].includes(rawType)) {
|
|
255
|
+
// Ignore values for these rules
|
|
256
|
+
}
|
|
257
|
+
else {
|
|
258
|
+
// Default behavior (e.g. cellIs): use formula values as literals
|
|
259
|
+
let hasQuotedTextLiteral = false;
|
|
260
|
+
effectiveFormulaEntries.forEach((entry) => {
|
|
261
|
+
const text = extractFormulaText(entry);
|
|
262
|
+
if (text !== undefined) {
|
|
263
|
+
const trimmed = text.trim();
|
|
264
|
+
const isQuoted = (trimmed.startsWith('"') && trimmed.endsWith('"')) ||
|
|
265
|
+
(trimmed.startsWith("'") && trimmed.endsWith("'"));
|
|
266
|
+
// Check if numeric (simple check)
|
|
267
|
+
const isNumeric = !isNaN(Number(trimmed));
|
|
268
|
+
if (isQuoted) {
|
|
269
|
+
// Quoted string literal -> Scalar string
|
|
270
|
+
hasQuotedTextLiteral = true;
|
|
271
|
+
values.push({ userEnteredValue: trimmed.slice(1, -1) });
|
|
272
|
+
}
|
|
273
|
+
else if (isNumeric) {
|
|
274
|
+
// Numeric literal -> Scalar number
|
|
275
|
+
values.push({ userEnteredValue: trimmed });
|
|
276
|
+
}
|
|
277
|
+
else {
|
|
278
|
+
// Reference or Formula -> Formula value (prepend =)
|
|
279
|
+
const val = trimmed.startsWith("=") ? trimmed : `=${trimmed}`;
|
|
280
|
+
values.push({ userEnteredValue: val });
|
|
281
|
+
}
|
|
282
|
+
}
|
|
283
|
+
});
|
|
284
|
+
if (values.length === 0 && cfRule.a$.text) {
|
|
285
|
+
hasQuotedTextLiteral = true;
|
|
286
|
+
values.push({ userEnteredValue: cfRule.a$.text });
|
|
287
|
+
}
|
|
288
|
+
if (rawType === "cellIs" &&
|
|
289
|
+
hasQuotedTextLiteral &&
|
|
290
|
+
(operator === "equal" || operator === "notEqual")) {
|
|
291
|
+
condition.type = operator === "equal" ? "TEXT_EQ" : "TEXT_NOT_EQ";
|
|
292
|
+
}
|
|
293
|
+
}
|
|
294
|
+
if (values.length > 0) {
|
|
295
|
+
condition.values = values;
|
|
296
|
+
}
|
|
297
|
+
return condition;
|
|
298
|
+
}
|
|
299
|
+
/**
|
|
300
|
+
* Parse color scale rule
|
|
301
|
+
* @param cfRule The conditional formatting rule
|
|
302
|
+
* @param dxfs The differential formatting styles
|
|
303
|
+
* @param workbookStyles The workbook styles
|
|
304
|
+
* @returns GradientRule object
|
|
305
|
+
*/
|
|
306
|
+
function parseColorScaleRule(cfRule, indexedColors) {
|
|
307
|
+
const gradientRule = {};
|
|
308
|
+
// Handle both with and without namespace prefix
|
|
309
|
+
const colorScale = cfRule.colorScale ?? cfRule["x:colorScale"];
|
|
310
|
+
if (!colorScale)
|
|
311
|
+
return gradientRule;
|
|
312
|
+
const cfColors = colorScale.color ?? colorScale["x:color"] ?? [];
|
|
313
|
+
const cfValues = colorScale.cfvo ?? colorScale["x:cfvo"] ?? [];
|
|
314
|
+
const colorsArray = Array.isArray(cfColors) ? cfColors : [cfColors];
|
|
315
|
+
const valuesArray = Array.isArray(cfValues) ? cfValues : [cfValues];
|
|
316
|
+
// Parse min point
|
|
317
|
+
if (valuesArray.length > 0 && colorsArray.length > 0) {
|
|
318
|
+
const minValue = valuesArray[0];
|
|
319
|
+
const minValueType = minValue.a$.type.toUpperCase();
|
|
320
|
+
gradientRule.minpoint = {
|
|
321
|
+
color: extractColor(colorsArray[0], indexedColors),
|
|
322
|
+
type: minValueType,
|
|
323
|
+
};
|
|
324
|
+
if (minValue.a$.val) {
|
|
325
|
+
set(gradientRule, "minpoint.value", minValue.a$.val);
|
|
326
|
+
}
|
|
327
|
+
}
|
|
328
|
+
// Parse mid point (if exists)
|
|
329
|
+
if (valuesArray.length > 2 && colorsArray.length > 2) {
|
|
330
|
+
const midValue = valuesArray[1];
|
|
331
|
+
const midValueType = midValue.a$.type.toUpperCase();
|
|
332
|
+
gradientRule.midpoint = {
|
|
333
|
+
color: extractColor(colorsArray[1], indexedColors),
|
|
334
|
+
type: midValueType,
|
|
335
|
+
};
|
|
336
|
+
if (midValue.a$.val) {
|
|
337
|
+
set(gradientRule, "midpoint.value", midValue.a$.val);
|
|
338
|
+
}
|
|
339
|
+
}
|
|
340
|
+
// Parse max point
|
|
341
|
+
if (valuesArray.length > 1 && colorsArray.length > 1) {
|
|
342
|
+
const maxIndex = valuesArray.length - 1;
|
|
343
|
+
const maxValue = valuesArray[maxIndex];
|
|
344
|
+
const maxValueType = maxValue.a$.type.toUpperCase();
|
|
345
|
+
gradientRule.maxpoint = {
|
|
346
|
+
color: extractColor(colorsArray[maxIndex], indexedColors),
|
|
347
|
+
type: maxValueType,
|
|
348
|
+
};
|
|
349
|
+
if (maxValue.a$.val) {
|
|
350
|
+
set(gradientRule, "maxpoint.value", maxValue.a$.val);
|
|
351
|
+
}
|
|
352
|
+
}
|
|
353
|
+
return gradientRule;
|
|
354
|
+
}
|
|
355
|
+
// Map OOXML cfvo type → engine threshold type. OOXML uses lowercase strings;
|
|
356
|
+
// our engine uses uppercase enum values.
|
|
357
|
+
function mapCfvoType(rawType) {
|
|
358
|
+
const t = (rawType ?? "").toLowerCase();
|
|
359
|
+
if (t === "min")
|
|
360
|
+
return "MIN";
|
|
361
|
+
if (t === "max")
|
|
362
|
+
return "MAX";
|
|
363
|
+
if (t === "num")
|
|
364
|
+
return "NUMBER";
|
|
365
|
+
if (t === "percent")
|
|
366
|
+
return "PERCENT";
|
|
367
|
+
if (t === "percentile")
|
|
368
|
+
return "PERCENTILE";
|
|
369
|
+
if (t === "formula")
|
|
370
|
+
return "FORMULA";
|
|
371
|
+
return "NUMBER";
|
|
372
|
+
}
|
|
373
|
+
function parseCfvoArray(cfvos) {
|
|
374
|
+
if (!cfvos)
|
|
375
|
+
return [];
|
|
376
|
+
const array = Array.isArray(cfvos) ? cfvos : [cfvos];
|
|
377
|
+
return array.map((v) => ({
|
|
378
|
+
type: mapCfvoType(v?.a$?.type),
|
|
379
|
+
...(v?.a$?.val !== undefined ? { value: v.a$.val } : {}),
|
|
380
|
+
}));
|
|
381
|
+
}
|
|
382
|
+
const KNOWN_ICON_SET_FAMILIES = new Set([
|
|
383
|
+
"3Arrows",
|
|
384
|
+
"3ArrowsGray",
|
|
385
|
+
"3Flags",
|
|
386
|
+
"3TrafficLights1",
|
|
387
|
+
"3TrafficLights2",
|
|
388
|
+
"3Signs",
|
|
389
|
+
"3Symbols",
|
|
390
|
+
"3Symbols2",
|
|
391
|
+
"4Arrows",
|
|
392
|
+
"4ArrowsGray",
|
|
393
|
+
"4RedToBlack",
|
|
394
|
+
"4Rating",
|
|
395
|
+
"4TrafficLights",
|
|
396
|
+
"5Arrows",
|
|
397
|
+
"5ArrowsGray",
|
|
398
|
+
"5Rating",
|
|
399
|
+
"5Quarters",
|
|
400
|
+
]);
|
|
401
|
+
function parseIconSetRule(cfRule) {
|
|
402
|
+
const iconSet = cfRule.iconSet ?? cfRule["x:iconSet"];
|
|
403
|
+
if (!iconSet)
|
|
404
|
+
return null;
|
|
405
|
+
const familyRaw = iconSet?.a$?.iconSet ?? "3TrafficLights1";
|
|
406
|
+
const family = (KNOWN_ICON_SET_FAMILIES.has(familyRaw) ? familyRaw : "3TrafficLights1");
|
|
407
|
+
const cfvos = iconSet.cfvo ?? iconSet["x:cfvo"];
|
|
408
|
+
const thresholds = parseCfvoArray(cfvos);
|
|
409
|
+
// OOXML always includes a leading "MIN/0%" cfvo for icon sets; drop it
|
|
410
|
+
// because the engine treats thresholds[i] as the lower bound for bucket i+1.
|
|
411
|
+
const effective = thresholds.length > 1 ? thresholds.slice(1) : thresholds;
|
|
412
|
+
const rule = {
|
|
413
|
+
iconSet: family,
|
|
414
|
+
thresholds: effective,
|
|
415
|
+
};
|
|
416
|
+
if (iconSet.a$?.reverse === "1")
|
|
417
|
+
rule.reverse = true;
|
|
418
|
+
if (iconSet.a$?.showValue === "0")
|
|
419
|
+
rule.showValue = false;
|
|
420
|
+
return rule;
|
|
421
|
+
}
|
|
422
|
+
function parseDataBarRule(cfRule, indexedColors) {
|
|
423
|
+
const dataBar = cfRule.dataBar ?? cfRule["x:dataBar"];
|
|
424
|
+
if (!dataBar)
|
|
425
|
+
return null;
|
|
426
|
+
const cfvos = parseCfvoArray(dataBar.cfvo ?? dataBar["x:cfvo"]);
|
|
427
|
+
if (cfvos.length < 2)
|
|
428
|
+
return null;
|
|
429
|
+
const colorNode = dataBar.color ?? dataBar["x:color"];
|
|
430
|
+
const color = extractColor(Array.isArray(colorNode) ? colorNode[0] : colorNode, indexedColors);
|
|
431
|
+
if (!color)
|
|
432
|
+
return null;
|
|
433
|
+
const rule = {
|
|
434
|
+
minpoint: cfvos[0],
|
|
435
|
+
maxpoint: cfvos[cfvos.length - 1],
|
|
436
|
+
color,
|
|
437
|
+
};
|
|
438
|
+
if (dataBar.a$?.showValue === "0")
|
|
439
|
+
rule.showValue = false;
|
|
440
|
+
return rule;
|
|
441
|
+
}
|
|
442
|
+
/**
|
|
443
|
+
* Get conditional formatting rules from a sheet
|
|
444
|
+
* @param sheetData The sheet data
|
|
445
|
+
* @param sheetId The sheet ID
|
|
446
|
+
* @param workbookStyles The workbook styles
|
|
447
|
+
* @returns Array of ConditionalFormatRule objects
|
|
448
|
+
*/
|
|
449
|
+
export function getConditionalFormattingFromSheet(sheetData, sheetId, workbookStyles, indexedColors) {
|
|
450
|
+
const conditionalFormatRules = [];
|
|
451
|
+
// Get conditional formatting entries
|
|
452
|
+
// Handle both with and without namespace prefix
|
|
453
|
+
const conditionalFormattingEntries = get(sheetData, "worksheet.conditionalFormatting") ||
|
|
454
|
+
get(sheetData, "x:worksheet.x:conditionalFormatting");
|
|
455
|
+
if (!conditionalFormattingEntries)
|
|
456
|
+
return [];
|
|
457
|
+
// Normalize to array
|
|
458
|
+
const cfEntries = Array.isArray(conditionalFormattingEntries)
|
|
459
|
+
? conditionalFormattingEntries
|
|
460
|
+
: [conditionalFormattingEntries];
|
|
461
|
+
// Get dxfs (differential formatting) if available
|
|
462
|
+
const dxfs = get(workbookStyles, "dxfs.dxf") || [];
|
|
463
|
+
const dxfsArray = Array.isArray(dxfs) ? dxfs : [dxfs];
|
|
464
|
+
// Process each conditional formatting entry
|
|
465
|
+
cfEntries.forEach((cfEntry, index) => {
|
|
466
|
+
// Get the range(s) this formatting applies to
|
|
467
|
+
const sqref = cfEntry.a$ && cfEntry.a$.sqref;
|
|
468
|
+
if (!sqref)
|
|
469
|
+
return;
|
|
470
|
+
// Split multiple ranges (Excel uses space as delimiter)
|
|
471
|
+
const rangeAddresses = sqref.split(" ");
|
|
472
|
+
const ranges = [];
|
|
473
|
+
// Convert each Excel range to our SheetRange format
|
|
474
|
+
rangeAddresses.forEach((address) => {
|
|
475
|
+
const range = getRangeFromAddressRef(address);
|
|
476
|
+
if (range) {
|
|
477
|
+
ranges.push({
|
|
478
|
+
...range,
|
|
479
|
+
sheetId,
|
|
480
|
+
});
|
|
481
|
+
}
|
|
482
|
+
});
|
|
483
|
+
if (ranges.length === 0)
|
|
484
|
+
return;
|
|
485
|
+
// Get the formatting rules
|
|
486
|
+
// Handle both with and without namespace prefix
|
|
487
|
+
const cfRules = cfEntry.cfRule ?? cfEntry["x:cfRule"] ?? [];
|
|
488
|
+
const cfRulesArray = Array.isArray(cfRules) ? cfRules : [cfRules];
|
|
489
|
+
// Process each rule
|
|
490
|
+
cfRulesArray.forEach((cfRule, ruleIndex) => {
|
|
491
|
+
const rule = {
|
|
492
|
+
id: `${sheetId}_${index}_${ruleIndex}`,
|
|
493
|
+
ranges,
|
|
494
|
+
};
|
|
495
|
+
if (cfRule.a$?.priority !== undefined) {
|
|
496
|
+
const parsedPriority = Number.parseInt(cfRule.a$.priority, 10);
|
|
497
|
+
if (!Number.isNaN(parsedPriority)) {
|
|
498
|
+
rule.priority = parsedPriority;
|
|
499
|
+
}
|
|
500
|
+
}
|
|
501
|
+
if (cfRule.a$?.stopIfTrue === "1") {
|
|
502
|
+
rule.stopIfTrue = true;
|
|
503
|
+
}
|
|
504
|
+
// Check if rule is disabled
|
|
505
|
+
if (cfRule.a$ && cfRule.a$.disabled === "1") {
|
|
506
|
+
rule.enabled = false;
|
|
507
|
+
}
|
|
508
|
+
// Process different rule types
|
|
509
|
+
const ruleType = cfRule.a$.type;
|
|
510
|
+
// Capture the verbatim source representation so the exporter can replay
|
|
511
|
+
// it exactly — preserves cfRule `type` (`containsText`/`beginsWith`/
|
|
512
|
+
// `timePeriod`/etc.), the original operator, the user's formula text,
|
|
513
|
+
// and rule attrs (`text`, `rank`, `percent`, `aboveAverage`, etc.) that
|
|
514
|
+
// would otherwise be lost when the rule round-trips through the
|
|
515
|
+
// synthesizing exporter. For `colorScale`/`dataBar`/`iconSet` rules,
|
|
516
|
+
// the relevant data lives in nested child elements with stop points,
|
|
517
|
+
// colors, and value thresholds — capture those subtrees opaquely so
|
|
518
|
+
// the exporter can re-emit them via XMLBuilder verbatim.
|
|
519
|
+
if (ruleType) {
|
|
520
|
+
const formulaNodes = cfRule.formula ?? cfRule["x:formula"];
|
|
521
|
+
const formulaArray = formulaNodes
|
|
522
|
+
? Array.isArray(formulaNodes)
|
|
523
|
+
? formulaNodes
|
|
524
|
+
: [formulaNodes]
|
|
525
|
+
: [];
|
|
526
|
+
const formulas = [];
|
|
527
|
+
for (const fNode of formulaArray) {
|
|
528
|
+
const text = extractFormulaText(fNode);
|
|
529
|
+
if (text !== undefined && String(text).length > 0) {
|
|
530
|
+
const trimmed = String(text).trim();
|
|
531
|
+
formulas.push(trimmed.startsWith("=") ? trimmed.slice(1) : trimmed);
|
|
532
|
+
}
|
|
533
|
+
}
|
|
534
|
+
const numericAttr = (key) => {
|
|
535
|
+
if (cfRule.a$?.[key] === undefined)
|
|
536
|
+
return undefined;
|
|
537
|
+
const n = Number(cfRule.a$[key]);
|
|
538
|
+
return Number.isFinite(n) ? n : undefined;
|
|
539
|
+
};
|
|
540
|
+
const colorScaleNode = cfRule.colorScale ?? cfRule["x:colorScale"];
|
|
541
|
+
const dataBarNode = cfRule.dataBar ?? cfRule["x:dataBar"];
|
|
542
|
+
const iconSetNode = cfRule.iconSet ?? cfRule["x:iconSet"];
|
|
543
|
+
rule.xlsxSource = {
|
|
544
|
+
type: ruleType,
|
|
545
|
+
...(cfRule.a$.operator
|
|
546
|
+
? { operator: cfRule.a$.operator }
|
|
547
|
+
: {}),
|
|
548
|
+
...(cfRule.a$.text ? { text: cfRule.a$.text } : {}),
|
|
549
|
+
...(cfRule.a$.timePeriod
|
|
550
|
+
? { timePeriod: cfRule.a$.timePeriod }
|
|
551
|
+
: {}),
|
|
552
|
+
...(numericAttr("rank") !== undefined
|
|
553
|
+
? { rank: numericAttr("rank") }
|
|
554
|
+
: {}),
|
|
555
|
+
...(cfRule.a$.percent === "1" ? { percent: true } : {}),
|
|
556
|
+
...(cfRule.a$.bottom === "1" ? { bottom: true } : {}),
|
|
557
|
+
...(cfRule.a$.aboveAverage === "0"
|
|
558
|
+
? { aboveAverage: false }
|
|
559
|
+
: cfRule.a$.aboveAverage === "1"
|
|
560
|
+
? { aboveAverage: true }
|
|
561
|
+
: {}),
|
|
562
|
+
...(cfRule.a$.equalAverage === "1"
|
|
563
|
+
? { equalAverage: true }
|
|
564
|
+
: {}),
|
|
565
|
+
...(numericAttr("stdDev") !== undefined
|
|
566
|
+
? { stdDev: numericAttr("stdDev") }
|
|
567
|
+
: {}),
|
|
568
|
+
...(formulas.length ? { formulas } : {}),
|
|
569
|
+
...(colorScaleNode ? { colorScale: colorScaleNode } : {}),
|
|
570
|
+
...(dataBarNode ? { dataBar: dataBarNode } : {}),
|
|
571
|
+
...(iconSetNode ? { iconSet: iconSetNode } : {}),
|
|
572
|
+
};
|
|
573
|
+
}
|
|
574
|
+
// Handle color scale (gradient) rules
|
|
575
|
+
if (ruleType === "colorScale") {
|
|
576
|
+
rule.gradientRule = parseColorScaleRule(cfRule, indexedColors);
|
|
577
|
+
}
|
|
578
|
+
else if (ruleType === "iconSet") {
|
|
579
|
+
const parsed = parseIconSetRule(cfRule);
|
|
580
|
+
if (parsed)
|
|
581
|
+
rule.iconSetRule = parsed;
|
|
582
|
+
}
|
|
583
|
+
else if (ruleType === "dataBar") {
|
|
584
|
+
const parsed = parseDataBarRule(cfRule, indexedColors);
|
|
585
|
+
if (parsed)
|
|
586
|
+
rule.dataBarRule = parsed;
|
|
587
|
+
}
|
|
588
|
+
else {
|
|
589
|
+
// Get formatting from dxf if available
|
|
590
|
+
let format = {};
|
|
591
|
+
if (cfRule.a$.dxfId !== undefined) {
|
|
592
|
+
const dxfId = parseInt(cfRule.a$.dxfId);
|
|
593
|
+
if (dxfId >= 0 && dxfId < dxfsArray.length) {
|
|
594
|
+
format = parseDxfFormat(dxfsArray[dxfId], indexedColors);
|
|
595
|
+
}
|
|
596
|
+
}
|
|
597
|
+
if (ruleType === "top10") {
|
|
598
|
+
const topBottomRule = parseTopBottomCondition(cfRule, format);
|
|
599
|
+
if (topBottomRule) {
|
|
600
|
+
rule.topBottomRule = topBottomRule;
|
|
601
|
+
}
|
|
602
|
+
}
|
|
603
|
+
else if (ruleType === "duplicateValues" ||
|
|
604
|
+
ruleType === "uniqueValues") {
|
|
605
|
+
rule.distinctRule = parseDistinctRule(ruleType, format);
|
|
606
|
+
}
|
|
607
|
+
else {
|
|
608
|
+
const condition = parseBooleanCondition(cfRule);
|
|
609
|
+
if (condition) {
|
|
610
|
+
rule.booleanRule = {
|
|
611
|
+
condition,
|
|
612
|
+
format,
|
|
613
|
+
};
|
|
614
|
+
}
|
|
615
|
+
}
|
|
616
|
+
}
|
|
617
|
+
conditionalFormatRules.push(rule);
|
|
618
|
+
});
|
|
619
|
+
});
|
|
620
|
+
return conditionalFormatRules;
|
|
621
|
+
}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { DataValidationRuleRecord } from "@rowsncolumns/spreadsheet";
|
|
2
|
+
import type { IWorkbookPlugin } from "../../interface";
|
|
3
|
+
export declare const getDataValidationsForSheet: (workbook: IWorkbookPlugin, sheetId: number, sheet_data: any, sheetName?: string) => DataValidationRuleRecord[];
|
|
4
|
+
//# sourceMappingURL=data-validations.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"data-validations.d.ts","sourceRoot":"","sources":["../../../../../excel-parser/plugins/xlsx/data-validations.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAIV,wBAAwB,EAEzB,MAAM,2BAA2B,CAAC;AASnC,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAwSvD,eAAO,MAAM,0BAA0B,GACrC,UAAU,eAAe,EACzB,SAAS,MAAM,EACf,YAAY,GAAG,EACf,YAAY,MAAM,+BAyRnB,CAAC"}
|