@rowsncolumns/toolkit 24.4.2 → 24.4.4

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.
Files changed (166) hide show
  1. package/dist/cjs/excel-parser/cfb-decryptor.d.ts +6 -0
  2. package/dist/cjs/excel-parser/cfb-decryptor.d.ts.map +1 -1
  3. package/dist/cjs/excel-parser/cfb-decryptor.js +6 -0
  4. package/dist/cjs/excel-parser/helpers.d.ts +9 -1
  5. package/dist/cjs/excel-parser/helpers.d.ts.map +1 -1
  6. package/dist/cjs/excel-parser/helpers.js +37 -0
  7. package/dist/cjs/excel-parser/interface.d.ts +15 -2
  8. package/dist/cjs/excel-parser/interface.d.ts.map +1 -1
  9. package/dist/cjs/excel-parser/plugins/base/index.d.ts +2 -0
  10. package/dist/cjs/excel-parser/plugins/base/index.d.ts.map +1 -1
  11. package/dist/cjs/excel-parser/plugins/base/index.js +3 -0
  12. package/dist/cjs/excel-parser/plugins/ods/index.d.ts +19 -0
  13. package/dist/cjs/excel-parser/plugins/ods/index.d.ts.map +1 -1
  14. package/dist/cjs/excel-parser/plugins/ods/index.js +676 -304
  15. package/dist/cjs/excel-parser/plugins/ods/styles.d.ts +43 -1
  16. package/dist/cjs/excel-parser/plugins/ods/styles.d.ts.map +1 -1
  17. package/dist/cjs/excel-parser/plugins/ods/styles.js +343 -45
  18. package/dist/cjs/excel-parser/plugins/xls/index.d.ts +55 -1
  19. package/dist/cjs/excel-parser/plugins/xls/index.d.ts.map +1 -1
  20. package/dist/cjs/excel-parser/plugins/xls/index.js +518 -6
  21. package/dist/cjs/excel-parser/plugins/xlsb/index.d.ts +4 -0
  22. package/dist/cjs/excel-parser/plugins/xlsb/index.d.ts.map +1 -1
  23. package/dist/cjs/excel-parser/plugins/xlsb/index.js +33 -14
  24. package/dist/cjs/excel-parser/plugins/xlsx/chartex.d.ts +37 -0
  25. package/dist/cjs/excel-parser/plugins/xlsx/chartex.d.ts.map +1 -0
  26. package/dist/cjs/excel-parser/plugins/xlsx/chartex.js +244 -0
  27. package/dist/cjs/excel-parser/plugins/xlsx/charts.d.ts +10 -0
  28. package/dist/cjs/excel-parser/plugins/xlsx/charts.d.ts.map +1 -1
  29. package/dist/cjs/excel-parser/plugins/xlsx/charts.js +68 -9
  30. package/dist/cjs/excel-parser/plugins/xlsx/drawing.d.ts +28 -1
  31. package/dist/cjs/excel-parser/plugins/xlsx/drawing.d.ts.map +1 -1
  32. package/dist/cjs/excel-parser/plugins/xlsx/drawing.js +155 -20
  33. package/dist/cjs/excel-parser/plugins/xlsx/form-controls.d.ts +70 -0
  34. package/dist/cjs/excel-parser/plugins/xlsx/form-controls.d.ts.map +1 -0
  35. package/dist/cjs/excel-parser/plugins/xlsx/form-controls.js +295 -0
  36. package/dist/cjs/excel-parser/plugins/xlsx/index.d.ts +35 -2
  37. package/dist/cjs/excel-parser/plugins/xlsx/index.d.ts.map +1 -1
  38. package/dist/cjs/excel-parser/plugins/xlsx/index.js +737 -257
  39. package/dist/cjs/excel-parser/plugins/xlsx/pivots.d.ts.map +1 -1
  40. package/dist/cjs/excel-parser/plugins/xlsx/pivots.js +125 -37
  41. package/dist/cjs/excel-parser/plugins/xlsx/sheet-views.d.ts +3 -0
  42. package/dist/cjs/excel-parser/plugins/xlsx/sheet-views.d.ts.map +1 -1
  43. package/dist/cjs/excel-parser/plugins/xlsx/sheet-views.js +4 -1
  44. package/dist/cjs/excel-parser/plugins/xlsx/styles.d.ts +15 -1
  45. package/dist/cjs/excel-parser/plugins/xlsx/styles.d.ts.map +1 -1
  46. package/dist/cjs/excel-parser/plugins/xlsx/styles.js +102 -6
  47. package/dist/cjs/excel-parser/registry.d.ts +7 -0
  48. package/dist/cjs/excel-parser/registry.d.ts.map +1 -1
  49. package/dist/cjs/excel-parser/registry.js +29 -0
  50. package/dist/cjs/excel-parser/types.d.ts +17 -2
  51. package/dist/cjs/excel-parser/types.d.ts.map +1 -1
  52. package/dist/cjs/excel-parser/workbook.d.ts +3 -0
  53. package/dist/cjs/excel-parser/workbook.d.ts.map +1 -1
  54. package/dist/cjs/excel-parser/workbook.js +24 -14
  55. package/dist/cjs/excel-parser/worker.js +131 -131
  56. package/dist/cjs/exporter/ods/ods-export.d.ts.map +1 -1
  57. package/dist/cjs/exporter/ods/ods-export.js +432 -175
  58. package/dist/cjs/exporter/xlsx/chart-builder.d.ts.map +1 -1
  59. package/dist/cjs/exporter/xlsx/chart-builder.js +215 -39
  60. package/dist/cjs/exporter/xlsx/chartex-builder.d.ts +36 -0
  61. package/dist/cjs/exporter/xlsx/chartex-builder.d.ts.map +1 -0
  62. package/dist/cjs/exporter/xlsx/chartex-builder.js +109 -0
  63. package/dist/cjs/exporter/xlsx/form-controls-builder.d.ts +61 -0
  64. package/dist/cjs/exporter/xlsx/form-controls-builder.d.ts.map +1 -0
  65. package/dist/cjs/exporter/xlsx/form-controls-builder.js +197 -0
  66. package/dist/cjs/exporter/xlsx/pivot-builder.d.ts +8 -0
  67. package/dist/cjs/exporter/xlsx/pivot-builder.d.ts.map +1 -1
  68. package/dist/cjs/exporter/xlsx/pivot-builder.js +141 -42
  69. package/dist/cjs/exporter/xlsx/style-builder.js +9 -3
  70. package/dist/cjs/exporter/xlsx/threaded-comments-builder.d.ts +7 -1
  71. package/dist/cjs/exporter/xlsx/threaded-comments-builder.d.ts.map +1 -1
  72. package/dist/cjs/exporter/xlsx/threaded-comments-builder.js +15 -3
  73. package/dist/cjs/exporter/xlsx/xlsx-export.d.ts +11 -2
  74. package/dist/cjs/exporter/xlsx/xlsx-export.d.ts.map +1 -1
  75. package/dist/cjs/exporter/xlsx/xlsx-export.js +991 -297
  76. package/dist/cjs/helpers/implicit-intersection.d.ts +16 -0
  77. package/dist/cjs/helpers/implicit-intersection.d.ts.map +1 -0
  78. package/dist/cjs/helpers/implicit-intersection.js +197 -0
  79. package/dist/cjs/print-settings.d.ts +105 -0
  80. package/dist/cjs/print-settings.d.ts.map +1 -0
  81. package/dist/cjs/print-settings.js +494 -0
  82. package/dist/cjs/tsconfig.cjs.tsbuildinfo +1 -1
  83. package/dist/esm/excel-parser/cfb-decryptor.d.ts +6 -0
  84. package/dist/esm/excel-parser/cfb-decryptor.d.ts.map +1 -1
  85. package/dist/esm/excel-parser/cfb-decryptor.js +6 -0
  86. package/dist/esm/excel-parser/helpers.d.ts +9 -1
  87. package/dist/esm/excel-parser/helpers.d.ts.map +1 -1
  88. package/dist/esm/excel-parser/helpers.js +34 -0
  89. package/dist/esm/excel-parser/interface.d.ts +15 -2
  90. package/dist/esm/excel-parser/interface.d.ts.map +1 -1
  91. package/dist/esm/excel-parser/plugins/base/index.d.ts +2 -0
  92. package/dist/esm/excel-parser/plugins/base/index.d.ts.map +1 -1
  93. package/dist/esm/excel-parser/plugins/base/index.js +3 -0
  94. package/dist/esm/excel-parser/plugins/ods/index.d.ts +19 -0
  95. package/dist/esm/excel-parser/plugins/ods/index.d.ts.map +1 -1
  96. package/dist/esm/excel-parser/plugins/ods/index.js +347 -33
  97. package/dist/esm/excel-parser/plugins/ods/styles.d.ts +43 -1
  98. package/dist/esm/excel-parser/plugins/ods/styles.d.ts.map +1 -1
  99. package/dist/esm/excel-parser/plugins/ods/styles.js +276 -2
  100. package/dist/esm/excel-parser/plugins/xls/index.d.ts +55 -1
  101. package/dist/esm/excel-parser/plugins/xls/index.d.ts.map +1 -1
  102. package/dist/esm/excel-parser/plugins/xls/index.js +441 -3
  103. package/dist/esm/excel-parser/plugins/xlsb/index.d.ts +4 -0
  104. package/dist/esm/excel-parser/plugins/xlsb/index.d.ts.map +1 -1
  105. package/dist/esm/excel-parser/plugins/xlsb/index.js +30 -9
  106. package/dist/esm/excel-parser/plugins/xlsx/chartex.d.ts +37 -0
  107. package/dist/esm/excel-parser/plugins/xlsx/chartex.d.ts.map +1 -0
  108. package/dist/esm/excel-parser/plugins/xlsx/chartex.js +199 -0
  109. package/dist/esm/excel-parser/plugins/xlsx/charts.d.ts +10 -0
  110. package/dist/esm/excel-parser/plugins/xlsx/charts.d.ts.map +1 -1
  111. package/dist/esm/excel-parser/plugins/xlsx/charts.js +69 -6
  112. package/dist/esm/excel-parser/plugins/xlsx/drawing.d.ts +28 -1
  113. package/dist/esm/excel-parser/plugins/xlsx/drawing.d.ts.map +1 -1
  114. package/dist/esm/excel-parser/plugins/xlsx/drawing.js +99 -0
  115. package/dist/esm/excel-parser/plugins/xlsx/form-controls.d.ts +70 -0
  116. package/dist/esm/excel-parser/plugins/xlsx/form-controls.d.ts.map +1 -0
  117. package/dist/esm/excel-parser/plugins/xlsx/form-controls.js +246 -0
  118. package/dist/esm/excel-parser/plugins/xlsx/index.d.ts +35 -2
  119. package/dist/esm/excel-parser/plugins/xlsx/index.d.ts.map +1 -1
  120. package/dist/esm/excel-parser/plugins/xlsx/index.js +454 -32
  121. package/dist/esm/excel-parser/plugins/xlsx/pivots.d.ts.map +1 -1
  122. package/dist/esm/excel-parser/plugins/xlsx/pivots.js +86 -6
  123. package/dist/esm/excel-parser/plugins/xlsx/sheet-views.d.ts +3 -0
  124. package/dist/esm/excel-parser/plugins/xlsx/sheet-views.d.ts.map +1 -1
  125. package/dist/esm/excel-parser/plugins/xlsx/sheet-views.js +2 -0
  126. package/dist/esm/excel-parser/plugins/xlsx/styles.d.ts +15 -1
  127. package/dist/esm/excel-parser/plugins/xlsx/styles.d.ts.map +1 -1
  128. package/dist/esm/excel-parser/plugins/xlsx/styles.js +92 -2
  129. package/dist/esm/excel-parser/registry.d.ts +7 -0
  130. package/dist/esm/excel-parser/registry.d.ts.map +1 -1
  131. package/dist/esm/excel-parser/registry.js +19 -0
  132. package/dist/esm/excel-parser/types.d.ts +17 -2
  133. package/dist/esm/excel-parser/types.d.ts.map +1 -1
  134. package/dist/esm/excel-parser/workbook.d.ts +3 -0
  135. package/dist/esm/excel-parser/workbook.d.ts.map +1 -1
  136. package/dist/esm/excel-parser/workbook.js +19 -10
  137. package/dist/esm/excel-parser/worker.js +12 -18
  138. package/dist/esm/exporter/ods/ods-export.d.ts.map +1 -1
  139. package/dist/esm/exporter/ods/ods-export.js +306 -35
  140. package/dist/esm/exporter/xlsx/chart-builder.d.ts.map +1 -1
  141. package/dist/esm/exporter/xlsx/chart-builder.js +161 -28
  142. package/dist/esm/exporter/xlsx/chartex-builder.d.ts +36 -0
  143. package/dist/esm/exporter/xlsx/chartex-builder.d.ts.map +1 -0
  144. package/dist/esm/exporter/xlsx/chartex-builder.js +97 -0
  145. package/dist/esm/exporter/xlsx/form-controls-builder.d.ts +61 -0
  146. package/dist/esm/exporter/xlsx/form-controls-builder.d.ts.map +1 -0
  147. package/dist/esm/exporter/xlsx/form-controls-builder.js +173 -0
  148. package/dist/esm/exporter/xlsx/pivot-builder.d.ts +8 -0
  149. package/dist/esm/exporter/xlsx/pivot-builder.d.ts.map +1 -1
  150. package/dist/esm/exporter/xlsx/pivot-builder.js +104 -19
  151. package/dist/esm/exporter/xlsx/style-builder.js +9 -3
  152. package/dist/esm/exporter/xlsx/threaded-comments-builder.d.ts +7 -1
  153. package/dist/esm/exporter/xlsx/threaded-comments-builder.d.ts.map +1 -1
  154. package/dist/esm/exporter/xlsx/threaded-comments-builder.js +15 -3
  155. package/dist/esm/exporter/xlsx/xlsx-export.d.ts +11 -2
  156. package/dist/esm/exporter/xlsx/xlsx-export.d.ts.map +1 -1
  157. package/dist/esm/exporter/xlsx/xlsx-export.js +675 -64
  158. package/dist/esm/helpers/implicit-intersection.d.ts +16 -0
  159. package/dist/esm/helpers/implicit-intersection.d.ts.map +1 -0
  160. package/dist/esm/helpers/implicit-intersection.js +184 -0
  161. package/dist/esm/print-settings.d.ts +105 -0
  162. package/dist/esm/print-settings.d.ts.map +1 -0
  163. package/dist/esm/print-settings.js +422 -0
  164. package/dist/esm/tsconfig.esm.tsbuildinfo +1 -1
  165. package/package.json +3 -3
  166. package/xlsx.d.ts +14 -0
@@ -3,9 +3,10 @@ import { addressToCell, addressToSelection, alpha2number, checkIfStringIsReferen
3
3
  import { XMLParser } from "fast-xml-parser";
4
4
  import { get } from "lodash-es";
5
5
  import { Parser as HtmlParser } from "htmlparser2";
6
- import { createFilterSpecsFromAutoFilter, excelColumnWidthToPixels, findMax, getRangeFromAddressRef, } from "../../helpers";
6
+ import { createFilterSpecsFromAutoFilter, excelColumnWidthToPixels, findMax, getRangeFromAddressRef, parseTableColumnTotals, } from "../../helpers";
7
7
  import { defaultSpreadsheetTheme } from "../../theme-default";
8
8
  import { Unescape } from "../../utils";
9
+ import { compactPrintSettings, isBuiltinPrintName, isDefaultPageMargins, parsePrintAreaFormula, parsePrintTitlesFormula, PRINT_AREA_NAME, } from "../../../print-settings";
9
10
  import { StreamingZipParser } from "../../zip-parser-streaming";
10
11
  import { SheetDataValidationStamper } from "../../dv-cell-stamp";
11
12
  import { BaseWorkbookPlugin } from "../base/index";
@@ -13,12 +14,14 @@ import { processChart } from "./charts";
13
14
  import { customFiltersToCondition, dynamicFilterToCondition, } from "../../../autofilter-condition";
14
15
  import { getConditionalFormattingFromSheet } from "./conditional-formatting";
15
16
  import { getDataValidationsForSheet as parseDataValidationsFromSheetData } from "./data-validations";
16
- import { processAnchors } from "./drawing";
17
+ import { anchorsInDocumentOrder, processAnchors, } from "./drawing";
17
18
  import { getRelationsById } from "./relationships";
18
19
  import { hasPowerQueryParts, } from "../../../power-query";
19
20
  import { extractSheetViewProperties } from "./sheet-views";
20
21
  import { EMPTY_SHEET_THREADED_COMMENTS, parsePersons, parseThreadedComments, } from "./threaded-comments";
21
- import { extractColor, fontNodeToTextFormat, getCellDataForStyleIndex, getCellValueAndFormat, } from "./styles";
22
+ import { getChartExReferenceFromAnchor, processChartEx } from "./chartex";
23
+ import { buildFormControlEmbeds, parseFormControlPr, parseVmlControlCaptions, readLegacyDrawingRelId, readWorksheetControls, } from "./form-controls";
24
+ import { extractColor, fontNodeToTextFormat, getCellDataForStyleIndex, getCellValueAndFormat, resolveNamedCellStyles, } from "./styles";
22
25
  import { extractThemeColors, extractThemeFonts, generateDarkThemeColors, } from "./theme";
23
26
  export var XMLTagProcessor = function (name, value) {
24
27
  return Unescape(value);
@@ -789,6 +792,18 @@ var XlsxPlugin = /** @class */ (function (_super) {
789
792
  * `getDataValidations()` aggregates these per-sheet caches, keeping ids
790
793
  * stable across per-sheet and workbook-wide callers.
791
794
  */
795
+ /**
796
+ * `<protectedRanges>` per sheet, populated while `getSheets` builds each
797
+ * `Sheet` (the element sits after `<sheetData>` in the worksheet part, so it
798
+ * rides the same geometry pass). Read back via `getProtectedRanges`.
799
+ */
800
+ _this.protectedRangesBySheet = new Map();
801
+ /**
802
+ * The builtin `_xlnm.Print_Area` / `_xlnm.Print_Titles` defined names,
803
+ * hoisted out of `namedRanges` (they are sheet-scoped facets, not user
804
+ * names) and merged into each sheet's `printSettings` by `getSheets()`.
805
+ */
806
+ _this.printNamesBySheetId = new Map();
792
807
  _this.dataValidationsBySheetCache = new Map();
793
808
  /** Per-sheet memo for conditional formatting, mirroring the DV cache. */
794
809
  _this.conditionalFormattingBySheetCache = new Map();
@@ -835,7 +850,7 @@ var XlsxPlugin = /** @class */ (function (_super) {
835
850
  };
836
851
  XlsxPlugin.prototype.parseSheetMetadata = function (rid) {
837
852
  return __awaiter(this, void 0, void 0, function () {
838
- var path, merges, rowEntries, outlineSummaryBelow, outlineSummaryRight, columnMetadata, colStyleRanges, maxRowIndex, maxColumnIndex, dimensionRange, sheetHasFilterMode, zeroHeight, defaultRowHeightPx, defaultColumnWidthPx, sheetViewAttrs, paneAttrs, tabColor, autoFilterRef, filterColumns, getOrCreateFilterColumn, currentFilterColumn, tablePartIds, lastScannedRowIndex, scanSeqColIndex, normalizeTag, parser, filterSpecs, sheetViewData, autoFilterRange;
853
+ var path, merges, rowEntries, outlineSummaryBelow, outlineSummaryRight, columnMetadata, colStyleRanges, maxRowIndex, maxColumnIndex, dimensionRange, sheetHasFilterMode, zeroHeight, defaultRowHeightPx, defaultColumnWidthPx, sheetViewAttrs, paneAttrs, tabColor, autoFilterRef, sheetProtection, protectedRangeEntries, pageSetup, pageMargins, printOptions, fitToPage, headerFooter, headerFooterTextTarget, rowBreaks, columnBreaks, breakAxis, filterColumns, getOrCreateFilterColumn, currentFilterColumn, tablePartIds, lastScannedRowIndex, scanSeqColIndex, inCustomSheetViews, normalizeTag, parser, filterSpecs, sheetViewData, autoFilterRange;
839
854
  var _this = this;
840
855
  return __generator(this, function (_a) {
841
856
  switch (_a.label) {
@@ -849,6 +864,10 @@ var XlsxPlugin = /** @class */ (function (_super) {
849
864
  maxColumnIndex = 0;
850
865
  sheetHasFilterMode = false;
851
866
  zeroHeight = false;
867
+ protectedRangeEntries = [];
868
+ fitToPage = false;
869
+ rowBreaks = [];
870
+ columnBreaks = [];
852
871
  filterColumns = new Map();
853
872
  getOrCreateFilterColumn = function (colId) {
854
873
  var entry = filterColumns.get(colId);
@@ -862,13 +881,20 @@ var XlsxPlugin = /** @class */ (function (_super) {
862
881
  tablePartIds = [];
863
882
  lastScannedRowIndex = 0;
864
883
  scanSeqColIndex = 1;
884
+ inCustomSheetViews = false;
865
885
  normalizeTag = function (name) {
866
886
  return name.includes(":") ? name.split(":")[1] : name;
867
887
  };
868
888
  parser = new HtmlParser({
869
889
  onopentag: function (tagName, attrs) {
870
- var _a, _b, _c, _d, _e, _f, _g;
890
+ var _a, _b, _c, _d, _e, _f, _g, _h;
871
891
  var name = normalizeTag(tagName);
892
+ if (name === "customSheetViews") {
893
+ inCustomSheetViews = true;
894
+ return;
895
+ }
896
+ if (inCustomSheetViews)
897
+ return;
872
898
  if (name === "dimension") {
873
899
  var ref = attrs === null || attrs === void 0 ? void 0 : attrs.ref;
874
900
  if (typeof ref === "string") {
@@ -914,6 +940,50 @@ var XlsxPlugin = /** @class */ (function (_super) {
914
940
  if (name === "tabColor") {
915
941
  tabColor = { a$: __assign({}, attrs) };
916
942
  }
943
+ if (name === "sheetProtection") {
944
+ sheetProtection = readSheetProtectionAttrs(attrs);
945
+ }
946
+ if (name === "protectedRange") {
947
+ var sqref = attrs.sqref;
948
+ if (typeof sqref === "string" && sqref) {
949
+ protectedRangeEntries.push({
950
+ sqref: sqref,
951
+ name: attrs.name,
952
+ securityDescriptor: attrs.securityDescriptor,
953
+ });
954
+ }
955
+ }
956
+ if (name === "pageSetUpPr") {
957
+ fitToPage = isXmlTrue(attrs === null || attrs === void 0 ? void 0 : attrs.fitToPage);
958
+ }
959
+ if (name === "pageSetup") {
960
+ pageSetup = readPageSetupAttrs(attrs);
961
+ }
962
+ if (name === "pageMargins") {
963
+ pageMargins = readPageMarginsAttrs(attrs);
964
+ }
965
+ if (name === "printOptions") {
966
+ printOptions = readPrintOptionsAttrs(attrs);
967
+ }
968
+ if (name === "headerFooter") {
969
+ headerFooter = readHeaderFooterAttrs(attrs);
970
+ }
971
+ if (isHeaderFooterTextKey(name)) {
972
+ headerFooterTextTarget = name;
973
+ headerFooter !== null && headerFooter !== void 0 ? headerFooter : (headerFooter = {});
974
+ }
975
+ if (name === "rowBreaks")
976
+ breakAxis = "row";
977
+ if (name === "colBreaks")
978
+ breakAxis = "column";
979
+ if (name === "brk" && breakAxis) {
980
+ // Only manual breaks are user state; Excel drops automatic ones
981
+ // (`man` absent) on save as well.
982
+ var id = parseInt((_a = attrs === null || attrs === void 0 ? void 0 : attrs.id) !== null && _a !== void 0 ? _a : "", 10);
983
+ if (Number.isFinite(id) && id > 0 && isXmlTrue(attrs === null || attrs === void 0 ? void 0 : attrs.man)) {
984
+ (breakAxis === "row" ? rowBreaks : columnBreaks).push(id);
985
+ }
986
+ }
917
987
  if (name === "sheetView" && !sheetViewAttrs) {
918
988
  sheetViewAttrs = __assign({}, attrs);
919
989
  }
@@ -924,8 +994,8 @@ var XlsxPlugin = /** @class */ (function (_super) {
924
994
  return;
925
995
  }
926
996
  if (name === "col") {
927
- var min = parseInt((_a = attrs.min) !== null && _a !== void 0 ? _a : "0", 10);
928
- var max = parseInt((_b = attrs.max) !== null && _b !== void 0 ? _b : "0", 10);
997
+ var min = parseInt((_b = attrs.min) !== null && _b !== void 0 ? _b : "0", 10);
998
+ var max = parseInt((_c = attrs.max) !== null && _c !== void 0 ? _c : "0", 10);
929
999
  // Column default style: cells in these columns without an
930
1000
  // explicit `s` (including cells never written to the XML)
931
1001
  // inherit this xf. Collected separately from DimensionProperties
@@ -984,7 +1054,7 @@ var XlsxPlugin = /** @class */ (function (_super) {
984
1054
  }
985
1055
  }
986
1056
  if (name === "row") {
987
- var parsedRowIndex = parseInt((_c = attrs.r) !== null && _c !== void 0 ? _c : "0", 10);
1057
+ var parsedRowIndex = parseInt((_d = attrs.r) !== null && _d !== void 0 ? _d : "0", 10);
988
1058
  var rowIndex = parsedRowIndex > 0 ? parsedRowIndex : lastScannedRowIndex + 1;
989
1059
  lastScannedRowIndex = rowIndex;
990
1060
  scanSeqColIndex = 1;
@@ -1024,7 +1094,7 @@ var XlsxPlugin = /** @class */ (function (_super) {
1024
1094
  if (name === "mergeCell") {
1025
1095
  var ref = attrs.ref;
1026
1096
  if (typeof ref === "string") {
1027
- var range = (_d = addressToSelection(ref)) === null || _d === void 0 ? void 0 : _d.range;
1097
+ var range = (_e = addressToSelection(ref)) === null || _e === void 0 ? void 0 : _e.range;
1028
1098
  if (range)
1029
1099
  merges.push(range);
1030
1100
  }
@@ -1036,7 +1106,7 @@ var XlsxPlugin = /** @class */ (function (_super) {
1036
1106
  }
1037
1107
  }
1038
1108
  if (name === "filterColumn") {
1039
- var colId = parseInt((_e = attrs.colId) !== null && _e !== void 0 ? _e : "0", 10);
1109
+ var colId = parseInt((_f = attrs.colId) !== null && _f !== void 0 ? _f : "0", 10);
1040
1110
  currentFilterColumn = Number.isNaN(colId) ? null : colId;
1041
1111
  }
1042
1112
  if (name === "filter" && currentFilterColumn !== null) {
@@ -1076,13 +1146,13 @@ var XlsxPlugin = /** @class */ (function (_super) {
1076
1146
  // operator= val=>. Records the AND flag, then each child below.
1077
1147
  if (name === "customFilters" && currentFilterColumn !== null) {
1078
1148
  var entry = getOrCreateFilterColumn(currentFilterColumn);
1079
- entry.customFilters = (_f = entry.customFilters) !== null && _f !== void 0 ? _f : [];
1149
+ entry.customFilters = (_g = entry.customFilters) !== null && _g !== void 0 ? _g : [];
1080
1150
  entry.customFiltersAnd =
1081
1151
  attrs.and === "1" || attrs.and === "true";
1082
1152
  }
1083
1153
  if (name === "customFilter" && currentFilterColumn !== null) {
1084
1154
  var entry = getOrCreateFilterColumn(currentFilterColumn);
1085
- entry.customFilters = (_g = entry.customFilters) !== null && _g !== void 0 ? _g : [];
1155
+ entry.customFilters = (_h = entry.customFilters) !== null && _h !== void 0 ? _h : [];
1086
1156
  entry.customFilters.push({
1087
1157
  operator: attrs.operator,
1088
1158
  val: attrs.val,
@@ -1102,11 +1172,30 @@ var XlsxPlugin = /** @class */ (function (_super) {
1102
1172
  }
1103
1173
  }
1104
1174
  },
1175
+ ontext: function (text) {
1176
+ var _a;
1177
+ if (headerFooterTextTarget && headerFooter) {
1178
+ headerFooter[headerFooterTextTarget] =
1179
+ "".concat((_a = headerFooter[headerFooterTextTarget]) !== null && _a !== void 0 ? _a : "").concat(text);
1180
+ }
1181
+ },
1105
1182
  onclosetag: function (tagName) {
1106
1183
  var name = normalizeTag(tagName);
1184
+ if (name === "customSheetViews") {
1185
+ inCustomSheetViews = false;
1186
+ return;
1187
+ }
1188
+ if (inCustomSheetViews)
1189
+ return;
1107
1190
  if (name === "filterColumn") {
1108
1191
  currentFilterColumn = null;
1109
1192
  }
1193
+ if (isHeaderFooterTextKey(name)) {
1194
+ headerFooterTextTarget = undefined;
1195
+ }
1196
+ if (name === "rowBreaks" || name === "colBreaks") {
1197
+ breakAxis = undefined;
1198
+ }
1110
1199
  },
1111
1200
  onerror: function (err) {
1112
1201
  console.error("Streaming sheet metadata parse error", err);
@@ -1183,6 +1272,18 @@ var XlsxPlugin = /** @class */ (function (_super) {
1183
1272
  tablePartIds: tablePartIds,
1184
1273
  outlineSummaryBelow: outlineSummaryBelow,
1185
1274
  outlineSummaryRight: outlineSummaryRight,
1275
+ sheetProtection: sheetProtection,
1276
+ protectedRangeEntries: protectedRangeEntries,
1277
+ printSettings: compactPrintSettings({
1278
+ pageSetup: fitToPage ? __assign(__assign({}, pageSetup), { fitToPage: true }) : pageSetup,
1279
+ // Every Excel worksheet carries `<pageMargins>`; only non-default
1280
+ // margins are user state worth modelling.
1281
+ pageMargins: isDefaultPageMargins(pageMargins) ? undefined : pageMargins,
1282
+ printOptions: printOptions,
1283
+ headerFooter: headerFooter,
1284
+ rowBreaks: rowBreaks,
1285
+ columnBreaks: columnBreaks,
1286
+ }),
1186
1287
  }];
1187
1288
  }
1188
1289
  });
@@ -1414,6 +1515,7 @@ var XlsxPlugin = /** @class */ (function (_super) {
1414
1515
  conditionalFormatting: false,
1415
1516
  dataValidations: false,
1416
1517
  drawing: false,
1518
+ controls: false,
1417
1519
  };
1418
1520
  sheetPath = this.resolveSheetPath(relation.target);
1419
1521
  sheetRelPath = sheetPath.replace("worksheets", "worksheets/_rels") + ".rels";
@@ -1476,6 +1578,9 @@ var XlsxPlugin = /** @class */ (function (_super) {
1476
1578
  case "drawing":
1477
1579
  features.drawing = true;
1478
1580
  break;
1581
+ case "controls":
1582
+ features.controls = true;
1583
+ break;
1479
1584
  }
1480
1585
  if (name !== "hyperlink") {
1481
1586
  return;
@@ -2004,6 +2109,7 @@ var XlsxPlugin = /** @class */ (function (_super) {
2004
2109
  this.sheetMetadataCache.clear();
2005
2110
  this.dataValidationsBySheetCache.clear();
2006
2111
  this.conditionalFormattingBySheetCache.clear();
2112
+ this.protectedRangesBySheet.clear();
2007
2113
  return [4 /*yield*/, this.loadWorkbookXml()];
2008
2114
  case 2:
2009
2115
  _e.sent();
@@ -2041,6 +2147,7 @@ var XlsxPlugin = /** @class */ (function (_super) {
2041
2147
  this.sheetMetadataCache.clear();
2042
2148
  this.dataValidationsBySheetCache.clear();
2043
2149
  this.conditionalFormattingBySheetCache.clear();
2150
+ this.protectedRangesBySheet.clear();
2044
2151
  this.worksheetBySheetId.clear();
2045
2152
  };
2046
2153
  XlsxPlugin.prototype.clearSharedFormula = function () {
@@ -2136,7 +2243,7 @@ var XlsxPlugin = /** @class */ (function (_super) {
2136
2243
  : [];
2137
2244
  columns = columnDefsArray.map(function (colDef) {
2138
2245
  var name = colDef.a$.name || "";
2139
- var columnObj = { name: name };
2246
+ var columnObj = __assign({ name: name }, parseTableColumnTotals(colDef));
2140
2247
  // Check for calculated column
2141
2248
  // Handle both with and without namespace prefix
2142
2249
  var calculatedColumnFormula = get(colDef, "calculatedColumnFormula") ||
@@ -3232,14 +3339,29 @@ var XlsxPlugin = /** @class */ (function (_super) {
3232
3339
  ? twoCellAnchors
3233
3340
  : [twoCellAnchors])), false).filter(Boolean);
3234
3341
  _loop_5 = function (anchor) {
3235
- var chartRef, chartRId, chartRel, chart;
3342
+ var chartRef, chartExRef, chartExRId_1, chartExRel, chartEx, chartRId, chartRel, chart;
3236
3343
  return __generator(this, function (_k) {
3237
3344
  switch (_k.label) {
3238
3345
  case 0:
3239
3346
  chartRef = getChartReferenceFromAnchor(anchor);
3240
- if (!chartRef) {
3241
- return [2 /*return*/, "continue"];
3242
- }
3347
+ if (!!chartRef) return [3 /*break*/, 3];
3348
+ chartExRef = getChartExReferenceFromAnchor(anchor);
3349
+ chartExRId_1 = get(chartExRef, "a$.r:id") || get(chartExRef, "a$.id");
3350
+ chartExRel = chartExRId_1
3351
+ ? drawingRelsArray.find(function (rel) {
3352
+ return get(rel, "a$.Id") === chartExRId_1 ||
3353
+ get(rel, "a$.id") === chartExRId_1;
3354
+ })
3355
+ : undefined;
3356
+ if (!chartExRel) return [3 /*break*/, 2];
3357
+ return [4 /*yield*/, processChartEx(chartExRel.a$.Target, drawingPath, anchor, sheetId, this_2.zipParser, this_2.xmlParser, sheetDimensions, resolveSheetId)];
3358
+ case 1:
3359
+ chartEx = _k.sent();
3360
+ if (chartEx)
3361
+ charts.push(chartEx);
3362
+ _k.label = 2;
3363
+ case 2: return [2 /*return*/, "continue"];
3364
+ case 3:
3243
3365
  chartRId = get(chartRef, "a$.r:id") ||
3244
3366
  get(chartRef, "a$.id") ||
3245
3367
  get(chartRef, "a$.rId") ||
@@ -3250,15 +3372,15 @@ var XlsxPlugin = /** @class */ (function (_super) {
3250
3372
  chartRel = drawingRelsArray.find(function (rel) {
3251
3373
  return get(rel, "a$.Id") === chartRId || get(rel, "a$.id") === chartRId;
3252
3374
  });
3253
- if (!chartRel) return [3 /*break*/, 2];
3375
+ if (!chartRel) return [3 /*break*/, 5];
3254
3376
  return [4 /*yield*/, processChart(chartRel.a$.Target, drawingPath, anchor, sheetId, this_2.zipParser, this_2.xmlParser, sheetDimensions, resolveSheetId)];
3255
- case 1:
3377
+ case 4:
3256
3378
  chart = _k.sent();
3257
3379
  if (chart) {
3258
3380
  charts.push(chart);
3259
3381
  }
3260
- _k.label = 2;
3261
- case 2: return [2 /*return*/];
3382
+ _k.label = 5;
3383
+ case 5: return [2 /*return*/];
3262
3384
  }
3263
3385
  });
3264
3386
  };
@@ -3338,8 +3460,9 @@ var XlsxPlugin = /** @class */ (function (_super) {
3338
3460
  return __awaiter(this, void 0, void 0, function () {
3339
3461
  var images, target, path, drawing, drawings, sheetRelPath, sheetRelContent, sheetRels, drawingRelations, drawingRelationsArray, _loop_6, this_3, drawings_2, drawings_2_1, drawingElement, e_28_1;
3340
3462
  var e_28, _a;
3341
- return __generator(this, function (_b) {
3342
- switch (_b.label) {
3463
+ var _b;
3464
+ return __generator(this, function (_c) {
3465
+ switch (_c.label) {
3343
3466
  case 0:
3344
3467
  images = [];
3345
3468
  target = this.relations[rid].target;
@@ -3356,17 +3479,17 @@ var XlsxPlugin = /** @class */ (function (_super) {
3356
3479
  sheetRelPath = path.replace("worksheets", "worksheets/_rels") + ".rels";
3357
3480
  return [4 /*yield*/, this.zipParser.getText(sheetRelPath)];
3358
3481
  case 1:
3359
- sheetRelContent = _b.sent();
3482
+ sheetRelContent = _c.sent();
3360
3483
  sheetRels = this.xmlParser.parse(sheetRelContent);
3361
3484
  drawingRelations = get(sheetRels, "Relationships.Relationship");
3362
3485
  drawingRelationsArray = Array.isArray(drawingRelations)
3363
3486
  ? drawingRelations
3364
3487
  : [drawingRelations];
3365
3488
  _loop_6 = function (drawingElement) {
3366
- var drawingId, drawingRels, drawingRels_2, drawingRels_2_1, drawingRel, drawingPath, drawingContent, drawing_1, twoCellAnchors, oneCellAnchors, absoluteAnchors, _c, _d, image, e_29_1, _e, _f, image, e_30_1, _g, _h, image, e_31_1, e_32_1;
3367
- var e_32, _j, e_29, _k, e_30, _l, e_31, _m;
3368
- return __generator(this, function (_o) {
3369
- switch (_o.label) {
3489
+ var drawingId, drawingRels, drawingRels_2, drawingRels_2_1, drawingRel, drawingPath, drawingContent, drawing_1, _d, _e, anchor, _f, _g, image, e_29_1, e_30_1, e_31_1;
3490
+ var e_31, _h, e_30, _j, e_29, _k;
3491
+ return __generator(this, function (_l) {
3492
+ switch (_l.label) {
3370
3493
  case 0:
3371
3494
  drawingId = get(drawingElement, "a$.r:id") || get(drawingElement, "a$.id");
3372
3495
  drawingRels = drawingRelationsArray.filter(function (rel) {
@@ -3375,13 +3498,13 @@ var XlsxPlugin = /** @class */ (function (_super) {
3375
3498
  rel.a$.ID === drawingId ||
3376
3499
  (rel.a$.Target && rel.a$.Target.includes("drawing"));
3377
3500
  });
3378
- _o.label = 1;
3501
+ _l.label = 1;
3379
3502
  case 1:
3380
- _o.trys.push([1, 27, 28, 29]);
3381
- drawingRels_2 = (e_32 = void 0, __values(drawingRels)), drawingRels_2_1 = drawingRels_2.next();
3382
- _o.label = 2;
3503
+ _l.trys.push([1, 19, 20, 21]);
3504
+ drawingRels_2 = (e_31 = void 0, __values(drawingRels)), drawingRels_2_1 = drawingRels_2.next();
3505
+ _l.label = 2;
3383
3506
  case 2:
3384
- if (!!drawingRels_2_1.done) return [3 /*break*/, 26];
3507
+ if (!!drawingRels_2_1.done) return [3 /*break*/, 18];
3385
3508
  drawingRel = drawingRels_2_1.value;
3386
3509
  drawingPath = drawingRel.a$.Target;
3387
3510
  if (drawingPath.startsWith("../")) {
@@ -3400,130 +3523,94 @@ var XlsxPlugin = /** @class */ (function (_super) {
3400
3523
  }
3401
3524
  return [4 /*yield*/, this_3.zipParser.getText(drawingPath)];
3402
3525
  case 3:
3403
- drawingContent = _o.sent();
3404
- drawing_1 = this_3.xmlParser.parse(drawingContent !== null && drawingContent !== void 0 ? drawingContent : "");
3405
- twoCellAnchors = get(drawing_1, "xdr:wsDr.xdr:twoCellAnchor") ||
3406
- get(drawing_1, "wsDr.twoCellAnchor");
3407
- oneCellAnchors = get(drawing_1, "xdr:wsDr.xdr:oneCellAnchor") ||
3408
- get(drawing_1, "wsDr.oneCellAnchor");
3409
- absoluteAnchors = get(drawing_1, "xdr:wsDr.xdr:absoluteAnchor") ||
3410
- get(drawing_1, "wsDr.absoluteAnchor");
3411
- _o.label = 4;
3526
+ drawingContent = (_b = (_l.sent())) !== null && _b !== void 0 ? _b : "";
3527
+ drawing_1 = this_3.xmlParser.parse(drawingContent);
3528
+ _l.label = 4;
3412
3529
  case 4:
3413
- _o.trys.push([4, 9, 10, 11]);
3414
- e_29 = void 0;
3415
- return [4 /*yield*/, processAnchors(oneCellAnchors, "oneCellAnchor", drawingPath, sheetId, this_3.zipParser, this_3.xmlParser)];
3530
+ _l.trys.push([4, 15, 16, 17]);
3531
+ _d = (e_30 = void 0, __values(anchorsInDocumentOrder(drawing_1, drawingContent))), _e = _d.next();
3532
+ _l.label = 5;
3416
3533
  case 5:
3417
- _c = (__values.apply(void 0, [_o.sent()])), _d = _c.next();
3418
- _o.label = 6;
3534
+ if (!!_e.done) return [3 /*break*/, 14];
3535
+ anchor = _e.value;
3536
+ _l.label = 6;
3419
3537
  case 6:
3420
- if (!!_d.done) return [3 /*break*/, 8];
3421
- image = _d.value;
3422
- images.push(image);
3423
- _o.label = 7;
3538
+ _l.trys.push([6, 11, 12, 13]);
3539
+ e_29 = void 0;
3540
+ return [4 /*yield*/, processAnchors(anchor.node, anchor.kind, drawingPath, sheetId, this_3.zipParser, this_3.xmlParser)];
3424
3541
  case 7:
3425
- _d = _c.next();
3426
- return [3 /*break*/, 6];
3427
- case 8: return [3 /*break*/, 11];
3542
+ _f = (__values.apply(void 0, [_l.sent()])), _g = _f.next();
3543
+ _l.label = 8;
3544
+ case 8:
3545
+ if (!!_g.done) return [3 /*break*/, 10];
3546
+ image = _g.value;
3547
+ images.push(image);
3548
+ _l.label = 9;
3428
3549
  case 9:
3429
- e_29_1 = _o.sent();
3550
+ _g = _f.next();
3551
+ return [3 /*break*/, 8];
3552
+ case 10: return [3 /*break*/, 13];
3553
+ case 11:
3554
+ e_29_1 = _l.sent();
3430
3555
  e_29 = { error: e_29_1 };
3431
- return [3 /*break*/, 11];
3432
- case 10:
3556
+ return [3 /*break*/, 13];
3557
+ case 12:
3433
3558
  try {
3434
- if (_d && !_d.done && (_k = _c.return)) _k.call(_c);
3559
+ if (_g && !_g.done && (_k = _f.return)) _k.call(_f);
3435
3560
  }
3436
3561
  finally { if (e_29) throw e_29.error; }
3437
3562
  return [7 /*endfinally*/];
3438
- case 11:
3439
- _o.trys.push([11, 16, 17, 18]);
3440
- e_30 = void 0;
3441
- return [4 /*yield*/, processAnchors(twoCellAnchors, "twoCellAnchors", drawingPath, sheetId, this_3.zipParser, this_3.xmlParser)];
3442
- case 12:
3443
- _e = (__values.apply(void 0, [_o.sent()])), _f = _e.next();
3444
- _o.label = 13;
3445
3563
  case 13:
3446
- if (!!_f.done) return [3 /*break*/, 15];
3447
- image = _f.value;
3448
- images.push(image);
3449
- _o.label = 14;
3450
- case 14:
3451
- _f = _e.next();
3452
- return [3 /*break*/, 13];
3453
- case 15: return [3 /*break*/, 18];
3454
- case 16:
3455
- e_30_1 = _o.sent();
3564
+ _e = _d.next();
3565
+ return [3 /*break*/, 5];
3566
+ case 14: return [3 /*break*/, 17];
3567
+ case 15:
3568
+ e_30_1 = _l.sent();
3456
3569
  e_30 = { error: e_30_1 };
3457
- return [3 /*break*/, 18];
3458
- case 17:
3570
+ return [3 /*break*/, 17];
3571
+ case 16:
3459
3572
  try {
3460
- if (_f && !_f.done && (_l = _e.return)) _l.call(_e);
3573
+ if (_e && !_e.done && (_j = _d.return)) _j.call(_d);
3461
3574
  }
3462
3575
  finally { if (e_30) throw e_30.error; }
3463
3576
  return [7 /*endfinally*/];
3464
- case 18:
3465
- _o.trys.push([18, 23, 24, 25]);
3466
- e_31 = void 0;
3467
- return [4 /*yield*/, processAnchors(absoluteAnchors, "absoluteAnchors", drawingPath, sheetId, this_3.zipParser, this_3.xmlParser)];
3577
+ case 17:
3578
+ drawingRels_2_1 = drawingRels_2.next();
3579
+ return [3 /*break*/, 2];
3580
+ case 18: return [3 /*break*/, 21];
3468
3581
  case 19:
3469
- _g = (__values.apply(void 0, [_o.sent()])), _h = _g.next();
3470
- _o.label = 20;
3471
- case 20:
3472
- if (!!_h.done) return [3 /*break*/, 22];
3473
- image = _h.value;
3474
- images.push(image);
3475
- _o.label = 21;
3476
- case 21:
3477
- _h = _g.next();
3478
- return [3 /*break*/, 20];
3479
- case 22: return [3 /*break*/, 25];
3480
- case 23:
3481
- e_31_1 = _o.sent();
3582
+ e_31_1 = _l.sent();
3482
3583
  e_31 = { error: e_31_1 };
3483
- return [3 /*break*/, 25];
3484
- case 24:
3584
+ return [3 /*break*/, 21];
3585
+ case 20:
3485
3586
  try {
3486
- if (_h && !_h.done && (_m = _g.return)) _m.call(_g);
3587
+ if (drawingRels_2_1 && !drawingRels_2_1.done && (_h = drawingRels_2.return)) _h.call(drawingRels_2);
3487
3588
  }
3488
3589
  finally { if (e_31) throw e_31.error; }
3489
3590
  return [7 /*endfinally*/];
3490
- case 25:
3491
- drawingRels_2_1 = drawingRels_2.next();
3492
- return [3 /*break*/, 2];
3493
- case 26: return [3 /*break*/, 29];
3494
- case 27:
3495
- e_32_1 = _o.sent();
3496
- e_32 = { error: e_32_1 };
3497
- return [3 /*break*/, 29];
3498
- case 28:
3499
- try {
3500
- if (drawingRels_2_1 && !drawingRels_2_1.done && (_j = drawingRels_2.return)) _j.call(drawingRels_2);
3501
- }
3502
- finally { if (e_32) throw e_32.error; }
3503
- return [7 /*endfinally*/];
3504
- case 29: return [2 /*return*/];
3591
+ case 21: return [2 /*return*/];
3505
3592
  }
3506
3593
  });
3507
3594
  };
3508
3595
  this_3 = this;
3509
- _b.label = 2;
3596
+ _c.label = 2;
3510
3597
  case 2:
3511
- _b.trys.push([2, 7, 8, 9]);
3598
+ _c.trys.push([2, 7, 8, 9]);
3512
3599
  drawings_2 = __values(drawings), drawings_2_1 = drawings_2.next();
3513
- _b.label = 3;
3600
+ _c.label = 3;
3514
3601
  case 3:
3515
3602
  if (!!drawings_2_1.done) return [3 /*break*/, 6];
3516
3603
  drawingElement = drawings_2_1.value;
3517
3604
  return [5 /*yield**/, _loop_6(drawingElement)];
3518
3605
  case 4:
3519
- _b.sent();
3520
- _b.label = 5;
3606
+ _c.sent();
3607
+ _c.label = 5;
3521
3608
  case 5:
3522
3609
  drawings_2_1 = drawings_2.next();
3523
3610
  return [3 /*break*/, 3];
3524
3611
  case 6: return [3 /*break*/, 9];
3525
3612
  case 7:
3526
- e_28_1 = _b.sent();
3613
+ e_28_1 = _c.sent();
3527
3614
  e_28 = { error: e_28_1 };
3528
3615
  return [3 /*break*/, 9];
3529
3616
  case 8:
@@ -3569,6 +3656,10 @@ var XlsxPlugin = /** @class */ (function (_super) {
3569
3656
  var _a;
3570
3657
  return (_a = this.theme) !== null && _a !== void 0 ? _a : defaultSpreadsheetTheme;
3571
3658
  };
3659
+ /** `<cellStyles>` resolved to cell formats (toolbar "Workbook styles" gallery). */
3660
+ XlsxPlugin.prototype.getNamedCellStyles = function () {
3661
+ return resolveNamedCellStyles(this.workbookStyles);
3662
+ };
3572
3663
  /**
3573
3664
  * The workbook default font — styles.xml fonts[0], the font every cell
3574
3665
  * without an explicit font inherits. Exporters pass this through so the
@@ -3605,9 +3696,46 @@ var XlsxPlugin = /** @class */ (function (_super) {
3605
3696
  XlsxPlugin.prototype._getSheets = function () {
3606
3697
  return this.workSheets;
3607
3698
  };
3699
+ /**
3700
+ * Resolve a builtin print name to its sheet (`localSheetId` indexes the
3701
+ * `<sheets>` order; a name without scope falls back to the sheet named in
3702
+ * the formula) and record the parsed print area / titles for `getSheets()`.
3703
+ */
3704
+ XlsxPlugin.prototype.stashBuiltinPrintName = function (name, expression, localSheetId, sheetIdBySheetName) {
3705
+ var _a, _b;
3706
+ if (!expression || expression.includes("#REF!"))
3707
+ return;
3708
+ var parsed = name === PRINT_AREA_NAME
3709
+ ? parsePrintAreaFormula(expression)
3710
+ : parsePrintTitlesFormula(expression);
3711
+ if (!parsed)
3712
+ return;
3713
+ var sheetId;
3714
+ if (localSheetId !== undefined) {
3715
+ var index = parseInt(localSheetId, 10);
3716
+ var sheetEl = this._getSheets()[index];
3717
+ var id = Number((_a = sheetEl === null || sheetEl === void 0 ? void 0 : sheetEl.a$) === null || _a === void 0 ? void 0 : _a.sheetId);
3718
+ if (Number.isFinite(id))
3719
+ sheetId = id;
3720
+ }
3721
+ if (sheetId === undefined && parsed.sheetName) {
3722
+ sheetId = sheetIdBySheetName[parsed.sheetName];
3723
+ }
3724
+ if (sheetId === undefined)
3725
+ return;
3726
+ var entry = (_b = this.printNamesBySheetId.get(sheetId)) !== null && _b !== void 0 ? _b : {};
3727
+ if ("ranges" in parsed) {
3728
+ entry.printArea = parsed.ranges;
3729
+ }
3730
+ else {
3731
+ entry.printTitles = parsed.titles;
3732
+ }
3733
+ this.printNamesBySheetId.set(sheetId, entry);
3734
+ };
3608
3735
  XlsxPlugin.prototype._getNamedRanges = function () {
3609
- var e_33, _a, e_34, _b;
3610
- var _c;
3736
+ var e_32, _a, e_33, _b;
3737
+ var _c, _d;
3738
+ this.printNamesBySheetId.clear();
3611
3739
  var xml = this.workbookXml;
3612
3740
  var sheetIdBySheetName = this._getSheets().reduce(function (acc, element) {
3613
3741
  var _a;
@@ -3632,6 +3760,14 @@ var XlsxPlugin = /** @class */ (function (_super) {
3632
3760
  var name_7 = (_c = defined_name.a$) === null || _c === void 0 ? void 0 : _c.name;
3633
3761
  var expression = defined_name.t$ || "";
3634
3762
  var hidden = defined_name.a$.hidden === "1";
3763
+ // `_xlnm.Print_Area` / `_xlnm.Print_Titles` are sheet-scoped print
3764
+ // facets, not user names: they land on `sheet.printSettings` (see
3765
+ // `getSheets()`), never in `namedRanges` — a global copy would make
3766
+ // Excel repair the file on the next export.
3767
+ if (isBuiltinPrintName(name_7)) {
3768
+ this.stashBuiltinPrintName(name_7, typeof expression === "string" ? expression : "", (_d = defined_name.a$) === null || _d === void 0 ? void 0 : _d.localSheetId, sheetIdBySheetName);
3769
+ continue;
3770
+ }
3635
3771
  // Empty defined names are noise; nothing useful to round-trip.
3636
3772
  // Hidden defined names ARE preserved — Excel uses them as scratch
3637
3773
  // names for features like print areas and add-ins, and dropping
@@ -3647,7 +3783,7 @@ var XlsxPlugin = /** @class */ (function (_super) {
3647
3783
  var pushedRange = false;
3648
3784
  if (selections.length) {
3649
3785
  try {
3650
- for (var selections_1 = (e_34 = void 0, __values(selections)), selections_1_1 = selections_1.next(); !selections_1_1.done; selections_1_1 = selections_1.next()) {
3786
+ for (var selections_1 = (e_33 = void 0, __values(selections)), selections_1_1 = selections_1.next(); !selections_1_1.done; selections_1_1 = selections_1.next()) {
3651
3787
  var selection = selections_1_1.value;
3652
3788
  var sheetId = selection.sheetName
3653
3789
  ? sheetIdBySheetName[selection.sheetName]
@@ -3658,12 +3794,12 @@ var XlsxPlugin = /** @class */ (function (_super) {
3658
3794
  }
3659
3795
  }
3660
3796
  }
3661
- catch (e_34_1) { e_34 = { error: e_34_1 }; }
3797
+ catch (e_33_1) { e_33 = { error: e_33_1 }; }
3662
3798
  finally {
3663
3799
  try {
3664
3800
  if (selections_1_1 && !selections_1_1.done && (_b = selections_1.return)) _b.call(selections_1);
3665
3801
  }
3666
- finally { if (e_34) throw e_34.error; }
3802
+ finally { if (e_33) throw e_33.error; }
3667
3803
  }
3668
3804
  }
3669
3805
  // Reference parsed but no selection bound to a known sheet — most
@@ -3687,12 +3823,12 @@ var XlsxPlugin = /** @class */ (function (_super) {
3687
3823
  }
3688
3824
  }
3689
3825
  }
3690
- catch (e_33_1) { e_33 = { error: e_33_1 }; }
3826
+ catch (e_32_1) { e_32 = { error: e_32_1 }; }
3691
3827
  finally {
3692
3828
  try {
3693
3829
  if (defined_names_1_1 && !defined_names_1_1.done && (_a = defined_names_1.return)) _a.call(defined_names_1);
3694
3830
  }
3695
- finally { if (e_33) throw e_33.error; }
3831
+ finally { if (e_32) throw e_32.error; }
3696
3832
  }
3697
3833
  }
3698
3834
  return namedRanges;
@@ -3751,8 +3887,8 @@ var XlsxPlugin = /** @class */ (function (_super) {
3751
3887
  // INTERFACE IMPLEMENTATION METHODS
3752
3888
  XlsxPlugin.prototype.getSheets = function () {
3753
3889
  return __awaiter(this, arguments, void 0, function (minRowCount, minColumnCount) {
3754
- var workSheets, sheets, tables, workSheets_1, workSheets_1_1, element, built, e_35_1;
3755
- var e_35, _a;
3890
+ var workSheets, sheets, tables, workSheets_1, workSheets_1_1, element, built, e_34_1;
3891
+ var e_34, _a;
3756
3892
  var _b;
3757
3893
  if (minRowCount === void 0) { minRowCount = 0; }
3758
3894
  if (minColumnCount === void 0) { minColumnCount = 0; }
@@ -3787,14 +3923,14 @@ var XlsxPlugin = /** @class */ (function (_super) {
3787
3923
  return [3 /*break*/, 2];
3788
3924
  case 5: return [3 /*break*/, 8];
3789
3925
  case 6:
3790
- e_35_1 = _c.sent();
3791
- e_35 = { error: e_35_1 };
3926
+ e_34_1 = _c.sent();
3927
+ e_34 = { error: e_34_1 };
3792
3928
  return [3 /*break*/, 8];
3793
3929
  case 7:
3794
3930
  try {
3795
3931
  if (workSheets_1_1 && !workSheets_1_1.done && (_a = workSheets_1.return)) _a.call(workSheets_1);
3796
3932
  }
3797
- finally { if (e_35) throw e_35.error; }
3933
+ finally { if (e_34) throw e_34.error; }
3798
3934
  return [7 /*endfinally*/];
3799
3935
  case 8: return [2 /*return*/, [sheets, tables]];
3800
3936
  }
@@ -3852,8 +3988,8 @@ var XlsxPlugin = /** @class */ (function (_super) {
3852
3988
  };
3853
3989
  XlsxPlugin.prototype.buildSheetFromElement = function (element_1) {
3854
3990
  return __awaiter(this, arguments, void 0, function (element, minRowCount, minColumnCount) {
3855
- var name, state, sheetId, rid, visibility, hidden, sheet_1, metadata, merges, rowEntries, columnMetadata, maxRowIndex, maxColumnIndex, autoFilterRange_1, filterSpecs, sheetViewData, tabColor, sheetHasFilterMode_1, zeroHeight_1, defaultRowHeightPx, defaultColumnWidthPx, tablePartIds, outlineSummaryBelow, outlineSummaryRight, rowCount, sheetTables, rowInTableMap_1, columnCount, _a, frozenRowCount, frozenColumnCount, paneTopLeftCell, showGridLines, showRowColHeaders, showZeros, zoomScale, merges_2, merges_2_1, range, drawingBounds, finalRowCount, finalColumnCount;
3856
- var e_36, _b;
3991
+ var name, state, sheetId, rid, visibility, hidden, sheet_1, metadata, merges, rowEntries, columnMetadata, maxRowIndex, maxColumnIndex, autoFilterRange_1, filterSpecs, sheetViewData, tabColor, sheetHasFilterMode_1, zeroHeight_1, defaultRowHeightPx, defaultColumnWidthPx, tablePartIds, outlineSummaryBelow, outlineSummaryRight, sheetProtection, protectedRangeEntries, printSettings, printNames, merged, rowCount, sheetTables, rowInTableMap_1, columnCount, _a, frozenRowCount, frozenColumnCount, paneTopLeftCell, showGridLines, showRowColHeaders, showZeros, zoomScale, rightToLeft, merges_2, merges_2_1, range, drawingBounds, finalRowCount, finalColumnCount;
3992
+ var e_35, _b;
3857
3993
  var _c;
3858
3994
  if (minRowCount === void 0) { minRowCount = 0; }
3859
3995
  if (minColumnCount === void 0) { minColumnCount = 0; }
@@ -3885,7 +4021,17 @@ var XlsxPlugin = /** @class */ (function (_super) {
3885
4021
  return [4 /*yield*/, this.getSheetMetadata(rid)];
3886
4022
  case 1:
3887
4023
  metadata = _d.sent();
3888
- merges = metadata.merges, rowEntries = metadata.rowEntries, columnMetadata = metadata.columnMetadata, maxRowIndex = metadata.maxRowIndex, maxColumnIndex = metadata.maxColumnIndex, autoFilterRange_1 = metadata.autoFilterRange, filterSpecs = metadata.filterSpecs, sheetViewData = metadata.sheetViewData, tabColor = metadata.tabColor, sheetHasFilterMode_1 = metadata.sheetHasFilterMode, zeroHeight_1 = metadata.zeroHeight, defaultRowHeightPx = metadata.defaultRowHeightPx, defaultColumnWidthPx = metadata.defaultColumnWidthPx, tablePartIds = metadata.tablePartIds, outlineSummaryBelow = metadata.outlineSummaryBelow, outlineSummaryRight = metadata.outlineSummaryRight;
4024
+ merges = metadata.merges, rowEntries = metadata.rowEntries, columnMetadata = metadata.columnMetadata, maxRowIndex = metadata.maxRowIndex, maxColumnIndex = metadata.maxColumnIndex, autoFilterRange_1 = metadata.autoFilterRange, filterSpecs = metadata.filterSpecs, sheetViewData = metadata.sheetViewData, tabColor = metadata.tabColor, sheetHasFilterMode_1 = metadata.sheetHasFilterMode, zeroHeight_1 = metadata.zeroHeight, defaultRowHeightPx = metadata.defaultRowHeightPx, defaultColumnWidthPx = metadata.defaultColumnWidthPx, tablePartIds = metadata.tablePartIds, outlineSummaryBelow = metadata.outlineSummaryBelow, outlineSummaryRight = metadata.outlineSummaryRight, sheetProtection = metadata.sheetProtection, protectedRangeEntries = metadata.protectedRangeEntries, printSettings = metadata.printSettings;
4025
+ if (sheetProtection) {
4026
+ sheet_1.sheetProtection = sheetProtection;
4027
+ }
4028
+ {
4029
+ printNames = this.printNamesBySheetId.get(sheetId);
4030
+ merged = compactPrintSettings(__assign(__assign({}, printSettings), { printArea: printNames === null || printNames === void 0 ? void 0 : printNames.printArea, printTitles: printNames === null || printNames === void 0 ? void 0 : printNames.printTitles }));
4031
+ if (merged)
4032
+ sheet_1.printSettings = merged;
4033
+ }
4034
+ this.protectedRangesBySheet.set(sheetId, protectedRangesFromEntries(sheetId, protectedRangeEntries));
3889
4035
  if (defaultRowHeightPx !== undefined) {
3890
4036
  sheet_1.defaultRowHeight = defaultRowHeightPx;
3891
4037
  }
@@ -3917,7 +4063,7 @@ var XlsxPlugin = /** @class */ (function (_super) {
3917
4063
  }
3918
4064
  });
3919
4065
  columnCount = 0;
3920
- _a = extractSheetViewProperties(sheetViewData), frozenRowCount = _a.frozenRowCount, frozenColumnCount = _a.frozenColumnCount, paneTopLeftCell = _a.paneTopLeftCell, showGridLines = _a.showGridLines, showRowColHeaders = _a.showRowColHeaders, showZeros = _a.showZeros, zoomScale = _a.zoomScale;
4066
+ _a = extractSheetViewProperties(sheetViewData), frozenRowCount = _a.frozenRowCount, frozenColumnCount = _a.frozenColumnCount, paneTopLeftCell = _a.paneTopLeftCell, showGridLines = _a.showGridLines, showRowColHeaders = _a.showRowColHeaders, showZeros = _a.showZeros, zoomScale = _a.zoomScale, rightToLeft = _a.rightToLeft;
3921
4067
  sheet_1.frozenRowCount = frozenRowCount;
3922
4068
  sheet_1.frozenColumnCount = frozenColumnCount;
3923
4069
  if (paneTopLeftCell) {
@@ -3933,6 +4079,8 @@ var XlsxPlugin = /** @class */ (function (_super) {
3933
4079
  if (zoomScale !== undefined && zoomScale !== 100) {
3934
4080
  sheet_1.zoomScale = zoomScale;
3935
4081
  }
4082
+ if (rightToLeft)
4083
+ sheet_1.rightToLeft = true;
3936
4084
  // tab color
3937
4085
  if (tabColor) {
3938
4086
  sheet_1.tabColor = extractColor(tabColor, this.workbookStyles.indexedColors);
@@ -3952,12 +4100,12 @@ var XlsxPlugin = /** @class */ (function (_super) {
3952
4100
  sheet_1.merges.push(range);
3953
4101
  }
3954
4102
  }
3955
- catch (e_36_1) { e_36 = { error: e_36_1 }; }
4103
+ catch (e_35_1) { e_35 = { error: e_35_1 }; }
3956
4104
  finally {
3957
4105
  try {
3958
4106
  if (merges_2_1 && !merges_2_1.done && (_b = merges_2.return)) _b.call(merges_2);
3959
4107
  }
3960
- finally { if (e_36) throw e_36.error; }
4108
+ finally { if (e_35) throw e_35.error; }
3961
4109
  }
3962
4110
  columnCount = findMax([maxColumnIndex, minColumnCount]);
3963
4111
  rowEntries.forEach(function (entry, rowIndex) {
@@ -4045,8 +4193,8 @@ var XlsxPlugin = /** @class */ (function (_super) {
4045
4193
  };
4046
4194
  XlsxPlugin.prototype.processSheetData = function () {
4047
4195
  return __asyncGenerator(this, arguments, function processSheetData_1(chunkSize, enableCellXfsRegistry, _enableSharedStrings, onPhase) {
4048
- var workSheets, totalSheets, currentSheetIndex, workSheets_2, workSheets_2_1, element, e_37_1;
4049
- var e_37, _a;
4196
+ var workSheets, totalSheets, currentSheetIndex, workSheets_2, workSheets_2_1, element, e_36_1;
4197
+ var e_36, _a;
4050
4198
  var _b;
4051
4199
  if (chunkSize === void 0) { chunkSize = 100; }
4052
4200
  if (enableCellXfsRegistry === void 0) { enableCellXfsRegistry = false; }
@@ -4085,14 +4233,14 @@ var XlsxPlugin = /** @class */ (function (_super) {
4085
4233
  return [3 /*break*/, 2];
4086
4234
  case 6: return [3 /*break*/, 9];
4087
4235
  case 7:
4088
- e_37_1 = _c.sent();
4089
- e_37 = { error: e_37_1 };
4236
+ e_36_1 = _c.sent();
4237
+ e_36 = { error: e_36_1 };
4090
4238
  return [3 /*break*/, 9];
4091
4239
  case 8:
4092
4240
  try {
4093
4241
  if (workSheets_2_1 && !workSheets_2_1.done && (_a = workSheets_2.return)) _a.call(workSheets_2);
4094
4242
  }
4095
- finally { if (e_37) throw e_37.error; }
4243
+ finally { if (e_36) throw e_36.error; }
4096
4244
  return [7 /*endfinally*/];
4097
4245
  case 9: return [2 /*return*/];
4098
4246
  }
@@ -4142,10 +4290,10 @@ var XlsxPlugin = /** @class */ (function (_super) {
4142
4290
  };
4143
4291
  XlsxPlugin.prototype.processOneSheet = function (element_1, _a) {
4144
4292
  return __asyncGenerator(this, arguments, function processOneSheet_1(element, _b) {
4145
- var name_8, sheetId_1, rid, metadata, materializeMaxColumn, colStyleByColumn_1, _c, _d, _e, min, max, styleIndex, clampedMax, col, styleCellTemplates_1, getTemplateForStyleIndex, styleMaterializeBudget, mergeRangesByRow_1, getMergeRangeForCell, sheetComments, sheetThreadedComments_1, commentsByRow_1, threadsByRow_1, hyperlinksByRow, sparklinesByRow, dvFeatures, dvStamper, _f, _g, CHUNK_SIZE, chunkIndex_1, totalRowsProcessed_1, totalRowsKnown_1, lastRowIndex, currentChunk_1, currentChunkRowIndices_1, startRowIndex_1, endRowIndex_1, flushChunk, _loop_7, this_4, _h, _j, _k, e_38_1, _l, _m, trailing, payload, e_39_1, finalPayload;
4146
- var e_40, _o, e_39, _p;
4293
+ var name_8, sheetId_1, rid, metadata, materializeMaxColumn, colStyleByColumn_1, _c, _d, _e, min, max, styleIndex, clampedMax, col, styleCellTemplates_1, getTemplateForStyleIndex, styleMaterializeBudget, mergeRangesByRow_1, getMergeRangeForCell, sheetComments, sheetThreadedComments_1, commentsByRow_1, threadsByRow_1, hyperlinksByRow, sparklinesByRow, dvFeatures, dvStamper, _f, _g, CHUNK_SIZE, chunkIndex_1, totalRowsProcessed_1, totalRowsKnown_1, lastRowIndex, currentChunk_1, currentChunkRowIndices_1, startRowIndex_1, endRowIndex_1, flushChunk, _loop_7, this_4, _h, _j, _k, e_37_1, _l, _m, trailing, payload, e_38_1, finalPayload;
4294
+ var e_39, _o, e_38, _p;
4147
4295
  var _this = this;
4148
- var _q, e_38, _r, _s;
4296
+ var _q, e_37, _r, _s;
4149
4297
  var _t, _u, _v, _w, _x, _y, _z, _0, _1, _2, _3, _4;
4150
4298
  var chunkSize = _b.chunkSize, enableCellXfsRegistry = _b.enableCellXfsRegistry, _enableSharedStrings = _b.enableSharedStrings, onPhase = _b.onPhase, currentSheetIndex = _b.currentSheetIndex, totalSheets = _b.totalSheets;
4151
4299
  return __generator(this, function (_5) {
@@ -4175,12 +4323,12 @@ var XlsxPlugin = /** @class */ (function (_super) {
4175
4323
  }
4176
4324
  }
4177
4325
  }
4178
- catch (e_40_1) { e_40 = { error: e_40_1 }; }
4326
+ catch (e_39_1) { e_39 = { error: e_39_1 }; }
4179
4327
  finally {
4180
4328
  try {
4181
4329
  if (_d && !_d.done && (_o = _c.return)) _o.call(_c);
4182
4330
  }
4183
- finally { if (e_40) throw e_40.error; }
4331
+ finally { if (e_39) throw e_39.error; }
4184
4332
  }
4185
4333
  styleCellTemplates_1 = new Map();
4186
4334
  getTemplateForStyleIndex = function (styleIndex) {
@@ -4194,7 +4342,7 @@ var XlsxPlugin = /** @class */ (function (_super) {
4194
4342
  styleMaterializeBudget = STYLE_MATERIALIZE_CELL_BUDGET;
4195
4343
  mergeRangesByRow_1 = this.buildMergeRangesByRow(metadata.merges);
4196
4344
  getMergeRangeForCell = function (rowIndex, columnIndex) {
4197
- var e_41, _a;
4345
+ var e_40, _a;
4198
4346
  var ranges = mergeRangesByRow_1.get(rowIndex);
4199
4347
  if (!ranges)
4200
4348
  return undefined;
@@ -4207,12 +4355,12 @@ var XlsxPlugin = /** @class */ (function (_super) {
4207
4355
  }
4208
4356
  }
4209
4357
  }
4210
- catch (e_41_1) { e_41 = { error: e_41_1 }; }
4358
+ catch (e_40_1) { e_40 = { error: e_40_1 }; }
4211
4359
  finally {
4212
4360
  try {
4213
4361
  if (ranges_1_1 && !ranges_1_1.done && (_a = ranges_1.return)) _a.call(ranges_1);
4214
4362
  }
4215
- finally { if (e_41) throw e_41.error; }
4363
+ finally { if (e_40) throw e_40.error; }
4216
4364
  }
4217
4365
  return undefined;
4218
4366
  };
@@ -4312,7 +4460,7 @@ var XlsxPlugin = /** @class */ (function (_super) {
4312
4460
  _5.trys.push([9, 15, 16, 21]);
4313
4461
  _loop_7 = function () {
4314
4462
  var row, parsedRowIndex, rowIndex, rowData, rowAttrs, hasRowCustomFormat, parsedRowStyle, rowStyleIndex, getInheritedStyleIndex, cells, rowComments, rowThreads, rowHyperlinks, rowCellsByColumnIndex, cellArray, seqColIndex, cellArray_1, cellArray_1_1, cell, cellRef, columnIndex, colStr, inherited, k, cell, cellRef, columnIndex, colStr, mergeRange, cellValue, hyperlink, comment, threadId, columnIndex, inherited, template, _6, _7, _8, columnIndex, hyperlink, _9, _10, _11, columnIndex, text, _12, _13, _14, columnIndex, threadId, rowSparklines, _15, _16, _17, columnIndex, sparkline, existingCell, preserveGaps, sparklineData, selection, _18, startRowIndex_2, endRowIndex_2, startColumnIndex, endColumnIndex, col, cell, value, sparklineOptions, cellData, payload;
4315
- var e_42, _19, e_43, _20, e_44, _21, e_45, _22, e_46, _23;
4463
+ var e_41, _19, e_42, _20, e_43, _21, e_44, _22, e_45, _23;
4316
4464
  return __generator(this, function (_24) {
4317
4465
  switch (_24.label) {
4318
4466
  case 0:
@@ -4354,7 +4502,7 @@ var XlsxPlugin = /** @class */ (function (_super) {
4354
4502
  cellArray = Array.isArray(cells) ? cells : [cells];
4355
4503
  seqColIndex = 1;
4356
4504
  try {
4357
- for (cellArray_1 = (e_42 = void 0, __values(cellArray)), cellArray_1_1 = cellArray_1.next(); !cellArray_1_1.done; cellArray_1_1 = cellArray_1.next()) {
4505
+ for (cellArray_1 = (e_41 = void 0, __values(cellArray)), cellArray_1_1 = cellArray_1.next(); !cellArray_1_1.done; cellArray_1_1 = cellArray_1.next()) {
4358
4506
  cell = cellArray_1_1.value;
4359
4507
  if (!cell || !cell.a$) {
4360
4508
  seqColIndex++;
@@ -4381,12 +4529,12 @@ var XlsxPlugin = /** @class */ (function (_super) {
4381
4529
  rowCellsByColumnIndex.set(columnIndex, cell);
4382
4530
  }
4383
4531
  }
4384
- catch (e_42_1) { e_42 = { error: e_42_1 }; }
4532
+ catch (e_41_1) { e_41 = { error: e_41_1 }; }
4385
4533
  finally {
4386
4534
  try {
4387
4535
  if (cellArray_1_1 && !cellArray_1_1.done && (_19 = cellArray_1.return)) _19.call(cellArray_1);
4388
4536
  }
4389
- finally { if (e_42) throw e_42.error; }
4537
+ finally { if (e_41) throw e_41.error; }
4390
4538
  }
4391
4539
  // Second pass: process each cell
4392
4540
  seqColIndex = 1;
@@ -4460,7 +4608,7 @@ var XlsxPlugin = /** @class */ (function (_super) {
4460
4608
  }
4461
4609
  if (rowHyperlinks) {
4462
4610
  try {
4463
- for (_6 = (e_43 = void 0, __values(rowHyperlinks.entries())), _7 = _6.next(); !_7.done; _7 = _6.next()) {
4611
+ for (_6 = (e_42 = void 0, __values(rowHyperlinks.entries())), _7 = _6.next(); !_7.done; _7 = _6.next()) {
4464
4612
  _8 = __read(_7.value, 2), columnIndex = _8[0], hyperlink = _8[1];
4465
4613
  if (rowData.values[columnIndex]) {
4466
4614
  if (!((_y = rowData.values[columnIndex]) === null || _y === void 0 ? void 0 : _y.hyperlink)) {
@@ -4472,18 +4620,18 @@ var XlsxPlugin = /** @class */ (function (_super) {
4472
4620
  }
4473
4621
  }
4474
4622
  }
4475
- catch (e_43_1) { e_43 = { error: e_43_1 }; }
4623
+ catch (e_42_1) { e_42 = { error: e_42_1 }; }
4476
4624
  finally {
4477
4625
  try {
4478
4626
  if (_7 && !_7.done && (_20 = _6.return)) _20.call(_6);
4479
4627
  }
4480
- finally { if (e_43) throw e_43.error; }
4628
+ finally { if (e_42) throw e_42.error; }
4481
4629
  }
4482
4630
  hyperlinksByRow.delete(rowIndex);
4483
4631
  }
4484
4632
  if (rowComments) {
4485
4633
  try {
4486
- for (_9 = (e_44 = void 0, __values(rowComments.entries())), _10 = _9.next(); !_10.done; _10 = _9.next()) {
4634
+ for (_9 = (e_43 = void 0, __values(rowComments.entries())), _10 = _9.next(); !_10.done; _10 = _9.next()) {
4487
4635
  _11 = __read(_10.value, 2), columnIndex = _11[0], text = _11[1];
4488
4636
  if (rowData.values[columnIndex]) {
4489
4637
  if (!((_z = rowData.values[columnIndex]) === null || _z === void 0 ? void 0 : _z.note)) {
@@ -4495,18 +4643,18 @@ var XlsxPlugin = /** @class */ (function (_super) {
4495
4643
  }
4496
4644
  }
4497
4645
  }
4498
- catch (e_44_1) { e_44 = { error: e_44_1 }; }
4646
+ catch (e_43_1) { e_43 = { error: e_43_1 }; }
4499
4647
  finally {
4500
4648
  try {
4501
4649
  if (_10 && !_10.done && (_21 = _9.return)) _21.call(_9);
4502
4650
  }
4503
- finally { if (e_44) throw e_44.error; }
4651
+ finally { if (e_43) throw e_43.error; }
4504
4652
  }
4505
4653
  commentsByRow_1.delete(rowIndex);
4506
4654
  }
4507
4655
  if (rowThreads) {
4508
4656
  try {
4509
- for (_12 = (e_45 = void 0, __values(rowThreads.entries())), _13 = _12.next(); !_13.done; _13 = _12.next()) {
4657
+ for (_12 = (e_44 = void 0, __values(rowThreads.entries())), _13 = _12.next(); !_13.done; _13 = _12.next()) {
4510
4658
  _14 = __read(_13.value, 2), columnIndex = _14[0], threadId = _14[1];
4511
4659
  if (rowData.values[columnIndex]) {
4512
4660
  if (!((_0 = rowData.values[columnIndex]) === null || _0 === void 0 ? void 0 : _0.commentThreadId)) {
@@ -4520,19 +4668,19 @@ var XlsxPlugin = /** @class */ (function (_super) {
4520
4668
  }
4521
4669
  }
4522
4670
  }
4523
- catch (e_45_1) { e_45 = { error: e_45_1 }; }
4671
+ catch (e_44_1) { e_44 = { error: e_44_1 }; }
4524
4672
  finally {
4525
4673
  try {
4526
4674
  if (_13 && !_13.done && (_22 = _12.return)) _22.call(_12);
4527
4675
  }
4528
- finally { if (e_45) throw e_45.error; }
4676
+ finally { if (e_44) throw e_44.error; }
4529
4677
  }
4530
4678
  threadsByRow_1.delete(rowIndex);
4531
4679
  }
4532
4680
  rowSparklines = sparklinesByRow.get(rowIndex);
4533
4681
  if (rowSparklines) {
4534
4682
  try {
4535
- for (_15 = (e_46 = void 0, __values(rowSparklines.entries())), _16 = _15.next(); !_16.done; _16 = _15.next()) {
4683
+ for (_15 = (e_45 = void 0, __values(rowSparklines.entries())), _16 = _15.next(); !_16.done; _16 = _15.next()) {
4536
4684
  _17 = __read(_16.value, 2), columnIndex = _17[0], sparkline = _17[1];
4537
4685
  existingCell = rowData.values[columnIndex];
4538
4686
  // Only set formula if cell doesn't already have one
@@ -4627,12 +4775,12 @@ var XlsxPlugin = /** @class */ (function (_super) {
4627
4775
  rowData.values[columnIndex] = cellData;
4628
4776
  }
4629
4777
  }
4630
- catch (e_46_1) { e_46 = { error: e_46_1 }; }
4778
+ catch (e_45_1) { e_45 = { error: e_45_1 }; }
4631
4779
  finally {
4632
4780
  try {
4633
4781
  if (_16 && !_16.done && (_23 = _15.return)) _23.call(_15);
4634
4782
  }
4635
- finally { if (e_46) throw e_46.error; }
4783
+ finally { if (e_45) throw e_45.error; }
4636
4784
  }
4637
4785
  sparklinesByRow.delete(rowIndex);
4638
4786
  }
@@ -4667,8 +4815,8 @@ var XlsxPlugin = /** @class */ (function (_super) {
4667
4815
  return [3 /*break*/, 10];
4668
4816
  case 14: return [3 /*break*/, 21];
4669
4817
  case 15:
4670
- e_38_1 = _5.sent();
4671
- e_38 = { error: e_38_1 };
4818
+ e_37_1 = _5.sent();
4819
+ e_37 = { error: e_37_1 };
4672
4820
  return [3 /*break*/, 21];
4673
4821
  case 16:
4674
4822
  _5.trys.push([16, , 19, 20]);
@@ -4679,7 +4827,7 @@ var XlsxPlugin = /** @class */ (function (_super) {
4679
4827
  _5.label = 18;
4680
4828
  case 18: return [3 /*break*/, 20];
4681
4829
  case 19:
4682
- if (e_38) throw e_38.error;
4830
+ if (e_37) throw e_37.error;
4683
4831
  return [7 /*endfinally*/];
4684
4832
  case 20: return [7 /*endfinally*/];
4685
4833
  case 21:
@@ -4712,14 +4860,14 @@ var XlsxPlugin = /** @class */ (function (_super) {
4712
4860
  return [3 /*break*/, 23];
4713
4861
  case 27: return [3 /*break*/, 30];
4714
4862
  case 28:
4715
- e_39_1 = _5.sent();
4716
- e_39 = { error: e_39_1 };
4863
+ e_38_1 = _5.sent();
4864
+ e_38 = { error: e_38_1 };
4717
4865
  return [3 /*break*/, 30];
4718
4866
  case 29:
4719
4867
  try {
4720
4868
  if (_m && !_m.done && (_p = _l.return)) _p.call(_l);
4721
4869
  }
4722
- finally { if (e_39) throw e_39.error; }
4870
+ finally { if (e_38) throw e_38.error; }
4723
4871
  return [7 /*endfinally*/];
4724
4872
  case 30:
4725
4873
  finalPayload = flushChunk(true);
@@ -4736,58 +4884,180 @@ var XlsxPlugin = /** @class */ (function (_super) {
4736
4884
  };
4737
4885
  XlsxPlugin.prototype.getDrawings = function () {
4738
4886
  return __awaiter(this, void 0, void 0, function () {
4739
- var workSheets, allDrawings, workSheets_3, workSheets_3_1, element, sheetId, rid, features, sheet_data, drawings, e_47_1;
4740
- var e_47, _a;
4741
- return __generator(this, function (_b) {
4742
- switch (_b.label) {
4887
+ var workSheets, allDrawings, workSheets_3, workSheets_3_1, element, sheetId, rid, features, sheet_data, drawings, _a, _b, _c, _d, e_46_1;
4888
+ var e_46, _e;
4889
+ return __generator(this, function (_f) {
4890
+ switch (_f.label) {
4743
4891
  case 0:
4744
4892
  workSheets = this._getSheets();
4745
4893
  allDrawings = [];
4746
- _b.label = 1;
4894
+ _f.label = 1;
4747
4895
  case 1:
4748
- _b.trys.push([1, 7, 8, 9]);
4896
+ _f.trys.push([1, 9, 10, 11]);
4749
4897
  workSheets_3 = __values(workSheets), workSheets_3_1 = workSheets_3.next();
4750
- _b.label = 2;
4898
+ _f.label = 2;
4751
4899
  case 2:
4752
- if (!!workSheets_3_1.done) return [3 /*break*/, 6];
4900
+ if (!!workSheets_3_1.done) return [3 /*break*/, 8];
4753
4901
  element = workSheets_3_1.value;
4754
4902
  sheetId = Number(element.a$.sheetId);
4755
4903
  rid = element.a$["r:id"];
4756
4904
  features = this.sheetFeatures.get(rid);
4757
- if (features && !features.drawing) {
4758
- return [3 /*break*/, 5];
4905
+ if (features && !features.drawing && !features.controls) {
4906
+ return [3 /*break*/, 7];
4759
4907
  }
4760
4908
  return [4 /*yield*/, this.getSheetData(rid)];
4761
4909
  case 3:
4762
- sheet_data = _b.sent();
4910
+ sheet_data = _f.sent();
4911
+ if (!(!features || features.drawing)) return [3 /*break*/, 5];
4763
4912
  return [4 /*yield*/, this._getDrawings(rid, sheetId, sheet_data)];
4764
4913
  case 4:
4765
- drawings = _b.sent();
4914
+ drawings = _f.sent();
4766
4915
  allDrawings.push.apply(allDrawings, __spreadArray([], __read(drawings), false));
4767
- _b.label = 5;
4916
+ _f.label = 5;
4768
4917
  case 5:
4918
+ if (!(!features || features.controls)) return [3 /*break*/, 7];
4919
+ _b = (_a = allDrawings.push).apply;
4920
+ _c = [allDrawings];
4921
+ _d = [[]];
4922
+ return [4 /*yield*/, this._getFormControls(rid, sheetId, sheet_data)];
4923
+ case 6:
4924
+ _b.apply(_a, _c.concat([__spreadArray.apply(void 0, _d.concat([__read.apply(void 0, [(_f.sent())]), false]))]));
4925
+ _f.label = 7;
4926
+ case 7:
4769
4927
  workSheets_3_1 = workSheets_3.next();
4770
4928
  return [3 /*break*/, 2];
4771
- case 6: return [3 /*break*/, 9];
4929
+ case 8: return [3 /*break*/, 11];
4930
+ case 9:
4931
+ e_46_1 = _f.sent();
4932
+ e_46 = { error: e_46_1 };
4933
+ return [3 /*break*/, 11];
4934
+ case 10:
4935
+ try {
4936
+ if (workSheets_3_1 && !workSheets_3_1.done && (_e = workSheets_3.return)) _e.call(workSheets_3);
4937
+ }
4938
+ finally { if (e_46) throw e_46.error; }
4939
+ return [7 /*endfinally*/];
4940
+ case 11: return [2 /*return*/, allDrawings];
4941
+ }
4942
+ });
4943
+ });
4944
+ };
4945
+ /**
4946
+ * Form controls: `<controls><control r:id>` → `xl/ctrlProps/ctrlPropN.xml`
4947
+ * (+ the caption from the sheet's legacy VML part), as `formControl`
4948
+ * embeds. Nothing is rendered interactively — they round-trip.
4949
+ */
4950
+ XlsxPlugin.prototype._getFormControls = function (rid, sheetId, sheetData) {
4951
+ return __awaiter(this, void 0, void 0, function () {
4952
+ var controls, target, sheetPath, sheetRelPath, relTargets, sheetRels, _a, _b, list, _c, _d, rel, id, relTarget, _e, ctrlProps, controls_1, controls_1_1, control, relTarget, xml, _f, e_47_1, captions, legacyRelId, vmlTarget, _g, _h;
4953
+ var e_48, _j, e_47, _k;
4954
+ var _l, _m;
4955
+ return __generator(this, function (_o) {
4956
+ switch (_o.label) {
4957
+ case 0:
4958
+ controls = readWorksheetControls(sheetData);
4959
+ if (!controls.length)
4960
+ return [2 /*return*/, []];
4961
+ target = this.relations[rid].target;
4962
+ sheetPath = target.startsWith("/xl")
4963
+ ? target.replace(/^\//gi, "")
4964
+ : "xl/".concat(target);
4965
+ sheetRelPath = sheetPath.replace("worksheets", "worksheets/_rels") + ".rels";
4966
+ relTargets = new Map();
4967
+ _o.label = 1;
4968
+ case 1:
4969
+ _o.trys.push([1, 3, , 4]);
4970
+ _b = (_a = this.xmlParser).parse;
4971
+ return [4 /*yield*/, this.zipParser.getText(sheetRelPath)];
4972
+ case 2:
4973
+ sheetRels = _b.apply(_a, [_o.sent()]);
4974
+ list = get(sheetRels, "Relationships.Relationship");
4975
+ try {
4976
+ for (_c = __values(Array.isArray(list) ? list : list ? [list] : []), _d = _c.next(); !_d.done; _d = _c.next()) {
4977
+ rel = _d.value;
4978
+ id = (_l = rel === null || rel === void 0 ? void 0 : rel.a$) === null || _l === void 0 ? void 0 : _l.Id;
4979
+ relTarget = (_m = rel === null || rel === void 0 ? void 0 : rel.a$) === null || _m === void 0 ? void 0 : _m.Target;
4980
+ if (typeof id === "string" && typeof relTarget === "string") {
4981
+ relTargets.set(id, relTarget);
4982
+ }
4983
+ }
4984
+ }
4985
+ catch (e_48_1) { e_48 = { error: e_48_1 }; }
4986
+ finally {
4987
+ try {
4988
+ if (_d && !_d.done && (_j = _c.return)) _j.call(_c);
4989
+ }
4990
+ finally { if (e_48) throw e_48.error; }
4991
+ }
4992
+ return [3 /*break*/, 4];
4993
+ case 3:
4994
+ _e = _o.sent();
4995
+ return [2 /*return*/, []];
4996
+ case 4:
4997
+ ctrlProps = new Map();
4998
+ _o.label = 5;
4999
+ case 5:
5000
+ _o.trys.push([5, 12, 13, 14]);
5001
+ controls_1 = __values(controls), controls_1_1 = controls_1.next();
5002
+ _o.label = 6;
5003
+ case 6:
5004
+ if (!!controls_1_1.done) return [3 /*break*/, 11];
5005
+ control = controls_1_1.value;
5006
+ if (!control.relId || ctrlProps.has(control.relId))
5007
+ return [3 /*break*/, 10];
5008
+ relTarget = relTargets.get(control.relId);
5009
+ if (!relTarget)
5010
+ return [3 /*break*/, 10];
5011
+ _o.label = 7;
4772
5012
  case 7:
4773
- e_47_1 = _b.sent();
4774
- e_47 = { error: e_47_1 };
4775
- return [3 /*break*/, 9];
5013
+ _o.trys.push([7, 9, , 10]);
5014
+ return [4 /*yield*/, this.zipParser.getText(this.resolveRelationshipTarget(sheetPath, relTarget))];
4776
5015
  case 8:
5016
+ xml = _o.sent();
5017
+ ctrlProps.set(control.relId, parseFormControlPr(this.xmlPreserveValueParser.parse(xml)));
5018
+ return [3 /*break*/, 10];
5019
+ case 9:
5020
+ _f = _o.sent();
5021
+ return [3 /*break*/, 10];
5022
+ case 10:
5023
+ controls_1_1 = controls_1.next();
5024
+ return [3 /*break*/, 6];
5025
+ case 11: return [3 /*break*/, 14];
5026
+ case 12:
5027
+ e_47_1 = _o.sent();
5028
+ e_47 = { error: e_47_1 };
5029
+ return [3 /*break*/, 14];
5030
+ case 13:
4777
5031
  try {
4778
- if (workSheets_3_1 && !workSheets_3_1.done && (_a = workSheets_3.return)) _a.call(workSheets_3);
5032
+ if (controls_1_1 && !controls_1_1.done && (_k = controls_1.return)) _k.call(controls_1);
4779
5033
  }
4780
5034
  finally { if (e_47) throw e_47.error; }
4781
5035
  return [7 /*endfinally*/];
4782
- case 9: return [2 /*return*/, allDrawings];
5036
+ case 14:
5037
+ captions = new Map();
5038
+ legacyRelId = readLegacyDrawingRelId(sheetData);
5039
+ vmlTarget = legacyRelId ? relTargets.get(legacyRelId) : undefined;
5040
+ if (!vmlTarget) return [3 /*break*/, 18];
5041
+ _o.label = 15;
5042
+ case 15:
5043
+ _o.trys.push([15, 17, , 18]);
5044
+ _g = parseVmlControlCaptions;
5045
+ return [4 /*yield*/, this.zipParser.getText(this.resolveRelationshipTarget(sheetPath, vmlTarget))];
5046
+ case 16:
5047
+ captions = _g.apply(void 0, [_o.sent()]);
5048
+ return [3 /*break*/, 18];
5049
+ case 17:
5050
+ _h = _o.sent();
5051
+ return [3 /*break*/, 18];
5052
+ case 18: return [2 /*return*/, buildFormControlEmbeds({ controls: controls, sheetId: sheetId, ctrlProps: ctrlProps, captions: captions })];
4783
5053
  }
4784
5054
  });
4785
5055
  });
4786
5056
  };
4787
5057
  XlsxPlugin.prototype.getCharts = function () {
4788
5058
  return __awaiter(this, void 0, void 0, function () {
4789
- var allCharts, workSheets, workSheets_4, workSheets_4_1, element, sheetId, rid, features, sheet_data, charts, e_48_1;
4790
- var e_48, _a;
5059
+ var allCharts, workSheets, workSheets_4, workSheets_4_1, element, sheetId, rid, features, sheet_data, charts, e_49_1;
5060
+ var e_49, _a;
4791
5061
  return __generator(this, function (_b) {
4792
5062
  switch (_b.label) {
4793
5063
  case 0:
@@ -4820,14 +5090,14 @@ var XlsxPlugin = /** @class */ (function (_super) {
4820
5090
  return [3 /*break*/, 2];
4821
5091
  case 6: return [3 /*break*/, 9];
4822
5092
  case 7:
4823
- e_48_1 = _b.sent();
4824
- e_48 = { error: e_48_1 };
5093
+ e_49_1 = _b.sent();
5094
+ e_49 = { error: e_49_1 };
4825
5095
  return [3 /*break*/, 9];
4826
5096
  case 8:
4827
5097
  try {
4828
5098
  if (workSheets_4_1 && !workSheets_4_1.done && (_a = workSheets_4.return)) _a.call(workSheets_4);
4829
5099
  }
4830
- finally { if (e_48) throw e_48.error; }
5100
+ finally { if (e_49) throw e_49.error; }
4831
5101
  return [7 /*endfinally*/];
4832
5102
  case 9: return [2 /*return*/, allCharts];
4833
5103
  }
@@ -4842,8 +5112,8 @@ var XlsxPlugin = /** @class */ (function (_super) {
4842
5112
  */
4843
5113
  XlsxPlugin.prototype.getPivotTables = function () {
4844
5114
  return __awaiter(this, void 0, void 0, function () {
4845
- var parsePivotTablesForSheet, all, workSheets, sheetNameToId, workSheets_5, workSheets_5_1, ws, name_9, id, pivotIdCounter, nextPivotId, workSheets_6, workSheets_6_1, element, sheetId, rid, target, path, sheetRelPath, sheetRelContent, _a, sheetRels, relList, relArray, pivotRels, pivots, e_49_1;
4846
- var e_50, _b, e_49, _c;
5115
+ var parsePivotTablesForSheet, all, workSheets, sheetNameToId, workSheets_5, workSheets_5_1, ws, name_9, id, pivotIdCounter, nextPivotId, workSheets_6, workSheets_6_1, element, sheetId, rid, target, path, sheetRelPath, sheetRelContent, _a, sheetRels, relList, relArray, pivotRels, pivots, e_50_1;
5116
+ var e_51, _b, e_50, _c;
4847
5117
  var _d, _e, _f;
4848
5118
  return __generator(this, function (_g) {
4849
5119
  switch (_g.label) {
@@ -4862,12 +5132,12 @@ var XlsxPlugin = /** @class */ (function (_super) {
4862
5132
  sheetNameToId.set(name_9, id);
4863
5133
  }
4864
5134
  }
4865
- catch (e_50_1) { e_50 = { error: e_50_1 }; }
5135
+ catch (e_51_1) { e_51 = { error: e_51_1 }; }
4866
5136
  finally {
4867
5137
  try {
4868
5138
  if (workSheets_5_1 && !workSheets_5_1.done && (_b = workSheets_5.return)) _b.call(workSheets_5);
4869
5139
  }
4870
- finally { if (e_50) throw e_50.error; }
5140
+ finally { if (e_51) throw e_51.error; }
4871
5141
  }
4872
5142
  pivotIdCounter = 1;
4873
5143
  nextPivotId = function () { return "imported-pivot-".concat(pivotIdCounter++); };
@@ -4936,14 +5206,14 @@ var XlsxPlugin = /** @class */ (function (_super) {
4936
5206
  return [3 /*break*/, 3];
4937
5207
  case 10: return [3 /*break*/, 13];
4938
5208
  case 11:
4939
- e_49_1 = _g.sent();
4940
- e_49 = { error: e_49_1 };
5209
+ e_50_1 = _g.sent();
5210
+ e_50 = { error: e_50_1 };
4941
5211
  return [3 /*break*/, 13];
4942
5212
  case 12:
4943
5213
  try {
4944
5214
  if (workSheets_6_1 && !workSheets_6_1.done && (_c = workSheets_6.return)) _c.call(workSheets_6);
4945
5215
  }
4946
- finally { if (e_49) throw e_49.error; }
5216
+ finally { if (e_50) throw e_50.error; }
4947
5217
  return [7 /*endfinally*/];
4948
5218
  case 13: return [2 /*return*/, all];
4949
5219
  }
@@ -4960,8 +5230,8 @@ var XlsxPlugin = /** @class */ (function (_super) {
4960
5230
  */
4961
5231
  XlsxPlugin.prototype.getPowerQuery = function () {
4962
5232
  return __awaiter(this, void 0, void 0, function () {
4963
- var customXmlParts, connectionsXml, _a, _b, rel, type, itemPath, itemXml, propsXml, itemRelsPath, itemRels, _c, _d, relList, relArray, propsRel, propsPath, path, e_51_1, queryTables, _e, _f, element, rid, target, sheetPath, sheetRelsPath, sheetRels, _g, _h, relList, relArray, relArray_1, relArray_1_1, r, relType, tablePath, tableRelsPath, tableRels, _j, _k, tableRelList, tableRelArray, qtRel, qtPath, partXml, tableData, _l, _m, tableDefinition, attrs, tableTitle, colDefs, colArray, columns, e_52_1, e_53_1, parts;
4964
- var e_51, _o, e_53, _p, e_52, _q;
5233
+ var customXmlParts, connectionsXml, _a, _b, rel, type, itemPath, itemXml, propsXml, itemRelsPath, itemRels, _c, _d, relList, relArray, propsRel, propsPath, path, e_52_1, queryTables, _e, _f, element, rid, target, sheetPath, sheetRelsPath, sheetRels, _g, _h, relList, relArray, relArray_1, relArray_1_1, r, relType, tablePath, tableRelsPath, tableRels, _j, _k, tableRelList, tableRelArray, qtRel, qtPath, partXml, tableData, _l, _m, tableDefinition, attrs, tableTitle, colDefs, colArray, columns, e_53_1, e_54_1, parts;
5234
+ var e_52, _o, e_54, _p, e_53, _q;
4965
5235
  var _r, _s, _t, _u, _v, _w;
4966
5236
  return __generator(this, function (_x) {
4967
5237
  switch (_x.label) {
@@ -5023,14 +5293,14 @@ var XlsxPlugin = /** @class */ (function (_super) {
5023
5293
  return [3 /*break*/, 2];
5024
5294
  case 10: return [3 /*break*/, 13];
5025
5295
  case 11:
5026
- e_51_1 = _x.sent();
5027
- e_51 = { error: e_51_1 };
5296
+ e_52_1 = _x.sent();
5297
+ e_52 = { error: e_52_1 };
5028
5298
  return [3 /*break*/, 13];
5029
5299
  case 12:
5030
5300
  try {
5031
5301
  if (_b && !_b.done && (_o = _a.return)) _o.call(_a);
5032
5302
  }
5033
- finally { if (e_51) throw e_51.error; }
5303
+ finally { if (e_52) throw e_52.error; }
5034
5304
  return [7 /*endfinally*/];
5035
5305
  case 13:
5036
5306
  queryTables = [];
@@ -5059,7 +5329,7 @@ var XlsxPlugin = /** @class */ (function (_super) {
5059
5329
  _x.label = 17;
5060
5330
  case 17:
5061
5331
  _x.trys.push([17, 24, 25, 26]);
5062
- relArray_1 = (e_52 = void 0, __values(relArray)), relArray_1_1 = relArray_1.next();
5332
+ relArray_1 = (e_53 = void 0, __values(relArray)), relArray_1_1 = relArray_1.next();
5063
5333
  _x.label = 18;
5064
5334
  case 18:
5065
5335
  if (!!relArray_1_1.done) return [3 /*break*/, 23];
@@ -5121,28 +5391,28 @@ var XlsxPlugin = /** @class */ (function (_super) {
5121
5391
  return [3 /*break*/, 18];
5122
5392
  case 23: return [3 /*break*/, 26];
5123
5393
  case 24:
5124
- e_52_1 = _x.sent();
5125
- e_52 = { error: e_52_1 };
5394
+ e_53_1 = _x.sent();
5395
+ e_53 = { error: e_53_1 };
5126
5396
  return [3 /*break*/, 26];
5127
5397
  case 25:
5128
5398
  try {
5129
5399
  if (relArray_1_1 && !relArray_1_1.done && (_q = relArray_1.return)) _q.call(relArray_1);
5130
5400
  }
5131
- finally { if (e_52) throw e_52.error; }
5401
+ finally { if (e_53) throw e_53.error; }
5132
5402
  return [7 /*endfinally*/];
5133
5403
  case 26:
5134
5404
  _f = _e.next();
5135
5405
  return [3 /*break*/, 15];
5136
5406
  case 27: return [3 /*break*/, 30];
5137
5407
  case 28:
5138
- e_53_1 = _x.sent();
5139
- e_53 = { error: e_53_1 };
5408
+ e_54_1 = _x.sent();
5409
+ e_54 = { error: e_54_1 };
5140
5410
  return [3 /*break*/, 30];
5141
5411
  case 29:
5142
5412
  try {
5143
5413
  if (_f && !_f.done && (_p = _e.return)) _p.call(_e);
5144
5414
  }
5145
- finally { if (e_53) throw e_53.error; }
5415
+ finally { if (e_54) throw e_54.error; }
5146
5416
  return [7 /*endfinally*/];
5147
5417
  case 30:
5148
5418
  parts = {};
@@ -5159,8 +5429,8 @@ var XlsxPlugin = /** @class */ (function (_super) {
5159
5429
  };
5160
5430
  XlsxPlugin.prototype.getConditionalFormatting = function () {
5161
5431
  return __awaiter(this, void 0, void 0, function () {
5162
- var conditionalFormatting, _a, _b, element, _c, _d, _e, _f, e_54_1;
5163
- var e_54, _g;
5432
+ var conditionalFormatting, _a, _b, element, _c, _d, _e, _f, e_55_1;
5433
+ var e_55, _g;
5164
5434
  return __generator(this, function (_h) {
5165
5435
  switch (_h.label) {
5166
5436
  case 0:
@@ -5185,14 +5455,14 @@ var XlsxPlugin = /** @class */ (function (_super) {
5185
5455
  return [3 /*break*/, 2];
5186
5456
  case 5: return [3 /*break*/, 8];
5187
5457
  case 6:
5188
- e_54_1 = _h.sent();
5189
- e_54 = { error: e_54_1 };
5458
+ e_55_1 = _h.sent();
5459
+ e_55 = { error: e_55_1 };
5190
5460
  return [3 /*break*/, 8];
5191
5461
  case 7:
5192
5462
  try {
5193
5463
  if (_b && !_b.done && (_g = _a.return)) _g.call(_a);
5194
5464
  }
5195
- finally { if (e_54) throw e_54.error; }
5465
+ finally { if (e_55) throw e_55.error; }
5196
5466
  return [7 /*endfinally*/];
5197
5467
  case 8: return [2 /*return*/, conditionalFormatting];
5198
5468
  }
@@ -5232,8 +5502,8 @@ var XlsxPlugin = /** @class */ (function (_super) {
5232
5502
  };
5233
5503
  XlsxPlugin.prototype.getDataValidations = function () {
5234
5504
  return __awaiter(this, void 0, void 0, function () {
5235
- var dataValidations, _a, _b, element, _c, _d, _e, _f, e_55_1;
5236
- var e_55, _g;
5505
+ var dataValidations, _a, _b, element, _c, _d, _e, _f, e_56_1;
5506
+ var e_56, _g;
5237
5507
  return __generator(this, function (_h) {
5238
5508
  switch (_h.label) {
5239
5509
  case 0:
@@ -5258,14 +5528,14 @@ var XlsxPlugin = /** @class */ (function (_super) {
5258
5528
  return [3 /*break*/, 2];
5259
5529
  case 5: return [3 /*break*/, 8];
5260
5530
  case 6:
5261
- e_55_1 = _h.sent();
5262
- e_55 = { error: e_55_1 };
5531
+ e_56_1 = _h.sent();
5532
+ e_56 = { error: e_56_1 };
5263
5533
  return [3 /*break*/, 8];
5264
5534
  case 7:
5265
5535
  try {
5266
5536
  if (_b && !_b.done && (_g = _a.return)) _g.call(_a);
5267
5537
  }
5268
- finally { if (e_55) throw e_55.error; }
5538
+ finally { if (e_56) throw e_56.error; }
5269
5539
  return [7 /*endfinally*/];
5270
5540
  case 8: return [2 /*return*/, dataValidations];
5271
5541
  }
@@ -5305,6 +5575,19 @@ var XlsxPlugin = /** @class */ (function (_super) {
5305
5575
  });
5306
5576
  });
5307
5577
  };
5578
+ /**
5579
+ * Allow-edit ranges (`<protectedRanges>/<protectedRange>`) in the model the
5580
+ * `protect-range` command writes: `protectedRangeId` = the source `name`,
5581
+ * `range` = the first `sqref` area plus `sheetId`. Available after
5582
+ * `getSheets()`; sheet-level `<sheetProtection>` rides `Sheet.sheetProtection`.
5583
+ */
5584
+ XlsxPlugin.prototype.getProtectedRanges = function (sheetId) {
5585
+ var _a;
5586
+ if (sheetId !== undefined) {
5587
+ return (_a = this.protectedRangesBySheet.get(sheetId)) !== null && _a !== void 0 ? _a : [];
5588
+ }
5589
+ return Array.from(this.protectedRangesBySheet.values()).flat();
5590
+ };
5308
5591
  XlsxPlugin.prototype.getNamedRanges = function () {
5309
5592
  return this.namedRanges;
5310
5593
  };
@@ -5317,7 +5600,7 @@ var XlsxPlugin = /** @class */ (function (_super) {
5317
5600
  XlsxPlugin.prototype.getProperties = function () {
5318
5601
  return __awaiter(this, void 0, void 0, function () {
5319
5602
  var props, tryRead, coreXml, parsed, root, textOf_1, appXml, parsed, root, textOf, _a, _b, key;
5320
- var e_56, _c;
5603
+ var e_57, _c;
5321
5604
  var _this = this;
5322
5605
  var _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q;
5323
5606
  return __generator(this, function (_r) {
@@ -5401,12 +5684,12 @@ var XlsxPlugin = /** @class */ (function (_super) {
5401
5684
  }
5402
5685
  }
5403
5686
  }
5404
- catch (e_56_1) { e_56 = { error: e_56_1 }; }
5687
+ catch (e_57_1) { e_57 = { error: e_57_1 }; }
5405
5688
  finally {
5406
5689
  try {
5407
5690
  if (_b && !_b.done && (_c = _a.return)) _c.call(_a);
5408
5691
  }
5409
- finally { if (e_56) throw e_56.error; }
5692
+ finally { if (e_57) throw e_57.error; }
5410
5693
  }
5411
5694
  return [2 /*return*/, Object.keys(props).length ? props : undefined];
5412
5695
  }
@@ -5422,8 +5705,8 @@ var XlsxPlugin = /** @class */ (function (_super) {
5422
5705
  };
5423
5706
  XlsxPlugin.prototype.getSlicersForWorkbook = function () {
5424
5707
  return __awaiter(this, void 0, void 0, function () {
5425
- var slicers, workbookRelsPath, workbookRelsContent, workbookRels, relationships, relationshipsArray, slicerRels, slicerCacheRels, toArray_1, slicerPathToSheetIds_2, addSlicerPath, slicerRels_1, slicerRels_1_1, slicerRel, target, workSheets, sheetRelContext, workSheets_7, workSheets_7_1, sheet, rid, currentSheetId, relation, sheetPath, sheetRelPath, sheetRelContent, sheetRels, sheetRelations, sheetRelationsArray, drawingRel, drawingPath, sheetSlicerRels, sheetSlicerRels_1, sheetSlicerRels_1_1, rel, target, _a, e_57_1, slicerCacheMap, slicerCacheRels_1, slicerCacheRels_1_1, cacheRel, cachePath, cacheContent, cacheXml, cacheDefinition, cacheName, title, extList, extArray, extArray_2, extArray_2_1, ext, tableSlicerCache, tableIdRaw, tableId, columnIndex, err_6, e_58_1, slicerPathToSheetIds_1, slicerPathToSheetIds_1_1, _b, slicerPath, linkedSheetIds, slicerContent, slicerXml, slicerDefinitionNode, slicerDefinition, slicerAttrs, cacheName, caption, cacheInfo, position, sheetId, workSheets_8, workSheets_8_1, sheet, currentSheetId, context, drawingContent, drawingXml, wsDr, anchors, firstSlicerAnchor, anchors_2, anchors_2_1, anchor, alternateContent, choices, graphicFrames, graphicFrames_1, graphicFrames_1_1, graphicFrame, graphicData, uri, isSlicerGraphic, nvGraphicFramePr, cNvPr, shapeName, e_59_1, slicer, err_7, e_60_1, err_8;
5426
- var e_61, _c, e_57, _d, e_62, _e, e_58, _f, e_63, _g, e_60, _h, e_59, _j, e_64, _k, e_65, _l;
5708
+ var slicers, workbookRelsPath, workbookRelsContent, workbookRels, relationships, relationshipsArray, slicerRels, slicerCacheRels, toArray_1, slicerPathToSheetIds_2, addSlicerPath, slicerRels_1, slicerRels_1_1, slicerRel, target, workSheets, sheetRelContext, workSheets_7, workSheets_7_1, sheet, rid, currentSheetId, relation, sheetPath, sheetRelPath, sheetRelContent, sheetRels, sheetRelations, sheetRelationsArray, drawingRel, drawingPath, sheetSlicerRels, sheetSlicerRels_1, sheetSlicerRels_1_1, rel, target, _a, e_58_1, slicerCacheMap, slicerCacheRels_1, slicerCacheRels_1_1, cacheRel, cachePath, cacheContent, cacheXml, cacheDefinition, cacheName, title, extList, extArray, extArray_2, extArray_2_1, ext, tableSlicerCache, tableIdRaw, tableId, columnIndex, err_6, e_59_1, slicerPathToSheetIds_1, slicerPathToSheetIds_1_1, _b, slicerPath, linkedSheetIds, slicerContent, slicerXml, slicerDefinitionNode, slicerDefinition, slicerAttrs, cacheName, caption, cacheInfo, position, sheetId, workSheets_8, workSheets_8_1, sheet, currentSheetId, context, drawingContent, drawingXml, wsDr, anchors, firstSlicerAnchor, anchors_2, anchors_2_1, anchor, alternateContent, choices, graphicFrames, graphicFrames_1, graphicFrames_1_1, graphicFrame, graphicData, uri, isSlicerGraphic, nvGraphicFramePr, cNvPr, shapeName, e_60_1, slicer, err_7, e_61_1, err_8;
5709
+ var e_62, _c, e_58, _d, e_63, _e, e_59, _f, e_64, _g, e_61, _h, e_60, _j, e_65, _k, e_66, _l;
5427
5710
  var _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z;
5428
5711
  return __generator(this, function (_0) {
5429
5712
  switch (_0.label) {
@@ -5472,12 +5755,12 @@ var XlsxPlugin = /** @class */ (function (_super) {
5472
5755
  addSlicerPath(this.resolveSheetPath(target));
5473
5756
  }
5474
5757
  }
5475
- catch (e_61_1) { e_61 = { error: e_61_1 }; }
5758
+ catch (e_62_1) { e_62 = { error: e_62_1 }; }
5476
5759
  finally {
5477
5760
  try {
5478
5761
  if (slicerRels_1_1 && !slicerRels_1_1.done && (_c = slicerRels_1.return)) _c.call(slicerRels_1);
5479
5762
  }
5480
- finally { if (e_61) throw e_61.error; }
5763
+ finally { if (e_62) throw e_62.error; }
5481
5764
  }
5482
5765
  workSheets = this._getSheets();
5483
5766
  sheetRelContext = new Map();
@@ -5524,7 +5807,7 @@ var XlsxPlugin = /** @class */ (function (_super) {
5524
5807
  "http://schemas.microsoft.com/office/2007/relationships/slicer";
5525
5808
  });
5526
5809
  try {
5527
- for (sheetSlicerRels_1 = (e_62 = void 0, __values(sheetSlicerRels)), sheetSlicerRels_1_1 = sheetSlicerRels_1.next(); !sheetSlicerRels_1_1.done; sheetSlicerRels_1_1 = sheetSlicerRels_1.next()) {
5810
+ for (sheetSlicerRels_1 = (e_63 = void 0, __values(sheetSlicerRels)), sheetSlicerRels_1_1 = sheetSlicerRels_1.next(); !sheetSlicerRels_1_1.done; sheetSlicerRels_1_1 = sheetSlicerRels_1.next()) {
5528
5811
  rel = sheetSlicerRels_1_1.value;
5529
5812
  target = (_r = rel === null || rel === void 0 ? void 0 : rel.a$) === null || _r === void 0 ? void 0 : _r.Target;
5530
5813
  if (!target)
@@ -5532,12 +5815,12 @@ var XlsxPlugin = /** @class */ (function (_super) {
5532
5815
  addSlicerPath(this.resolveRelationshipTarget(sheetRelPath, target), currentSheetId);
5533
5816
  }
5534
5817
  }
5535
- catch (e_62_1) { e_62 = { error: e_62_1 }; }
5818
+ catch (e_63_1) { e_63 = { error: e_63_1 }; }
5536
5819
  finally {
5537
5820
  try {
5538
5821
  if (sheetSlicerRels_1_1 && !sheetSlicerRels_1_1.done && (_e = sheetSlicerRels_1.return)) _e.call(sheetSlicerRels_1);
5539
5822
  }
5540
- finally { if (e_62) throw e_62.error; }
5823
+ finally { if (e_63) throw e_63.error; }
5541
5824
  }
5542
5825
  return [3 /*break*/, 8];
5543
5826
  case 7:
@@ -5549,14 +5832,14 @@ var XlsxPlugin = /** @class */ (function (_super) {
5549
5832
  return [3 /*break*/, 4];
5550
5833
  case 9: return [3 /*break*/, 12];
5551
5834
  case 10:
5552
- e_57_1 = _0.sent();
5553
- e_57 = { error: e_57_1 };
5835
+ e_58_1 = _0.sent();
5836
+ e_58 = { error: e_58_1 };
5554
5837
  return [3 /*break*/, 12];
5555
5838
  case 11:
5556
5839
  try {
5557
5840
  if (workSheets_7_1 && !workSheets_7_1.done && (_d = workSheets_7.return)) _d.call(workSheets_7);
5558
5841
  }
5559
- finally { if (e_57) throw e_57.error; }
5842
+ finally { if (e_58) throw e_58.error; }
5560
5843
  return [7 /*endfinally*/];
5561
5844
  case 12:
5562
5845
  if (slicerPathToSheetIds_2.size === 0) {
@@ -5602,7 +5885,7 @@ var XlsxPlugin = /** @class */ (function (_super) {
5602
5885
  ]);
5603
5886
  extArray = toArray_1(extList);
5604
5887
  try {
5605
- for (extArray_2 = (e_63 = void 0, __values(extArray)), extArray_2_1 = extArray_2.next(); !extArray_2_1.done; extArray_2_1 = extArray_2.next()) {
5888
+ for (extArray_2 = (e_64 = void 0, __values(extArray)), extArray_2_1 = extArray_2.next(); !extArray_2_1.done; extArray_2_1 = extArray_2.next()) {
5606
5889
  ext = extArray_2_1.value;
5607
5890
  tableSlicerCache = getWithFallback(ext, [
5608
5891
  "x15:tableSlicerCache",
@@ -5620,12 +5903,12 @@ var XlsxPlugin = /** @class */ (function (_super) {
5620
5903
  }
5621
5904
  }
5622
5905
  }
5623
- catch (e_63_1) { e_63 = { error: e_63_1 }; }
5906
+ catch (e_64_1) { e_64 = { error: e_64_1 }; }
5624
5907
  finally {
5625
5908
  try {
5626
5909
  if (extArray_2_1 && !extArray_2_1.done && (_g = extArray_2.return)) _g.call(extArray_2);
5627
5910
  }
5628
- finally { if (e_63) throw e_63.error; }
5911
+ finally { if (e_64) throw e_64.error; }
5629
5912
  }
5630
5913
  return [3 /*break*/, 18];
5631
5914
  case 17:
@@ -5637,14 +5920,14 @@ var XlsxPlugin = /** @class */ (function (_super) {
5637
5920
  return [3 /*break*/, 14];
5638
5921
  case 19: return [3 /*break*/, 22];
5639
5922
  case 20:
5640
- e_58_1 = _0.sent();
5641
- e_58 = { error: e_58_1 };
5923
+ e_59_1 = _0.sent();
5924
+ e_59 = { error: e_59_1 };
5642
5925
  return [3 /*break*/, 22];
5643
5926
  case 21:
5644
5927
  try {
5645
5928
  if (slicerCacheRels_1_1 && !slicerCacheRels_1_1.done && (_f = slicerCacheRels_1.return)) _f.call(slicerCacheRels_1);
5646
5929
  }
5647
- finally { if (e_58) throw e_58.error; }
5930
+ finally { if (e_59) throw e_59.error; }
5648
5931
  return [7 /*endfinally*/];
5649
5932
  case 22:
5650
5933
  _0.trys.push([22, 38, 39, 40]);
@@ -5687,7 +5970,7 @@ var XlsxPlugin = /** @class */ (function (_super) {
5687
5970
  _0.label = 26;
5688
5971
  case 26:
5689
5972
  _0.trys.push([26, 32, 33, 34]);
5690
- workSheets_8 = (e_59 = void 0, __values(workSheets)), workSheets_8_1 = workSheets_8.next();
5973
+ workSheets_8 = (e_60 = void 0, __values(workSheets)), workSheets_8_1 = workSheets_8.next();
5691
5974
  _0.label = 27;
5692
5975
  case 27:
5693
5976
  if (!!workSheets_8_1.done) return [3 /*break*/, 31];
@@ -5713,7 +5996,7 @@ var XlsxPlugin = /** @class */ (function (_super) {
5713
5996
  anchors = __spreadArray(__spreadArray([], __read(toArray_1(wsDr["xdr:oneCellAnchor"] || wsDr["oneCellAnchor"])), false), __read(toArray_1(wsDr["xdr:twoCellAnchor"] || wsDr["twoCellAnchor"])), false);
5714
5997
  firstSlicerAnchor = null;
5715
5998
  try {
5716
- for (anchors_2 = (e_64 = void 0, __values(anchors)), anchors_2_1 = anchors_2.next(); !anchors_2_1.done; anchors_2_1 = anchors_2.next()) {
5999
+ for (anchors_2 = (e_65 = void 0, __values(anchors)), anchors_2_1 = anchors_2.next(); !anchors_2_1.done; anchors_2_1 = anchors_2.next()) {
5717
6000
  anchor = anchors_2_1.value;
5718
6001
  alternateContent = getWithFallback(anchor, [
5719
6002
  "mc:AlternateContent",
@@ -5730,7 +6013,7 @@ var XlsxPlugin = /** @class */ (function (_super) {
5730
6013
  ]));
5731
6014
  })), false);
5732
6015
  try {
5733
- for (graphicFrames_1 = (e_65 = void 0, __values(graphicFrames)), graphicFrames_1_1 = graphicFrames_1.next(); !graphicFrames_1_1.done; graphicFrames_1_1 = graphicFrames_1.next()) {
6016
+ for (graphicFrames_1 = (e_66 = void 0, __values(graphicFrames)), graphicFrames_1_1 = graphicFrames_1.next(); !graphicFrames_1_1.done; graphicFrames_1_1 = graphicFrames_1.next()) {
5734
6017
  graphicFrame = graphicFrames_1_1.value;
5735
6018
  graphicData = getWithFallback(graphicFrame, [
5736
6019
  "a:graphic.a:graphicData",
@@ -5763,23 +6046,23 @@ var XlsxPlugin = /** @class */ (function (_super) {
5763
6046
  }
5764
6047
  }
5765
6048
  }
5766
- catch (e_65_1) { e_65 = { error: e_65_1 }; }
6049
+ catch (e_66_1) { e_66 = { error: e_66_1 }; }
5767
6050
  finally {
5768
6051
  try {
5769
6052
  if (graphicFrames_1_1 && !graphicFrames_1_1.done && (_l = graphicFrames_1.return)) _l.call(graphicFrames_1);
5770
6053
  }
5771
- finally { if (e_65) throw e_65.error; }
6054
+ finally { if (e_66) throw e_66.error; }
5772
6055
  }
5773
6056
  if (position)
5774
6057
  break;
5775
6058
  }
5776
6059
  }
5777
- catch (e_64_1) { e_64 = { error: e_64_1 }; }
6060
+ catch (e_65_1) { e_65 = { error: e_65_1 }; }
5778
6061
  finally {
5779
6062
  try {
5780
6063
  if (anchors_2_1 && !anchors_2_1.done && (_k = anchors_2.return)) _k.call(anchors_2);
5781
6064
  }
5782
- finally { if (e_64) throw e_64.error; }
6065
+ finally { if (e_65) throw e_65.error; }
5783
6066
  }
5784
6067
  if (!position && firstSlicerAnchor) {
5785
6068
  position = this.extractSlicerPosition(firstSlicerAnchor, currentSheetId);
@@ -5793,14 +6076,14 @@ var XlsxPlugin = /** @class */ (function (_super) {
5793
6076
  return [3 /*break*/, 27];
5794
6077
  case 31: return [3 /*break*/, 34];
5795
6078
  case 32:
5796
- e_59_1 = _0.sent();
5797
- e_59 = { error: e_59_1 };
6079
+ e_60_1 = _0.sent();
6080
+ e_60 = { error: e_60_1 };
5798
6081
  return [3 /*break*/, 34];
5799
6082
  case 33:
5800
6083
  try {
5801
6084
  if (workSheets_8_1 && !workSheets_8_1.done && (_j = workSheets_8.return)) _j.call(workSheets_8);
5802
6085
  }
5803
- finally { if (e_59) throw e_59.error; }
6086
+ finally { if (e_60) throw e_60.error; }
5804
6087
  return [7 /*endfinally*/];
5805
6088
  case 34:
5806
6089
  // Create default position if we couldn't find one
@@ -5842,14 +6125,14 @@ var XlsxPlugin = /** @class */ (function (_super) {
5842
6125
  return [3 /*break*/, 23];
5843
6126
  case 37: return [3 /*break*/, 40];
5844
6127
  case 38:
5845
- e_60_1 = _0.sent();
5846
- e_60 = { error: e_60_1 };
6128
+ e_61_1 = _0.sent();
6129
+ e_61 = { error: e_61_1 };
5847
6130
  return [3 /*break*/, 40];
5848
6131
  case 39:
5849
6132
  try {
5850
6133
  if (slicerPathToSheetIds_1_1 && !slicerPathToSheetIds_1_1.done && (_h = slicerPathToSheetIds_1.return)) _h.call(slicerPathToSheetIds_1);
5851
6134
  }
5852
- finally { if (e_60) throw e_60.error; }
6135
+ finally { if (e_61) throw e_61.error; }
5853
6136
  return [7 /*endfinally*/];
5854
6137
  case 40: return [3 /*break*/, 42];
5855
6138
  case 41:
@@ -6054,3 +6337,200 @@ var XlsxPlugin = /** @class */ (function (_super) {
6054
6337
  return XlsxPlugin;
6055
6338
  }(BaseWorkbookPlugin));
6056
6339
  export { XlsxPlugin };
6340
+ /** `CT_SheetProtection` boolean attributes, in OOXML order (camelCase = model key). */
6341
+ var SHEET_PROTECTION_FLAGS = [
6342
+ "sheet",
6343
+ "objects",
6344
+ "scenarios",
6345
+ "formatCells",
6346
+ "formatColumns",
6347
+ "formatRows",
6348
+ "insertColumns",
6349
+ "insertRows",
6350
+ "insertHyperlinks",
6351
+ "deleteColumns",
6352
+ "deleteRows",
6353
+ "selectLockedCells",
6354
+ "sort",
6355
+ "autoFilter",
6356
+ "pivotTables",
6357
+ "selectUnlockedCells",
6358
+ ];
6359
+ /**
6360
+ * `<sheetProtection …>` attributes → `Sheet.sheetProtection`. Only attributes
6361
+ * present in the source are set (`"1"|"true"` → true, anything else → false),
6362
+ * so an explicit flag round-trips without inventing schema defaults; the
6363
+ * password hash (legacy `password` or the agile quartet) rides along verbatim.
6364
+ * Mirrors `rnc-import`'s `read_sheet_protection`.
6365
+ */
6366
+ var readSheetProtectionAttrs = function (attrs) {
6367
+ var e_67, _a;
6368
+ var protection = {};
6369
+ try {
6370
+ for (var SHEET_PROTECTION_FLAGS_1 = __values(SHEET_PROTECTION_FLAGS), SHEET_PROTECTION_FLAGS_1_1 = SHEET_PROTECTION_FLAGS_1.next(); !SHEET_PROTECTION_FLAGS_1_1.done; SHEET_PROTECTION_FLAGS_1_1 = SHEET_PROTECTION_FLAGS_1.next()) {
6371
+ var flag = SHEET_PROTECTION_FLAGS_1_1.value;
6372
+ var value = attrs[flag];
6373
+ if (value !== undefined) {
6374
+ protection[flag] = value === "1" || value === "true";
6375
+ }
6376
+ }
6377
+ }
6378
+ catch (e_67_1) { e_67 = { error: e_67_1 }; }
6379
+ finally {
6380
+ try {
6381
+ if (SHEET_PROTECTION_FLAGS_1_1 && !SHEET_PROTECTION_FLAGS_1_1.done && (_a = SHEET_PROTECTION_FLAGS_1.return)) _a.call(SHEET_PROTECTION_FLAGS_1);
6382
+ }
6383
+ finally { if (e_67) throw e_67.error; }
6384
+ }
6385
+ if (attrs.password)
6386
+ protection.password = attrs.password;
6387
+ if (attrs.algorithmName)
6388
+ protection.algorithmName = attrs.algorithmName;
6389
+ if (attrs.hashValue)
6390
+ protection.hashValue = attrs.hashValue;
6391
+ if (attrs.saltValue)
6392
+ protection.saltValue = attrs.saltValue;
6393
+ if (attrs.spinCount !== undefined) {
6394
+ var spinCount = parseInt(attrs.spinCount, 10);
6395
+ if (Number.isFinite(spinCount))
6396
+ protection.spinCount = spinCount;
6397
+ }
6398
+ return protection;
6399
+ };
6400
+ /**
6401
+ * `<protectedRange sqref name>` entries → `ProtectedRange[]` for one sheet. The
6402
+ * `name` becomes the `protectedRangeId` so it keys the stored facet and
6403
+ * re-exports under the same name; only the first `sqref` area is modeled
6404
+ * (Excel writes one per element in practice).
6405
+ */
6406
+ var protectedRangesFromEntries = function (sheetId, entries) {
6407
+ var e_68, _a;
6408
+ var ranges = [];
6409
+ try {
6410
+ for (var entries_1 = __values(entries), entries_1_1 = entries_1.next(); !entries_1_1.done; entries_1_1 = entries_1.next()) {
6411
+ var entry = entries_1_1.value;
6412
+ var first = entry.sqref.trim().split(/\s+/)[0];
6413
+ var range = first ? getRangeFromAddressRef(first) : undefined;
6414
+ if (!range)
6415
+ continue;
6416
+ var protectedRange = {
6417
+ range: __assign({ sheetId: sheetId }, range),
6418
+ };
6419
+ if (entry.name)
6420
+ protectedRange.protectedRangeId = entry.name;
6421
+ if (entry.securityDescriptor) {
6422
+ protectedRange.securityDescriptor = entry.securityDescriptor;
6423
+ }
6424
+ ranges.push(protectedRange);
6425
+ }
6426
+ }
6427
+ catch (e_68_1) { e_68 = { error: e_68_1 }; }
6428
+ finally {
6429
+ try {
6430
+ if (entries_1_1 && !entries_1_1.done && (_a = entries_1.return)) _a.call(entries_1);
6431
+ }
6432
+ finally { if (e_68) throw e_68.error; }
6433
+ }
6434
+ return ranges;
6435
+ };
6436
+ var isXmlTrue = function (value) {
6437
+ return value === "1" || value === "true";
6438
+ };
6439
+ /** `"1"|"true"|"0"|"false"` → boolean; absent stays undefined. */
6440
+ var xmlBoolOpt = function (value) {
6441
+ return value === undefined ? undefined : isXmlTrue(value);
6442
+ };
6443
+ var xmlIntOpt = function (value) {
6444
+ if (value === undefined)
6445
+ return undefined;
6446
+ var n = parseInt(value, 10);
6447
+ return Number.isFinite(n) ? n : undefined;
6448
+ };
6449
+ var xmlFloatOpt = function (value) {
6450
+ if (value === undefined)
6451
+ return undefined;
6452
+ var n = parseFloat(value);
6453
+ return Number.isFinite(n) ? n : undefined;
6454
+ };
6455
+ var stripUndefined = function (value) {
6456
+ var e_69, _a;
6457
+ try {
6458
+ for (var _b = __values(Object.keys(value)), _c = _b.next(); !_c.done; _c = _b.next()) {
6459
+ var key = _c.value;
6460
+ if (value[key] === undefined)
6461
+ delete value[key];
6462
+ }
6463
+ }
6464
+ catch (e_69_1) { e_69 = { error: e_69_1 }; }
6465
+ finally {
6466
+ try {
6467
+ if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
6468
+ }
6469
+ finally { if (e_69) throw e_69.error; }
6470
+ }
6471
+ return value;
6472
+ };
6473
+ /** `<headerFooter>` children whose text is a header/footer code string. */
6474
+ var HEADER_FOOTER_TEXT_ELEMENTS = [
6475
+ "oddHeader",
6476
+ "oddFooter",
6477
+ "evenHeader",
6478
+ "evenFooter",
6479
+ "firstHeader",
6480
+ "firstFooter",
6481
+ ];
6482
+ var isHeaderFooterTextKey = function (name) {
6483
+ return HEADER_FOOTER_TEXT_ELEMENTS.includes(name);
6484
+ };
6485
+ /**
6486
+ * `<pageSetup …>` → `PageSetup` (present attributes only; `fitToPage` is
6487
+ * filled from `<sheetPr><pageSetUpPr>` by the caller). Mirrors
6488
+ * `rnc-import`'s `read_page_setup`.
6489
+ */
6490
+ var readPageSetupAttrs = function (attrs) {
6491
+ var orientation = attrs.orientation;
6492
+ var pageOrder = attrs.pageOrder;
6493
+ return stripUndefined({
6494
+ orientation: orientation === "landscape" || orientation === "portrait"
6495
+ ? orientation
6496
+ : undefined,
6497
+ paperSize: xmlIntOpt(attrs.paperSize),
6498
+ scale: xmlIntOpt(attrs.scale),
6499
+ fitToWidth: xmlIntOpt(attrs.fitToWidth),
6500
+ fitToHeight: xmlIntOpt(attrs.fitToHeight),
6501
+ firstPageNumber: xmlIntOpt(attrs.firstPageNumber),
6502
+ useFirstPageNumber: xmlBoolOpt(attrs.useFirstPageNumber),
6503
+ pageOrder: pageOrder === "overThenDown" || pageOrder === "downThenOver"
6504
+ ? pageOrder
6505
+ : undefined,
6506
+ blackAndWhite: xmlBoolOpt(attrs.blackAndWhite),
6507
+ draft: xmlBoolOpt(attrs.draft),
6508
+ });
6509
+ };
6510
+ var readPageMarginsAttrs = function (attrs) {
6511
+ return stripUndefined({
6512
+ left: xmlFloatOpt(attrs.left),
6513
+ right: xmlFloatOpt(attrs.right),
6514
+ top: xmlFloatOpt(attrs.top),
6515
+ bottom: xmlFloatOpt(attrs.bottom),
6516
+ header: xmlFloatOpt(attrs.header),
6517
+ footer: xmlFloatOpt(attrs.footer),
6518
+ });
6519
+ };
6520
+ var readPrintOptionsAttrs = function (attrs) {
6521
+ return stripUndefined({
6522
+ gridLines: xmlBoolOpt(attrs.gridLines),
6523
+ headings: xmlBoolOpt(attrs.headings),
6524
+ horizontalCentered: xmlBoolOpt(attrs.horizontalCentered),
6525
+ verticalCentered: xmlBoolOpt(attrs.verticalCentered),
6526
+ });
6527
+ };
6528
+ /** `<headerFooter …>` attributes; the child texts stream in via `ontext`. */
6529
+ var readHeaderFooterAttrs = function (attrs) {
6530
+ return stripUndefined({
6531
+ differentOddEven: xmlBoolOpt(attrs.differentOddEven),
6532
+ differentFirst: xmlBoolOpt(attrs.differentFirst),
6533
+ scaleWithDoc: xmlBoolOpt(attrs.scaleWithDoc),
6534
+ alignWithMargins: xmlBoolOpt(attrs.alignWithMargins),
6535
+ });
6536
+ };