@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,493 @@
|
|
|
1
|
+
import { addressToSelection, checkIfStringIsReference, cellToAddress, } from "@rowsncolumns/utils";
|
|
2
|
+
import { uuid } from "@rowsncolumns/utils";
|
|
3
|
+
import { get } from "lodash-es";
|
|
4
|
+
const formatSheetName = (sheetName) => {
|
|
5
|
+
if (!sheetName) {
|
|
6
|
+
return "";
|
|
7
|
+
}
|
|
8
|
+
return `'${sheetName.replace(/'/g, "''")}'`;
|
|
9
|
+
};
|
|
10
|
+
const ensureSheetReference = (reference, sheetName) => {
|
|
11
|
+
if (!sheetName || reference.includes("!")) {
|
|
12
|
+
return reference;
|
|
13
|
+
}
|
|
14
|
+
const prefix = formatSheetName(sheetName);
|
|
15
|
+
return `${prefix}!${reference}`;
|
|
16
|
+
};
|
|
17
|
+
const extractFormulaText = (entry) => {
|
|
18
|
+
if (entry === undefined || entry === null) {
|
|
19
|
+
return undefined;
|
|
20
|
+
}
|
|
21
|
+
if (typeof entry === "string" || typeof entry === "number") {
|
|
22
|
+
return String(entry);
|
|
23
|
+
}
|
|
24
|
+
if (typeof entry === "object") {
|
|
25
|
+
if (typeof entry.t$ === "string") {
|
|
26
|
+
return entry.t$;
|
|
27
|
+
}
|
|
28
|
+
if (typeof entry._ === "string") {
|
|
29
|
+
return entry._;
|
|
30
|
+
}
|
|
31
|
+
if (typeof entry["#text"] === "string") {
|
|
32
|
+
return entry["#text"];
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
return undefined;
|
|
36
|
+
};
|
|
37
|
+
const normalizeFormulaText = (entry) => {
|
|
38
|
+
const text = extractFormulaText(entry);
|
|
39
|
+
if (text === undefined) {
|
|
40
|
+
return undefined;
|
|
41
|
+
}
|
|
42
|
+
const trimmed = text.trim();
|
|
43
|
+
if (!trimmed)
|
|
44
|
+
return undefined;
|
|
45
|
+
return trimmed.startsWith("=") ? trimmed.slice(1) : trimmed;
|
|
46
|
+
};
|
|
47
|
+
const normalizeOperator = (operator, hasSecondValue) => operator || (hasSecondValue ? "between" : "equal");
|
|
48
|
+
const mapNumberOperatorToCondition = (operator, hasSecondValue) => {
|
|
49
|
+
const normalized = normalizeOperator(operator, hasSecondValue);
|
|
50
|
+
const operatorMap = {
|
|
51
|
+
between: "NUMBER_BETWEEN",
|
|
52
|
+
notBetween: "NUMBER_NOT_BETWEEN",
|
|
53
|
+
equal: "NUMBER_EQ",
|
|
54
|
+
notEqual: "NUMBER_NOT_EQ",
|
|
55
|
+
greaterThan: "NUMBER_GREATER",
|
|
56
|
+
greaterThanOrEqual: "NUMBER_GREATER_THAN_EQ",
|
|
57
|
+
lessThan: "NUMBER_LESS",
|
|
58
|
+
lessThanOrEqual: "NUMBER_LESS_THAN_EQ",
|
|
59
|
+
};
|
|
60
|
+
return operatorMap[normalized];
|
|
61
|
+
};
|
|
62
|
+
const mapDateOperatorToCondition = (operator, hasSecondValue) => {
|
|
63
|
+
const normalized = normalizeOperator(operator, hasSecondValue);
|
|
64
|
+
const operatorMap = {
|
|
65
|
+
between: "DATE_BETWEEN",
|
|
66
|
+
notBetween: "DATE_NOT_BETWEEN",
|
|
67
|
+
equal: "DATE_EQ",
|
|
68
|
+
notEqual: "DATE_NOT_EQ",
|
|
69
|
+
greaterThan: "DATE_AFTER",
|
|
70
|
+
greaterThanOrEqual: "DATE_ON_OR_AFTER",
|
|
71
|
+
lessThan: "DATE_BEFORE",
|
|
72
|
+
lessThanOrEqual: "DATE_ON_OR_BEFORE",
|
|
73
|
+
};
|
|
74
|
+
return operatorMap[normalized];
|
|
75
|
+
};
|
|
76
|
+
const buildTextLengthFormula = (operator, baseCellRef, fromExpr, toExpr) => {
|
|
77
|
+
const lenExpr = `LEN(${baseCellRef})`;
|
|
78
|
+
const normalized = normalizeOperator(operator, Boolean(toExpr));
|
|
79
|
+
if (!fromExpr && normalized !== "between" && normalized !== "notBetween") {
|
|
80
|
+
return undefined;
|
|
81
|
+
}
|
|
82
|
+
switch (normalized) {
|
|
83
|
+
case "between":
|
|
84
|
+
if (!fromExpr || !toExpr)
|
|
85
|
+
return undefined;
|
|
86
|
+
return `AND(${lenExpr}>=${fromExpr},${lenExpr}<=${toExpr})`;
|
|
87
|
+
case "notBetween":
|
|
88
|
+
if (!fromExpr || !toExpr)
|
|
89
|
+
return undefined;
|
|
90
|
+
return `OR(${lenExpr}<${fromExpr},${lenExpr}>${toExpr})`;
|
|
91
|
+
case "equal":
|
|
92
|
+
return `${lenExpr}=${fromExpr}`;
|
|
93
|
+
case "notEqual":
|
|
94
|
+
return `${lenExpr}<>${fromExpr}`;
|
|
95
|
+
case "greaterThan":
|
|
96
|
+
return `${lenExpr}>${fromExpr}`;
|
|
97
|
+
case "greaterThanOrEqual":
|
|
98
|
+
return `${lenExpr}>=${fromExpr}`;
|
|
99
|
+
case "lessThan":
|
|
100
|
+
return `${lenExpr}<${fromExpr}`;
|
|
101
|
+
case "lessThanOrEqual":
|
|
102
|
+
return `${lenExpr}<=${fromExpr}`;
|
|
103
|
+
default:
|
|
104
|
+
return undefined;
|
|
105
|
+
}
|
|
106
|
+
};
|
|
107
|
+
const mapErrorStyle = (style) => {
|
|
108
|
+
if (!style)
|
|
109
|
+
return "stop";
|
|
110
|
+
if (style === "warning")
|
|
111
|
+
return "warning";
|
|
112
|
+
if (style === "information")
|
|
113
|
+
return "information";
|
|
114
|
+
return "stop";
|
|
115
|
+
};
|
|
116
|
+
const NUMBER_VALIDATION_TYPES = new Set(["whole", "decimal", "time"]);
|
|
117
|
+
const escapeRegExp = (value) => value.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
|
|
118
|
+
const parseListValues = (raw) => {
|
|
119
|
+
const trimmed = raw.trim();
|
|
120
|
+
if (!trimmed)
|
|
121
|
+
return [];
|
|
122
|
+
return [parseTextLiteral(trimmed)];
|
|
123
|
+
};
|
|
124
|
+
const parseTextLiteral = (raw) => {
|
|
125
|
+
const trimmed = raw.trim();
|
|
126
|
+
if (!trimmed)
|
|
127
|
+
return "";
|
|
128
|
+
if (trimmed.startsWith('"') && trimmed.endsWith('"')) {
|
|
129
|
+
return trimmed.slice(1, -1).replace(/""/g, '"');
|
|
130
|
+
}
|
|
131
|
+
return trimmed;
|
|
132
|
+
};
|
|
133
|
+
const parseCustomValidationFormula = (rawFormula, baseCellRef) => {
|
|
134
|
+
const formula = rawFormula.trim().startsWith("=")
|
|
135
|
+
? rawFormula.trim().slice(1)
|
|
136
|
+
: rawFormula.trim();
|
|
137
|
+
if (!formula)
|
|
138
|
+
return undefined;
|
|
139
|
+
const baseMatch = /^([A-Z]+)(\d+)$/i.exec(baseCellRef);
|
|
140
|
+
const baseRefPattern = baseMatch
|
|
141
|
+
? `\\$?${baseMatch[1]}\\$?${baseMatch[2]}`
|
|
142
|
+
: escapeRegExp(baseCellRef);
|
|
143
|
+
const basePattern = `(?:${baseRefPattern}|INDIRECT\\("RC",FALSE\\))`;
|
|
144
|
+
const textContains = new RegExp(`^ISNUMBER\\(SEARCH\\((.+),\\s*${basePattern}\\)\\)$`, "i");
|
|
145
|
+
const textNotContains = new RegExp(`^ISERROR\\(SEARCH\\((.+),\\s*${basePattern}\\)\\)$`, "i");
|
|
146
|
+
const textStartsWith = new RegExp(`^LEFT\\(${basePattern},LEN\\((.+)\\)\\)=(.+)$`, "i");
|
|
147
|
+
const textEndsWith = new RegExp(`^RIGHT\\(${basePattern},LEN\\((.+)\\)\\)=(.+)$`, "i");
|
|
148
|
+
const textIsEmail = new RegExp(`^AND\\(ISNUMBER\\(SEARCH\\("@",${basePattern}\\)\\),ISNUMBER\\(SEARCH\\("\\.",${basePattern}\\)\\)\\)$`, "i");
|
|
149
|
+
const textIsUrl = new RegExp(`^OR\\(LEFT\\(${basePattern},7\\)="http://",LEFT\\(${basePattern},8\\)="https://"\\)$`, "i");
|
|
150
|
+
const blank = new RegExp(`^${basePattern}=""$`, "i");
|
|
151
|
+
const notBlank = new RegExp(`^${basePattern}<>""$`, "i");
|
|
152
|
+
const boolean = new RegExp(`^OR\\(${basePattern}=TRUE,${basePattern}=FALSE\\)$`, "i");
|
|
153
|
+
const dateIsValid = new RegExp(`^ISNUMBER\\(${basePattern}\\)$`, "i");
|
|
154
|
+
const previousNumber = new RegExp(`^IFERROR\\(${basePattern}\\s*(>=|<=|>|<)\\s*INDIRECT\\("R\\[-1\\]C",FALSE\\),TRUE\\)$`, "i");
|
|
155
|
+
const oneOfRange = new RegExp(`^COUNTIF\\((.+),\\s*${basePattern}\\)\\s*>\\s*0$`, "i");
|
|
156
|
+
const oneOfList = new RegExp(`^OR\\((.+)\\)$`, "i");
|
|
157
|
+
let match = formula.match(textContains);
|
|
158
|
+
if (match) {
|
|
159
|
+
const value = parseTextLiteral(match[1]);
|
|
160
|
+
return value
|
|
161
|
+
? { type: "TEXT_CONTAINS", values: [{ userEnteredValue: value }] }
|
|
162
|
+
: undefined;
|
|
163
|
+
}
|
|
164
|
+
match = formula.match(textNotContains);
|
|
165
|
+
if (match) {
|
|
166
|
+
const value = parseTextLiteral(match[1]);
|
|
167
|
+
return value
|
|
168
|
+
? { type: "TEXT_NOT_CONTAINS", values: [{ userEnteredValue: value }] }
|
|
169
|
+
: undefined;
|
|
170
|
+
}
|
|
171
|
+
match = formula.match(textStartsWith);
|
|
172
|
+
if (match) {
|
|
173
|
+
const value = parseTextLiteral(match[1]);
|
|
174
|
+
return value
|
|
175
|
+
? { type: "TEXT_STARTS_WITH", values: [{ userEnteredValue: value }] }
|
|
176
|
+
: undefined;
|
|
177
|
+
}
|
|
178
|
+
match = formula.match(textEndsWith);
|
|
179
|
+
if (match) {
|
|
180
|
+
const value = parseTextLiteral(match[1]);
|
|
181
|
+
return value
|
|
182
|
+
? { type: "TEXT_ENDS_WITH", values: [{ userEnteredValue: value }] }
|
|
183
|
+
: undefined;
|
|
184
|
+
}
|
|
185
|
+
if (textIsEmail.test(formula)) {
|
|
186
|
+
return { type: "TEXT_IS_EMAIL", values: [] };
|
|
187
|
+
}
|
|
188
|
+
if (textIsUrl.test(formula)) {
|
|
189
|
+
return { type: "TEXT_IS_URL", values: [] };
|
|
190
|
+
}
|
|
191
|
+
if (blank.test(formula)) {
|
|
192
|
+
return { type: "BLANK", values: [] };
|
|
193
|
+
}
|
|
194
|
+
if (notBlank.test(formula)) {
|
|
195
|
+
return { type: "NOT_BLANK", values: [] };
|
|
196
|
+
}
|
|
197
|
+
if (boolean.test(formula)) {
|
|
198
|
+
return { type: "BOOLEAN", values: [] };
|
|
199
|
+
}
|
|
200
|
+
if (dateIsValid.test(formula)) {
|
|
201
|
+
return { type: "DATE_IS_VALID", values: [] };
|
|
202
|
+
}
|
|
203
|
+
match = formula.match(previousNumber);
|
|
204
|
+
if (match) {
|
|
205
|
+
const op = match[1];
|
|
206
|
+
const opMap = {
|
|
207
|
+
">": "NUMBER_GREATER_THAN_PREVIOUS",
|
|
208
|
+
">=": "NUMBER_GREATER_THAN_EQ_PREVIOUS",
|
|
209
|
+
"<": "NUMBER_LESS_THAN_PREVIOUS",
|
|
210
|
+
"<=": "NUMBER_LESS_THAN_EQ_PREVIOUS",
|
|
211
|
+
};
|
|
212
|
+
const type = opMap[op];
|
|
213
|
+
return type ? { type, values: [] } : undefined;
|
|
214
|
+
}
|
|
215
|
+
match = formula.match(oneOfRange);
|
|
216
|
+
if (match) {
|
|
217
|
+
const rangeRef = match[1].trim();
|
|
218
|
+
return rangeRef
|
|
219
|
+
? { type: "ONE_OF_RANGE", values: [{ userEnteredValue: rangeRef }] }
|
|
220
|
+
: undefined;
|
|
221
|
+
}
|
|
222
|
+
match = formula.match(oneOfList);
|
|
223
|
+
if (match) {
|
|
224
|
+
const entries = [];
|
|
225
|
+
const entryRegex = new RegExp(`${basePattern}\\s*=\\s*([^,\\)]+)`, "gi");
|
|
226
|
+
let entryMatch;
|
|
227
|
+
while ((entryMatch = entryRegex.exec(match[1]))) {
|
|
228
|
+
const value = parseTextLiteral(entryMatch[1]);
|
|
229
|
+
if (value) {
|
|
230
|
+
entries.push({ userEnteredValue: value });
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
if (entries.length) {
|
|
234
|
+
return { type: "ONE_OF_LIST", values: entries };
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
return undefined;
|
|
238
|
+
};
|
|
239
|
+
export const getDataValidationsForSheet = (workbook, sheetId, sheet_data, sheetName) => {
|
|
240
|
+
const dataValidations = [];
|
|
241
|
+
// Handle both with and without namespace prefix
|
|
242
|
+
const validation = get(sheet_data, "worksheet.dataValidations.dataValidation") ||
|
|
243
|
+
get(sheet_data, "x:worksheet.x:dataValidations.x:dataValidation") ||
|
|
244
|
+
[];
|
|
245
|
+
const validations = Array.isArray(validation) ? validation : [validation];
|
|
246
|
+
// x14 (worksheet-extLst) validations — what Excel writes when a list rule's
|
|
247
|
+
// source lives on ANOTHER sheet. Ranges arrive via the `<xm:sqref>` CHILD
|
|
248
|
+
// (not the classic `sqref` attribute) and formulas via
|
|
249
|
+
// `<x14:formula1>/<xm:f>`. Normalize each into the classic node shape so
|
|
250
|
+
// the mapping loop below handles both forms identically.
|
|
251
|
+
const extEntry = get(sheet_data, "worksheet.extLst.ext") ||
|
|
252
|
+
get(sheet_data, "x:worksheet.x:extLst.x:ext") ||
|
|
253
|
+
[];
|
|
254
|
+
const exts = Array.isArray(extEntry) ? extEntry : [extEntry];
|
|
255
|
+
const x14Rules = exts
|
|
256
|
+
.flatMap((ext) => {
|
|
257
|
+
const block = get(ext, "x14:dataValidations.x14:dataValidation") ||
|
|
258
|
+
get(ext, "dataValidations.dataValidation");
|
|
259
|
+
return block ? (Array.isArray(block) ? block : [block]) : [];
|
|
260
|
+
})
|
|
261
|
+
.map((node) => {
|
|
262
|
+
const sqrefEntry = node?.["xm:sqref"] ?? node?.sqref;
|
|
263
|
+
const sqref = (Array.isArray(sqrefEntry) ? sqrefEntry : [sqrefEntry])
|
|
264
|
+
.map((entry) => extractFormulaText(entry)?.trim())
|
|
265
|
+
.filter(Boolean)
|
|
266
|
+
.join(" ");
|
|
267
|
+
if (!sqref) {
|
|
268
|
+
return undefined;
|
|
269
|
+
}
|
|
270
|
+
const formulaText = (formulaNode) => {
|
|
271
|
+
if (formulaNode === undefined || formulaNode === null) {
|
|
272
|
+
return undefined;
|
|
273
|
+
}
|
|
274
|
+
return extractFormulaText(formulaNode?.["xm:f"] ?? formulaNode?.f ?? formulaNode);
|
|
275
|
+
};
|
|
276
|
+
return {
|
|
277
|
+
a$: { ...(node?.a$ ?? {}), sqref },
|
|
278
|
+
formula1: formulaText(node?.["x14:formula1"] ?? node?.formula1),
|
|
279
|
+
formula2: formulaText(node?.["x14:formula2"] ?? node?.formula2),
|
|
280
|
+
};
|
|
281
|
+
})
|
|
282
|
+
.filter(Boolean);
|
|
283
|
+
const namedRanges = workbook.getNamedRanges();
|
|
284
|
+
for (const rule of [...validations, ...x14Rules]) {
|
|
285
|
+
if (!rule?.a$?.sqref) {
|
|
286
|
+
continue;
|
|
287
|
+
}
|
|
288
|
+
const sqref = rule.a$.sqref.split(" ");
|
|
289
|
+
const type = rule.a$.type;
|
|
290
|
+
const ranges = [];
|
|
291
|
+
for (const ref of sqref) {
|
|
292
|
+
const range = addressToSelection(ref)?.range;
|
|
293
|
+
if (range) {
|
|
294
|
+
ranges.push({
|
|
295
|
+
sheetId,
|
|
296
|
+
...range,
|
|
297
|
+
});
|
|
298
|
+
}
|
|
299
|
+
}
|
|
300
|
+
if (!ranges.length) {
|
|
301
|
+
continue;
|
|
302
|
+
}
|
|
303
|
+
const baseCellRef = cellToAddress({
|
|
304
|
+
rowIndex: ranges[0].startRowIndex,
|
|
305
|
+
columnIndex: ranges[0].startColumnIndex,
|
|
306
|
+
}) ?? "A1";
|
|
307
|
+
const allowBlank = rule.a$.allowBlank === "1";
|
|
308
|
+
const showInputMessage = rule.a$.showInputMessage === "1";
|
|
309
|
+
const showErrorMessage = rule.a$.showErrorMessage === "1";
|
|
310
|
+
const inputMessage = showInputMessage && (rule.a$.prompt || rule.a$.promptTitle)
|
|
311
|
+
? {
|
|
312
|
+
title: rule.a$.promptTitle ?? undefined,
|
|
313
|
+
message: rule.a$.prompt ?? undefined,
|
|
314
|
+
}
|
|
315
|
+
: undefined;
|
|
316
|
+
// showErrorMessage alone (no custom title/text) still means "reject
|
|
317
|
+
// invalid input with Excel's default alert" — keep the alert with just
|
|
318
|
+
// its style so the Stop/Warning behavior survives import.
|
|
319
|
+
const alert = showErrorMessage
|
|
320
|
+
? {
|
|
321
|
+
style: mapErrorStyle(rule.a$.errorStyle),
|
|
322
|
+
message: rule.a$.error || rule.a$.errorTitle
|
|
323
|
+
? {
|
|
324
|
+
title: rule.a$.errorTitle ?? undefined,
|
|
325
|
+
message: rule.a$.error ?? undefined,
|
|
326
|
+
}
|
|
327
|
+
: undefined,
|
|
328
|
+
}
|
|
329
|
+
: undefined;
|
|
330
|
+
// Prompt-only DV: Excel's "input message" feature attaches a tooltip
|
|
331
|
+
// (and/or an error alert) to a cell range without any validation
|
|
332
|
+
// constraint. These have no `type` attribute. Preserve them so the
|
|
333
|
+
// tooltip survives the round-trip.
|
|
334
|
+
if (!type) {
|
|
335
|
+
if (inputMessage || alert) {
|
|
336
|
+
dataValidations.push({
|
|
337
|
+
id: uuid(),
|
|
338
|
+
ranges,
|
|
339
|
+
allowBlank,
|
|
340
|
+
inputMessage,
|
|
341
|
+
alert,
|
|
342
|
+
});
|
|
343
|
+
}
|
|
344
|
+
continue;
|
|
345
|
+
}
|
|
346
|
+
const formula1Node = rule.formula1 ?? rule["x:formula1"];
|
|
347
|
+
const formula2Node = rule.formula2 ?? rule["x:formula2"];
|
|
348
|
+
// Capture the source xlsx representation verbatim so the exporter can
|
|
349
|
+
// round-trip the original `type`/`operator`/formulas instead of
|
|
350
|
+
// re-synthesizing from the parsed `condition` (which loses fidelity:
|
|
351
|
+
// `whole` collapses to `decimal`, `textLength` collapses to `custom`,
|
|
352
|
+
// user formulas get `INDIRECT("RC",FALSE)` rewriting). The source
|
|
353
|
+
// formula text is kept with any leading `=` stripped (matches xlsx wire
|
|
354
|
+
// format — `<formula1>` carries the expression without `=`).
|
|
355
|
+
const formula1Verbatim = (() => {
|
|
356
|
+
const text = extractFormulaText(formula1Node);
|
|
357
|
+
if (text === undefined)
|
|
358
|
+
return undefined;
|
|
359
|
+
const trimmed = String(text).trim();
|
|
360
|
+
if (!trimmed)
|
|
361
|
+
return undefined;
|
|
362
|
+
return trimmed.startsWith("=") ? trimmed.slice(1) : trimmed;
|
|
363
|
+
})();
|
|
364
|
+
const formula2Verbatim = (() => {
|
|
365
|
+
const text = extractFormulaText(formula2Node);
|
|
366
|
+
if (text === undefined)
|
|
367
|
+
return undefined;
|
|
368
|
+
const trimmed = String(text).trim();
|
|
369
|
+
if (!trimmed)
|
|
370
|
+
return undefined;
|
|
371
|
+
return trimmed.startsWith("=") ? trimmed.slice(1) : trimmed;
|
|
372
|
+
})();
|
|
373
|
+
const xlsxSource = {
|
|
374
|
+
type,
|
|
375
|
+
...(rule.a$.operator ? { operator: rule.a$.operator } : {}),
|
|
376
|
+
...(formula1Verbatim !== undefined
|
|
377
|
+
? { formula1: formula1Verbatim }
|
|
378
|
+
: {}),
|
|
379
|
+
...(formula2Verbatim !== undefined
|
|
380
|
+
? { formula2: formula2Verbatim }
|
|
381
|
+
: {}),
|
|
382
|
+
};
|
|
383
|
+
if (type === "list") {
|
|
384
|
+
const rawFormula = extractFormulaText(formula1Node) ?? "";
|
|
385
|
+
const trimmedFormula = String(rawFormula ?? "").trim();
|
|
386
|
+
const referenceCandidate = trimmedFormula.startsWith("=")
|
|
387
|
+
? trimmedFormula.slice(1)
|
|
388
|
+
: trimmedFormula;
|
|
389
|
+
const isOffsetFormula = /^offset\(/i.test(referenceCandidate);
|
|
390
|
+
const isNamedRange = !!namedRanges.find((n) => n.name === referenceCandidate);
|
|
391
|
+
const listValues = parseListValues(trimmedFormula);
|
|
392
|
+
const isRef = checkIfStringIsReference(referenceCandidate) ||
|
|
393
|
+
isOffsetFormula ||
|
|
394
|
+
isNamedRange;
|
|
395
|
+
const normalizedReference = isRef && !isNamedRange
|
|
396
|
+
? ensureSheetReference(referenceCandidate, sheetName)
|
|
397
|
+
: referenceCandidate;
|
|
398
|
+
const values = isRef
|
|
399
|
+
? [
|
|
400
|
+
{
|
|
401
|
+
userEnteredValue: normalizedReference.startsWith("=")
|
|
402
|
+
? normalizedReference
|
|
403
|
+
: `=${normalizedReference}`,
|
|
404
|
+
},
|
|
405
|
+
]
|
|
406
|
+
: listValues.map((value) => ({ userEnteredValue: value }));
|
|
407
|
+
if (!values.length) {
|
|
408
|
+
values.push({ userEnteredValue: trimmedFormula });
|
|
409
|
+
}
|
|
410
|
+
dataValidations.push({
|
|
411
|
+
id: uuid(),
|
|
412
|
+
ranges,
|
|
413
|
+
condition: {
|
|
414
|
+
type: isRef ? "ONE_OF_RANGE" : "ONE_OF_LIST",
|
|
415
|
+
values,
|
|
416
|
+
},
|
|
417
|
+
allowBlank,
|
|
418
|
+
displayStyle: rule.a$.showDropDown === "1" ? "plain" : undefined,
|
|
419
|
+
inputMessage,
|
|
420
|
+
alert,
|
|
421
|
+
xlsxSource,
|
|
422
|
+
});
|
|
423
|
+
continue;
|
|
424
|
+
}
|
|
425
|
+
const formula1 = normalizeFormulaText(formula1Node);
|
|
426
|
+
const formula2 = normalizeFormulaText(formula2Node);
|
|
427
|
+
if (type === "custom") {
|
|
428
|
+
if (!formula1) {
|
|
429
|
+
continue;
|
|
430
|
+
}
|
|
431
|
+
const parsedCondition = parseCustomValidationFormula(formula1, baseCellRef);
|
|
432
|
+
dataValidations.push({
|
|
433
|
+
id: uuid(),
|
|
434
|
+
ranges,
|
|
435
|
+
condition: parsedCondition ?? {
|
|
436
|
+
type: "CUSTOM_FORMULA",
|
|
437
|
+
values: [{ userEnteredValue: formula1 }],
|
|
438
|
+
},
|
|
439
|
+
allowBlank,
|
|
440
|
+
inputMessage,
|
|
441
|
+
alert,
|
|
442
|
+
xlsxSource,
|
|
443
|
+
});
|
|
444
|
+
continue;
|
|
445
|
+
}
|
|
446
|
+
if (type === "textLength") {
|
|
447
|
+
const lengthFormula = buildTextLengthFormula(rule.a$.operator, baseCellRef, formula1, formula2);
|
|
448
|
+
if (!lengthFormula) {
|
|
449
|
+
continue;
|
|
450
|
+
}
|
|
451
|
+
dataValidations.push({
|
|
452
|
+
id: uuid(),
|
|
453
|
+
ranges,
|
|
454
|
+
condition: {
|
|
455
|
+
type: "CUSTOM_FORMULA",
|
|
456
|
+
values: [{ userEnteredValue: lengthFormula }],
|
|
457
|
+
},
|
|
458
|
+
allowBlank,
|
|
459
|
+
inputMessage,
|
|
460
|
+
alert,
|
|
461
|
+
xlsxSource,
|
|
462
|
+
});
|
|
463
|
+
continue;
|
|
464
|
+
}
|
|
465
|
+
const isDateType = type === "date";
|
|
466
|
+
if (!isDateType && !NUMBER_VALIDATION_TYPES.has(type)) {
|
|
467
|
+
continue;
|
|
468
|
+
}
|
|
469
|
+
const conditionType = isDateType
|
|
470
|
+
? mapDateOperatorToCondition(rule.a$.operator, Boolean(formula2))
|
|
471
|
+
: mapNumberOperatorToCondition(rule.a$.operator, Boolean(formula2));
|
|
472
|
+
if (!conditionType || !formula1) {
|
|
473
|
+
continue;
|
|
474
|
+
}
|
|
475
|
+
const values = [
|
|
476
|
+
{ userEnteredValue: formula1 },
|
|
477
|
+
...(formula2 ? [{ userEnteredValue: formula2 }] : []),
|
|
478
|
+
];
|
|
479
|
+
dataValidations.push({
|
|
480
|
+
id: uuid(),
|
|
481
|
+
ranges,
|
|
482
|
+
condition: {
|
|
483
|
+
type: conditionType,
|
|
484
|
+
values,
|
|
485
|
+
},
|
|
486
|
+
allowBlank,
|
|
487
|
+
inputMessage,
|
|
488
|
+
alert,
|
|
489
|
+
xlsxSource,
|
|
490
|
+
});
|
|
491
|
+
}
|
|
492
|
+
return dataValidations;
|
|
493
|
+
};
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import type { EmbeddedObject, EmbedShapeSpec } from "@rowsncolumns/spreadsheet";
|
|
2
|
+
import { type XMLParser } from "fast-xml-parser";
|
|
3
|
+
import { type StreamingZipParser } from "../../zip-parser-streaming";
|
|
4
|
+
export type EmbeddedObjectWithPosition = EmbeddedObject & {
|
|
5
|
+
isInsideCell?: boolean;
|
|
6
|
+
};
|
|
7
|
+
/**
|
|
8
|
+
* Process different types of image anchors
|
|
9
|
+
* @param anchors The anchor elements from the drawing
|
|
10
|
+
* @param anchorType The type of anchor
|
|
11
|
+
* @param drawingPath The path to the drawing file
|
|
12
|
+
* @param sheetName The name of the worksheet
|
|
13
|
+
* @param zipParser The zip parser instance
|
|
14
|
+
* @param xmlParser The XML parser instance
|
|
15
|
+
* @returns An array of image objects with their properties and binary data
|
|
16
|
+
*/
|
|
17
|
+
export declare function processAnchors(anchors: any, anchorType: string, drawingPath: string, sheetId: number, zipParser: StreamingZipParser, xmlParser: XMLParser): Promise<EmbeddedObjectWithPosition[]>;
|
|
18
|
+
/**
|
|
19
|
+
* Whether an `<xdr:sp>` should import as a drawing shape (`EmbedShapeSpec`)
|
|
20
|
+
* rather than a textbox. Text boxes are excluded explicitly (`txBox="1"`), and
|
|
21
|
+
* a rect with no `<xdr:style>` block stays a textbox too — routing those to
|
|
22
|
+
* the shape renderer would repaint plain text notes with the default accent
|
|
23
|
+
* shape style.
|
|
24
|
+
*/
|
|
25
|
+
export declare function isDrawingShape(shape: any): boolean;
|
|
26
|
+
/** Parse an `<xdr:sp>` drawing shape into an {@link EmbedShapeSpec}. */
|
|
27
|
+
export declare function parseShapeSpec(shape: any): EmbedShapeSpec;
|
|
28
|
+
/**
|
|
29
|
+
* Determine if a oneCellAnchor image is inside a cell
|
|
30
|
+
* Using EMU values for accurate assessment
|
|
31
|
+
* @param fromColOff Column offset in EMUs
|
|
32
|
+
* @param fromRowOff Row offset in EMUs
|
|
33
|
+
* @param fLocksWithSheet Whether image locks with sheet
|
|
34
|
+
* @param cx Image width in EMUs
|
|
35
|
+
* @param cy Image height in EMUs
|
|
36
|
+
* @returns Boolean indicating if the image is inside a cell
|
|
37
|
+
*/
|
|
38
|
+
export declare function determineIfOneCellInsideCell(fromColOff: number, fromRowOff: number, fLocksWithSheet: string, cx: number, cy: number): boolean;
|
|
39
|
+
//# sourceMappingURL=drawing.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"drawing.d.ts","sourceRoot":"","sources":["../../../../../excel-parser/plugins/xlsx/drawing.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAGV,cAAc,EAEd,cAAc,EAWf,MAAM,2BAA2B,CAAC;AAEnC,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAGjD,OAAO,EAAE,KAAK,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAoDrE,MAAM,MAAM,0BAA0B,GAAG,cAAc,GAAG;IACxD,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB,CAAC;AAEF;;;;;;;;;GASG;AACH,wBAAsB,cAAc,CAClC,OAAO,EAAE,GAAG,EACZ,UAAU,EAAE,MAAM,EAClB,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,kBAAkB,EAC7B,SAAS,EAAE,SAAS,GACnB,OAAO,CAAC,0BAA0B,EAAE,CAAC,CA6dvC;AA6OD;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,GAAG,GAAG,OAAO,CASlD;AAED,wEAAwE;AACxE,wBAAgB,cAAc,CAAC,KAAK,EAAE,GAAG,GAAG,cAAc,CA8CzD;AA8MD;;;;;;;;;GASG;AACH,wBAAgB,4BAA4B,CAC1C,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,MAAM,EAClB,eAAe,EAAE,MAAM,EACvB,EAAE,EAAE,MAAM,EACV,EAAE,EAAE,MAAM,GACT,OAAO,CAqBT"}
|