@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,331 @@
|
|
|
1
|
+
import { get } from "lodash-es";
|
|
2
|
+
export function extractDataValidations(ctx) {
|
|
3
|
+
const { sheetContexts, sheetNameMap, spreadsheetNode, getAttributes, parseRangeList, normalizeConditionExpression, parseBooleanAttribute, mapAlertStyle, toArray, } = ctx;
|
|
4
|
+
if (!sheetContexts.length)
|
|
5
|
+
return [];
|
|
6
|
+
const validations = [];
|
|
7
|
+
let validationId = 1;
|
|
8
|
+
const processNodes = (nodes, fallbackContext) => {
|
|
9
|
+
for (const node of nodes) {
|
|
10
|
+
const attrs = getAttributes(node);
|
|
11
|
+
if (!attrs)
|
|
12
|
+
continue;
|
|
13
|
+
const rangeAttr = attrs["@_table:target-range-address"] ||
|
|
14
|
+
attrs["@_target-range-address"] ||
|
|
15
|
+
attrs["@_table:base-cell-address"];
|
|
16
|
+
const ranges = parseRangeList(rangeAttr, sheetNameMap, fallbackContext);
|
|
17
|
+
if (!ranges.length)
|
|
18
|
+
continue;
|
|
19
|
+
const baseCellAddress = attrs["@_table:base-cell-address"] || attrs["@_base-cell-address"];
|
|
20
|
+
const inferredSheetName = extractSheetNameFromAddress(baseCellAddress) || fallbackContext?.name;
|
|
21
|
+
const conditionFormula = normalizeConditionExpression(attrs["@_table:condition"] || attrs["@_condition"]);
|
|
22
|
+
const condition = parseConditionFormula(conditionFormula, inferredSheetName);
|
|
23
|
+
const allowBlank = parseBooleanAttribute(attrs["@_table:allow-empty-cell"] || attrs["@_allow-empty-cell"]);
|
|
24
|
+
const displayStyleAttr = attrs["@_table:display-list"] || attrs["@_display-list"];
|
|
25
|
+
let displayStyle;
|
|
26
|
+
if (displayStyleAttr) {
|
|
27
|
+
const normalized = displayStyleAttr.toLowerCase();
|
|
28
|
+
if (normalized === "none") {
|
|
29
|
+
displayStyle = "plain";
|
|
30
|
+
}
|
|
31
|
+
else if (normalized === "list" ||
|
|
32
|
+
normalized === "unsorted" ||
|
|
33
|
+
normalized === "sorted") {
|
|
34
|
+
displayStyle = "arrow";
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
const helpNode = get(node, "table:help-message") || get(node, "help-message");
|
|
38
|
+
const helpAttrs = getAttributes(helpNode);
|
|
39
|
+
const inputMessage = helpAttrs && (helpAttrs["@_table:message"] || helpAttrs["@_message"])
|
|
40
|
+
? {
|
|
41
|
+
title: helpAttrs["@_table:title"] || helpAttrs["@_title"] || undefined,
|
|
42
|
+
message: helpAttrs["@_table:message"] ||
|
|
43
|
+
helpAttrs["@_message"] ||
|
|
44
|
+
undefined,
|
|
45
|
+
}
|
|
46
|
+
: undefined;
|
|
47
|
+
const errorNode = get(node, "table:error-message") || get(node, "error-message");
|
|
48
|
+
const errorAttrs = getAttributes(errorNode);
|
|
49
|
+
let alert;
|
|
50
|
+
if (errorAttrs &&
|
|
51
|
+
(errorAttrs["@_table:message"] || errorAttrs["@_message"])) {
|
|
52
|
+
alert = {
|
|
53
|
+
style: mapAlertStyle(errorAttrs["@_table:message-type"] ||
|
|
54
|
+
errorAttrs["@_message-type"]) ?? "stop",
|
|
55
|
+
message: {
|
|
56
|
+
title: errorAttrs["@_table:title"] || errorAttrs["@_title"] || undefined,
|
|
57
|
+
message: errorAttrs["@_table:message"] ||
|
|
58
|
+
errorAttrs["@_message"] ||
|
|
59
|
+
undefined,
|
|
60
|
+
},
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
validations.push({
|
|
64
|
+
id: `ods-dv-${validationId++}`,
|
|
65
|
+
ranges,
|
|
66
|
+
condition,
|
|
67
|
+
allowBlank,
|
|
68
|
+
displayStyle,
|
|
69
|
+
inputMessage,
|
|
70
|
+
alert,
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
};
|
|
74
|
+
if (spreadsheetNode) {
|
|
75
|
+
const globalContainer = get(spreadsheetNode, "table:content-validations") ||
|
|
76
|
+
get(spreadsheetNode, "content-validations");
|
|
77
|
+
const globalNodes = globalContainer
|
|
78
|
+
? toArray(get(globalContainer, "table:content-validation") ||
|
|
79
|
+
get(globalContainer, "content-validation"))
|
|
80
|
+
: [];
|
|
81
|
+
processNodes(globalNodes);
|
|
82
|
+
}
|
|
83
|
+
for (const context of sheetContexts) {
|
|
84
|
+
const container = get(context.node, "table:content-validations") ||
|
|
85
|
+
get(context.node, "content-validations");
|
|
86
|
+
const nodes = container
|
|
87
|
+
? toArray(get(container, "table:content-validation") ||
|
|
88
|
+
get(container, "content-validation"))
|
|
89
|
+
: [];
|
|
90
|
+
processNodes(nodes, context);
|
|
91
|
+
}
|
|
92
|
+
return validations;
|
|
93
|
+
}
|
|
94
|
+
const FUNCTION_CONDITION_MAP = {
|
|
95
|
+
"cell-content-is-between": { type: "NUMBER_BETWEEN", valueCount: 2 },
|
|
96
|
+
"cell-content-is-not-between": { type: "NUMBER_NOT_BETWEEN", valueCount: 2 },
|
|
97
|
+
"cell-content-is-equal-to": { type: "NUMBER_EQ", valueCount: 1 },
|
|
98
|
+
"cell-content-is-not-equal-to": { type: "NUMBER_NOT_EQ", valueCount: 1 },
|
|
99
|
+
"cell-content-is-greater-than": { type: "NUMBER_GREATER", valueCount: 1 },
|
|
100
|
+
"cell-content-is-greater-than-or-equal-to": {
|
|
101
|
+
type: "NUMBER_GREATER_THAN_EQ",
|
|
102
|
+
valueCount: 1,
|
|
103
|
+
},
|
|
104
|
+
"cell-content-is-less-than": { type: "NUMBER_LESS", valueCount: 1 },
|
|
105
|
+
"cell-content-is-less-than-or-equal-to": {
|
|
106
|
+
type: "NUMBER_LESS_THAN_EQ",
|
|
107
|
+
valueCount: 1,
|
|
108
|
+
},
|
|
109
|
+
"cell-content-text-equal-to": { type: "TEXT_EQ", valueCount: 1 },
|
|
110
|
+
"cell-content-text-not-equal-to": { type: "TEXT_NOT_EQ", valueCount: 1 },
|
|
111
|
+
"cell-content-text-contains": { type: "TEXT_CONTAINS", valueCount: 1 },
|
|
112
|
+
"cell-content-text-not-contains": {
|
|
113
|
+
type: "TEXT_NOT_CONTAINS",
|
|
114
|
+
valueCount: 1,
|
|
115
|
+
},
|
|
116
|
+
"cell-content-text-begins-with": { type: "TEXT_STARTS_WITH", valueCount: 1 },
|
|
117
|
+
"cell-content-text-ends-with": { type: "TEXT_ENDS_WITH", valueCount: 1 },
|
|
118
|
+
"cell-content-text-is-email": { type: "TEXT_IS_EMAIL", valueCount: 0 },
|
|
119
|
+
"cell-content-text-is-url": { type: "TEXT_IS_URL", valueCount: 0 },
|
|
120
|
+
"cell-content-date-equal-to": { type: "DATE_EQ", valueCount: 1 },
|
|
121
|
+
"cell-content-date-not-equal-to": { type: "DATE_NOT_EQ", valueCount: 1 },
|
|
122
|
+
"cell-content-date-before": { type: "DATE_BEFORE", valueCount: 1 },
|
|
123
|
+
"cell-content-date-after": { type: "DATE_AFTER", valueCount: 1 },
|
|
124
|
+
"cell-content-date-on-or-before": {
|
|
125
|
+
type: "DATE_ON_OR_BEFORE",
|
|
126
|
+
valueCount: 1,
|
|
127
|
+
},
|
|
128
|
+
"cell-content-date-on-or-after": {
|
|
129
|
+
type: "DATE_ON_OR_AFTER",
|
|
130
|
+
valueCount: 1,
|
|
131
|
+
},
|
|
132
|
+
"cell-content-date-between": { type: "DATE_BETWEEN", valueCount: 2 },
|
|
133
|
+
"cell-content-date-not-between": { type: "DATE_NOT_BETWEEN", valueCount: 2 },
|
|
134
|
+
"cell-content-date-is-valid": { type: "DATE_IS_VALID", valueCount: 0 },
|
|
135
|
+
"cell-content-is-blank": { type: "BLANK", valueCount: 0 },
|
|
136
|
+
"cell-content-is-not-blank": { type: "NOT_BLANK", valueCount: 0 },
|
|
137
|
+
"cell-content-is-boolean": { type: "BOOLEAN", valueCount: 0 },
|
|
138
|
+
"cell-content-is-in-range": { type: "ONE_OF_RANGE", valueCount: 1 },
|
|
139
|
+
"cell-content-is-error": { type: "ERROR", valueCount: 0 },
|
|
140
|
+
"cell-content-is-not-error": { type: "NOT_ERROR", valueCount: 0 },
|
|
141
|
+
};
|
|
142
|
+
const OPERATOR_CONDITION_MAP = {
|
|
143
|
+
">": "NUMBER_GREATER",
|
|
144
|
+
">=": "NUMBER_GREATER_THAN_EQ",
|
|
145
|
+
"<": "NUMBER_LESS",
|
|
146
|
+
"<=": "NUMBER_LESS_THAN_EQ",
|
|
147
|
+
"=": "NUMBER_EQ",
|
|
148
|
+
"==": "NUMBER_EQ",
|
|
149
|
+
"<>": "NUMBER_NOT_EQ",
|
|
150
|
+
"!=": "NUMBER_NOT_EQ",
|
|
151
|
+
};
|
|
152
|
+
const LIST_FUNCTION_REGEX = /^=cell-content-is-in-list\((.*)\)$/i;
|
|
153
|
+
function parseConditionFormula(conditionFormula, sheetName) {
|
|
154
|
+
const trimmed = conditionFormula?.trim();
|
|
155
|
+
if (!trimmed)
|
|
156
|
+
return undefined;
|
|
157
|
+
const listCondition = parseListCondition(trimmed, sheetName);
|
|
158
|
+
if (listCondition)
|
|
159
|
+
return listCondition;
|
|
160
|
+
const functionCondition = parseFunctionCondition(trimmed, sheetName);
|
|
161
|
+
if (functionCondition)
|
|
162
|
+
return functionCondition;
|
|
163
|
+
const operatorCondition = parseOperatorCondition(trimmed);
|
|
164
|
+
if (operatorCondition)
|
|
165
|
+
return operatorCondition;
|
|
166
|
+
return {
|
|
167
|
+
type: "CUSTOM_FORMULA",
|
|
168
|
+
values: [{ userEnteredValue: trimmed }],
|
|
169
|
+
};
|
|
170
|
+
}
|
|
171
|
+
function parseListCondition(formula, sheetName) {
|
|
172
|
+
const match = formula.match(LIST_FUNCTION_REGEX);
|
|
173
|
+
if (!match)
|
|
174
|
+
return undefined;
|
|
175
|
+
const args = splitArguments(match[1]);
|
|
176
|
+
if (!args.length)
|
|
177
|
+
return undefined;
|
|
178
|
+
const [firstArg] = args;
|
|
179
|
+
if (firstArg && isRangeArgument(firstArg)) {
|
|
180
|
+
return {
|
|
181
|
+
type: "ONE_OF_RANGE",
|
|
182
|
+
values: [
|
|
183
|
+
{
|
|
184
|
+
userEnteredValue: formatRangeValue(firstArg, sheetName),
|
|
185
|
+
},
|
|
186
|
+
],
|
|
187
|
+
};
|
|
188
|
+
}
|
|
189
|
+
const values = [
|
|
190
|
+
{
|
|
191
|
+
userEnteredValue: args.join(","),
|
|
192
|
+
},
|
|
193
|
+
];
|
|
194
|
+
return {
|
|
195
|
+
type: "ONE_OF_LIST",
|
|
196
|
+
values,
|
|
197
|
+
};
|
|
198
|
+
}
|
|
199
|
+
function parseFunctionCondition(formula, sheetName) {
|
|
200
|
+
const normalized = formula.startsWith("=") ? formula.slice(1) : formula;
|
|
201
|
+
const match = normalized.match(/^([a-z-]+)\((.*)\)$/i);
|
|
202
|
+
if (!match)
|
|
203
|
+
return undefined;
|
|
204
|
+
const fnName = match[1].toLowerCase();
|
|
205
|
+
if (fnName === "cell-content-is-in-list") {
|
|
206
|
+
return undefined;
|
|
207
|
+
}
|
|
208
|
+
const mapping = FUNCTION_CONDITION_MAP[fnName];
|
|
209
|
+
if (!mapping)
|
|
210
|
+
return undefined;
|
|
211
|
+
const args = splitArguments(match[2]);
|
|
212
|
+
if (mapping.valueCount > args.length)
|
|
213
|
+
return undefined;
|
|
214
|
+
if (mapping.type === "ONE_OF_RANGE" && args.length) {
|
|
215
|
+
return {
|
|
216
|
+
type: "ONE_OF_RANGE",
|
|
217
|
+
values: [{ userEnteredValue: formatRangeValue(args[0], sheetName) }],
|
|
218
|
+
};
|
|
219
|
+
}
|
|
220
|
+
const values = mapping.valueCount > 0
|
|
221
|
+
? args.slice(0, mapping.valueCount).map((value) => ({
|
|
222
|
+
userEnteredValue: value,
|
|
223
|
+
}))
|
|
224
|
+
: undefined;
|
|
225
|
+
return {
|
|
226
|
+
type: mapping.type,
|
|
227
|
+
...(values ? { values } : {}),
|
|
228
|
+
};
|
|
229
|
+
}
|
|
230
|
+
function parseOperatorCondition(formula) {
|
|
231
|
+
const normalized = formula.startsWith("=") ? formula.slice(1) : formula;
|
|
232
|
+
const match = normalized.match(/^cell-content\(\)\s*(<=|>=|<>|!=|=|==|<|>)\s*(.+)$/i);
|
|
233
|
+
if (!match)
|
|
234
|
+
return undefined;
|
|
235
|
+
const operator = match[1];
|
|
236
|
+
const conditionType = OPERATOR_CONDITION_MAP[operator];
|
|
237
|
+
if (!conditionType)
|
|
238
|
+
return undefined;
|
|
239
|
+
const value = stripQuotes(match[2].trim());
|
|
240
|
+
if (!value.length)
|
|
241
|
+
return undefined;
|
|
242
|
+
return {
|
|
243
|
+
type: conditionType,
|
|
244
|
+
values: [{ userEnteredValue: value }],
|
|
245
|
+
};
|
|
246
|
+
}
|
|
247
|
+
function splitArguments(value) {
|
|
248
|
+
if (!value)
|
|
249
|
+
return [];
|
|
250
|
+
return value
|
|
251
|
+
.split(/[,;](?=(?:[^"]*"[^"]*")*[^"]*$)/)
|
|
252
|
+
.map((part) => stripQuotes(part.trim()))
|
|
253
|
+
.filter((part) => part.length > 0);
|
|
254
|
+
}
|
|
255
|
+
function stripQuotes(value) {
|
|
256
|
+
if ((value.startsWith('"') && value.endsWith('"')) ||
|
|
257
|
+
(value.startsWith("'") && value.endsWith("'"))) {
|
|
258
|
+
return value.substring(1, value.length - 1);
|
|
259
|
+
}
|
|
260
|
+
return value;
|
|
261
|
+
}
|
|
262
|
+
function formatRangeValue(value, sheetName) {
|
|
263
|
+
if (!value)
|
|
264
|
+
return value;
|
|
265
|
+
let reference = value.trim();
|
|
266
|
+
if (!reference)
|
|
267
|
+
return value;
|
|
268
|
+
if (reference.startsWith("=")) {
|
|
269
|
+
reference = reference.slice(1);
|
|
270
|
+
}
|
|
271
|
+
const bracketMatch = reference.match(/^\[(.*)\]$/);
|
|
272
|
+
if (bracketMatch) {
|
|
273
|
+
reference = bracketMatch[1];
|
|
274
|
+
}
|
|
275
|
+
const exclamationMatch = reference.match(/^(.*)!(.+)$/);
|
|
276
|
+
if (exclamationMatch) {
|
|
277
|
+
const sheet = escapeSheetName(exclamationMatch[1]);
|
|
278
|
+
const ref = exclamationMatch[2].replace(/\.(?=\$?[A-Za-z])/g, "");
|
|
279
|
+
if (sheet) {
|
|
280
|
+
return `='${sheet}'!${ref}`;
|
|
281
|
+
}
|
|
282
|
+
const normalized = ref;
|
|
283
|
+
return normalized.startsWith("=") ? normalized : `=${normalized}`;
|
|
284
|
+
}
|
|
285
|
+
const dotMatch = reference.match(/^(?:'([^']+)'|([^.!]+))\.(.+)$/);
|
|
286
|
+
if (dotMatch) {
|
|
287
|
+
const sheet = dotMatch[1] ?? dotMatch[2];
|
|
288
|
+
const ref = dotMatch[3].replace(/\.(?=\$?[A-Za-z])/g, "");
|
|
289
|
+
return `='${escapeSheetName(sheet)}'!${ref}`;
|
|
290
|
+
}
|
|
291
|
+
const normalizedRef = reference.replace(/\.(?=\$?[A-Za-z])/g, "");
|
|
292
|
+
const inferredSheet = sheetName ? escapeSheetName(sheetName) : undefined;
|
|
293
|
+
if (inferredSheet) {
|
|
294
|
+
return `='${inferredSheet}'!${normalizedRef}`;
|
|
295
|
+
}
|
|
296
|
+
return normalizedRef.startsWith("=") ? normalizedRef : `=${normalizedRef}`;
|
|
297
|
+
}
|
|
298
|
+
function escapeSheetName(name) {
|
|
299
|
+
return name
|
|
300
|
+
.replace(/^'+|'+$/g, "")
|
|
301
|
+
.replace(/^\$+/, "")
|
|
302
|
+
.replace(/'/g, "''");
|
|
303
|
+
}
|
|
304
|
+
function isRangeArgument(value) {
|
|
305
|
+
if (!value)
|
|
306
|
+
return false;
|
|
307
|
+
if (/^\[.*\]$/.test(value)) {
|
|
308
|
+
return true;
|
|
309
|
+
}
|
|
310
|
+
return /[:.!]/.test(value) && /\d/.test(value);
|
|
311
|
+
}
|
|
312
|
+
function extractSheetNameFromAddress(address) {
|
|
313
|
+
if (!address)
|
|
314
|
+
return undefined;
|
|
315
|
+
const trimmed = address.trim();
|
|
316
|
+
if (!trimmed)
|
|
317
|
+
return undefined;
|
|
318
|
+
const bangMatch = trimmed.match(/^'([^']+)'!/);
|
|
319
|
+
if (bangMatch)
|
|
320
|
+
return bangMatch[1];
|
|
321
|
+
const dotBangMatch = trimmed.match(/^'([^']+)'[.!]/);
|
|
322
|
+
if (dotBangMatch)
|
|
323
|
+
return dotBangMatch[1];
|
|
324
|
+
const plainBangMatch = trimmed.match(/^([^'!.]+)!/);
|
|
325
|
+
if (plainBangMatch)
|
|
326
|
+
return plainBangMatch[1].replace(/^\$+/, "").trim();
|
|
327
|
+
const plainDotMatch = trimmed.match(/^([^'!.]+)\./);
|
|
328
|
+
if (plainDotMatch)
|
|
329
|
+
return plainDotMatch[1].replace(/^\$+/, "").trim();
|
|
330
|
+
return undefined;
|
|
331
|
+
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Converts ODS OpenFormula to Excel formula
|
|
3
|
+
* Example: of:=SUM([.A1:.B2]) -> =SUM(A1:B2)
|
|
4
|
+
* Example: of:=[.A1]+[.B2] -> =A1+B2
|
|
5
|
+
* Example: of:=[$Sheet2.A1] -> =Sheet2!A1
|
|
6
|
+
*/
|
|
7
|
+
export declare function convertOdsFormulaToExcel(odsFormula: string): string;
|
|
8
|
+
//# sourceMappingURL=formula.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"formula.d.ts","sourceRoot":"","sources":["../../../../../excel-parser/plugins/ods/formula.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,wBAAgB,wBAAwB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAiGnE"}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Converts ODS OpenFormula to Excel formula
|
|
3
|
+
* Example: of:=SUM([.A1:.B2]) -> =SUM(A1:B2)
|
|
4
|
+
* Example: of:=[.A1]+[.B2] -> =A1+B2
|
|
5
|
+
* Example: of:=[$Sheet2.A1] -> =Sheet2!A1
|
|
6
|
+
*/
|
|
7
|
+
export function convertOdsFormulaToExcel(odsFormula) {
|
|
8
|
+
if (!odsFormula)
|
|
9
|
+
return "";
|
|
10
|
+
let formula = odsFormula;
|
|
11
|
+
// Remove 'of:' prefix
|
|
12
|
+
if (formula.startsWith("of:")) {
|
|
13
|
+
formula = formula.substring(3);
|
|
14
|
+
}
|
|
15
|
+
// If it doesn't start with '=', add it (unless it's just a value, but ODS formulas usually denote calculation)
|
|
16
|
+
// Actually ODS formulas in table:formula often start with := or just = after of:
|
|
17
|
+
// formula "of:=..." -> "="
|
|
18
|
+
// formula "of:..." -> "..."
|
|
19
|
+
// Handle cell references
|
|
20
|
+
// [.A1] -> A1 (Absolute/Relative handling in ODS is complex, but basic mapping:
|
|
21
|
+
// [.A1] usually refers to cell A1 in current sheet.
|
|
22
|
+
// [.$A$1] -> $A$1
|
|
23
|
+
// [.A1:.B2] -> A1:B2
|
|
24
|
+
// Regex to match references like [.A1], [.A1:.B2], [$Sheet1.A1]
|
|
25
|
+
// Replace ranges [.A1:.B2] -> A1:B2
|
|
26
|
+
formula = formula.replace(/\[\.([A-Z]+[0-9]+):\.\1([A-Z]+[0-9]+)\]/g, "$1:$2"); // This is too specific
|
|
27
|
+
// Better: Match generic range pattern
|
|
28
|
+
// ODS Range: [.A1:.B2]
|
|
29
|
+
// We can try to strip the brackets and dots for local references.
|
|
30
|
+
// Simple replacer for local single cell refs [.A1] -> A1
|
|
31
|
+
formula = formula.replace(/\[\.([A-Z$]+[0-9$]+)\]/g, "$1");
|
|
32
|
+
// Simple replacer for local ranges [.A1:.B2] -> A1:B2
|
|
33
|
+
// Note: range might be [.A1:.B2] or [.A1:.C3]
|
|
34
|
+
formula = formula.replace(/\[\.([A-Z$]+[0-9$]+):\.\1([A-Z$]+[0-9$]+)\]/g, // This regex is wrong (uses backreference \1)
|
|
35
|
+
"$1:$2");
|
|
36
|
+
// Correct regex for ranges: [.A1:.B2]
|
|
37
|
+
formula = formula.replace(/\[\.([A-Za-z]+[0-9]+):\.\1([A-Za-z]+[0-9]+)\]/g, // Only matches if same col? No.
|
|
38
|
+
(match, p1, p2) => `${p1}:${p2}` // Logic above was weird.
|
|
39
|
+
);
|
|
40
|
+
// Let's use a more general approach.
|
|
41
|
+
// Replace `[.colrow]` with `colrow`.
|
|
42
|
+
// Replace `:.colrow` with `:colrow`.
|
|
43
|
+
formula = formula.replace(/\[\.([A-Za-z0-9$]+)\]/g, "$1");
|
|
44
|
+
// Handle Ranges inside brackets [A1:B2] which ODS might represent as [.A1:.B2]
|
|
45
|
+
// If we already replaced single refs, we might have `A1:.B2` left if we are not careful?
|
|
46
|
+
// ODS range is a single token `[.A1:.B2]`.
|
|
47
|
+
// Strategy:
|
|
48
|
+
// 1. Find [...] blocks.
|
|
49
|
+
// 2. Inside them, remove leading dots for cell refs.
|
|
50
|
+
// 3. Convert :. to :
|
|
51
|
+
formula = formula.replace(/\[(.*?)\]/g, (match, content) => {
|
|
52
|
+
// Content is like ".A1:.B2" or "$Sheet1.A1"
|
|
53
|
+
// Check for sheet ref
|
|
54
|
+
if (content.startsWith("$")) {
|
|
55
|
+
// $SheetName.A1 -> SheetName!A1
|
|
56
|
+
// content: $Sheet1.A1
|
|
57
|
+
// Split by last dot?
|
|
58
|
+
const lastDotIndex = content.lastIndexOf(".");
|
|
59
|
+
if (lastDotIndex > 0) {
|
|
60
|
+
const sheetPart = content.substring(1, lastDotIndex); // Remove leading $
|
|
61
|
+
const cellPart = content.substring(lastDotIndex + 1);
|
|
62
|
+
// If sheet name has spaces, wrap in quotes? Excel standard: 'Sheet Name'!A1
|
|
63
|
+
// ODS sheet names in references usually don't have quotes inside the bracket?
|
|
64
|
+
// We assume valid Excel sheet syntax or just quote it.
|
|
65
|
+
return `'${sheetPart}'!${cellPart}`;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
// Local ref
|
|
69
|
+
// .A1:.B2 -> A1:B2
|
|
70
|
+
// .A1 -> A1
|
|
71
|
+
let processed = content.replace(/^\./, ""); // Remove first dot
|
|
72
|
+
processed = processed.replace(/:\./g, ":"); // Remove dot after colon
|
|
73
|
+
return processed;
|
|
74
|
+
});
|
|
75
|
+
// Convert ; to , (function arguments)
|
|
76
|
+
// ODS uses ; as separator. Excel usually , (en-US).
|
|
77
|
+
// Be careful not to replace ; inside strings.
|
|
78
|
+
// Simple heuristic: if not inside quotes.
|
|
79
|
+
// For now, global replace might be safer than nothing, assuming no ; in strings usually.
|
|
80
|
+
formula = formula.replace(/;/g, ",");
|
|
81
|
+
return formula;
|
|
82
|
+
}
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
import type { ConditionalFormatRule, DataValidationRuleRecord, EmbeddedChart, NamedRange, Sheet, TableView } from "@rowsncolumns/spreadsheet";
|
|
2
|
+
import type { TextFormatRun } from "@rowsncolumns/common-types";
|
|
3
|
+
import { XMLParser } from "fast-xml-parser";
|
|
4
|
+
import type { EmbeddedObjectWithPosition, ProcessSheetDataResult } from "../../types";
|
|
5
|
+
import { ZipParser } from "../../zip-parser";
|
|
6
|
+
import { BaseWorkbookPlugin } from "../base/index";
|
|
7
|
+
import { OdsStyles } from "./styles";
|
|
8
|
+
import type { IterativeCalculationOptions } from "@rowsncolumns/common-types";
|
|
9
|
+
export declare class OdsPlugin extends BaseWorkbookPlugin {
|
|
10
|
+
zipParser: ZipParser;
|
|
11
|
+
xmlParser: XMLParser;
|
|
12
|
+
xmlOrderedParser: XMLParser;
|
|
13
|
+
contentXml: any;
|
|
14
|
+
contentXmlOrdered: any;
|
|
15
|
+
settingsXml: any;
|
|
16
|
+
odsStyles: OdsStyles;
|
|
17
|
+
cellXfs: Map<string | number, any>;
|
|
18
|
+
sharedStrings: string[];
|
|
19
|
+
richSharedStringRuns: Map<number, TextFormatRun[]>;
|
|
20
|
+
private sharedStringIndexByValue;
|
|
21
|
+
private sheetCache;
|
|
22
|
+
private sparklinesBySheet;
|
|
23
|
+
constructor();
|
|
24
|
+
load(buffer: ArrayBuffer | File, password?: string): Promise<void>;
|
|
25
|
+
getCellXfs(): Map<string | number, any>;
|
|
26
|
+
getSharedStrings(): string[];
|
|
27
|
+
private getOrCreateSharedStringIndex;
|
|
28
|
+
registerFormat(format: any): string;
|
|
29
|
+
dispose(): void;
|
|
30
|
+
private getSpreadsheetNode;
|
|
31
|
+
private getTables;
|
|
32
|
+
getSheetCount(): number;
|
|
33
|
+
private ensureSheetCache;
|
|
34
|
+
private buildSheetCache;
|
|
35
|
+
private extractTableViews;
|
|
36
|
+
private convertDatabaseRangeNode;
|
|
37
|
+
private extractNamedRanges;
|
|
38
|
+
private extractBasicFilters;
|
|
39
|
+
private convertFilterNodeToSpecs;
|
|
40
|
+
private applyFilterCondition;
|
|
41
|
+
private extractTextContent;
|
|
42
|
+
private extractTextContentWithRuns;
|
|
43
|
+
private normalizeInternalHyperlinkLocation;
|
|
44
|
+
private extractHyperlinkValue;
|
|
45
|
+
private extractSpaceNodes;
|
|
46
|
+
private getSpaceRepeatCount;
|
|
47
|
+
private extractEmbeddedObjects;
|
|
48
|
+
private buildAnchorKey;
|
|
49
|
+
/**
|
|
50
|
+
* Walk the ordered content XML for each table and assign outline
|
|
51
|
+
* level + collapsed/hiddenByGroup state on `rowMetadata` and
|
|
52
|
+
* `columnMetadata`. ODS encodes outline as `<table:table-row-group>`
|
|
53
|
+
* / `<table:table-column-group>` wrappers (nest for level > 1); a
|
|
54
|
+
* group is collapsed when its `table:display="false"`. Cells inside
|
|
55
|
+
* a collapsed wrapper get `hiddenByGroup`; the summary cell (per
|
|
56
|
+
* `outlinePr.summaryBelow`/`summaryRight`, default true = below /
|
|
57
|
+
* right of the group) gets `collapsed = true`.
|
|
58
|
+
*/
|
|
59
|
+
private extractOutlineGroups;
|
|
60
|
+
private extractMerges;
|
|
61
|
+
private getOrderedTableWrappers;
|
|
62
|
+
private findOrderedTableWrapperForContext;
|
|
63
|
+
private extractTableColumnsFromHeader;
|
|
64
|
+
private collectFrameNodes;
|
|
65
|
+
private extractSheetSettings;
|
|
66
|
+
private parseConfigItemEntry;
|
|
67
|
+
private parseFreezeCoordinates;
|
|
68
|
+
private convertFrameToEmbeddedObject;
|
|
69
|
+
private convertFrameToEmbeddedChart;
|
|
70
|
+
private findInlineChartNode;
|
|
71
|
+
private findFrameObjectNode;
|
|
72
|
+
private findFrameImageNode;
|
|
73
|
+
private loadChartNodeFromObject;
|
|
74
|
+
private loadChartNodeFromHref;
|
|
75
|
+
private resolveObjectPath;
|
|
76
|
+
private findChartNodeInDocument;
|
|
77
|
+
private findNodeRecursive;
|
|
78
|
+
private convertChartNodeToSpec;
|
|
79
|
+
private extractSeriesLabel;
|
|
80
|
+
private extractChartSeriesColor;
|
|
81
|
+
private extractColorFromChartProperties;
|
|
82
|
+
private mapOdsChartClassToType;
|
|
83
|
+
private findRangeString;
|
|
84
|
+
private looksLikeCellRangeAddress;
|
|
85
|
+
private createChartDataFromAddress;
|
|
86
|
+
private buildOverlayPlacement;
|
|
87
|
+
private getImageDataUrl;
|
|
88
|
+
private normalizeImagePath;
|
|
89
|
+
private getImageMimeType;
|
|
90
|
+
private createDataUrlFromBytes;
|
|
91
|
+
private bytesToBase64;
|
|
92
|
+
private convertLengthToPixels;
|
|
93
|
+
private normalizeOdsColor;
|
|
94
|
+
private parseIntegerValue;
|
|
95
|
+
private getNodeText;
|
|
96
|
+
private buildSheetNameMap;
|
|
97
|
+
private registerSheetNameVariants;
|
|
98
|
+
private normalizeSheetName;
|
|
99
|
+
private parseRangeList;
|
|
100
|
+
private splitAddressSegments;
|
|
101
|
+
private parseRange;
|
|
102
|
+
private parseCellReference;
|
|
103
|
+
private parseBooleanAttribute;
|
|
104
|
+
private normalizeConditionExpression;
|
|
105
|
+
private normalizeExpression;
|
|
106
|
+
private toArray;
|
|
107
|
+
private expandRowCells;
|
|
108
|
+
private wrapRawCellEntry;
|
|
109
|
+
private extractAttributesFromNode;
|
|
110
|
+
private getAttributes;
|
|
111
|
+
private mapAlertStyle;
|
|
112
|
+
getSheets(minRowCount?: number, minColumnCount?: number): Promise<[Sheet[], TableView[]]>;
|
|
113
|
+
getConditionalFormatting(): Promise<ConditionalFormatRule[]>;
|
|
114
|
+
getDrawings(): Promise<EmbeddedObjectWithPosition[]>;
|
|
115
|
+
getCharts(): Promise<EmbeddedChart[]>;
|
|
116
|
+
getDataValidations(): Promise<DataValidationRuleRecord[]>;
|
|
117
|
+
getNamedRanges(): NamedRange[];
|
|
118
|
+
private findCalculationSettings;
|
|
119
|
+
getIterativeCalculationOptions(): IterativeCalculationOptions | undefined;
|
|
120
|
+
processSheetData(chunkSize?: number, enableCellXfsRegistry?: boolean, enableSharedStrings?: boolean): AsyncGenerator<ProcessSheetDataResult, void, unknown>;
|
|
121
|
+
}
|
|
122
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../excel-parser/plugins/ods/index.ts"],"names":[],"mappings":"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"}
|