@rowsncolumns/toolkit 24.4.1 → 24.4.3

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 (131) 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 +10 -1
  8. package/dist/cjs/excel-parser/interface.d.ts.map +1 -1
  9. package/dist/cjs/excel-parser/plugins/ods/index.d.ts +19 -0
  10. package/dist/cjs/excel-parser/plugins/ods/index.d.ts.map +1 -1
  11. package/dist/cjs/excel-parser/plugins/ods/index.js +676 -304
  12. package/dist/cjs/excel-parser/plugins/ods/styles.d.ts +43 -1
  13. package/dist/cjs/excel-parser/plugins/ods/styles.d.ts.map +1 -1
  14. package/dist/cjs/excel-parser/plugins/ods/styles.js +343 -45
  15. package/dist/cjs/excel-parser/plugins/xls/index.d.ts +11 -3
  16. package/dist/cjs/excel-parser/plugins/xls/index.d.ts.map +1 -1
  17. package/dist/cjs/excel-parser/plugins/xls/index.js +55 -6
  18. package/dist/cjs/excel-parser/plugins/xlsb/index.d.ts +4 -0
  19. package/dist/cjs/excel-parser/plugins/xlsb/index.d.ts.map +1 -1
  20. package/dist/cjs/excel-parser/plugins/xlsb/index.js +21 -9
  21. package/dist/cjs/excel-parser/plugins/xlsx/charts.d.ts +10 -0
  22. package/dist/cjs/excel-parser/plugins/xlsx/charts.d.ts.map +1 -1
  23. package/dist/cjs/excel-parser/plugins/xlsx/charts.js +68 -9
  24. package/dist/cjs/excel-parser/plugins/xlsx/drawing.d.ts +28 -1
  25. package/dist/cjs/excel-parser/plugins/xlsx/drawing.d.ts.map +1 -1
  26. package/dist/cjs/excel-parser/plugins/xlsx/drawing.js +155 -20
  27. package/dist/cjs/excel-parser/plugins/xlsx/index.d.ts +26 -1
  28. package/dist/cjs/excel-parser/plugins/xlsx/index.d.ts.map +1 -1
  29. package/dist/cjs/excel-parser/plugins/xlsx/index.js +567 -234
  30. package/dist/cjs/excel-parser/plugins/xlsx/pivots.d.ts.map +1 -1
  31. package/dist/cjs/excel-parser/plugins/xlsx/pivots.js +125 -37
  32. package/dist/cjs/excel-parser/plugins/xlsx/sheet-views.d.ts +3 -0
  33. package/dist/cjs/excel-parser/plugins/xlsx/sheet-views.d.ts.map +1 -1
  34. package/dist/cjs/excel-parser/plugins/xlsx/sheet-views.js +4 -1
  35. package/dist/cjs/excel-parser/plugins/xlsx/styles.d.ts.map +1 -1
  36. package/dist/cjs/excel-parser/plugins/xlsx/styles.js +12 -2
  37. package/dist/cjs/excel-parser/registry.d.ts.map +1 -1
  38. package/dist/cjs/excel-parser/registry.js +2 -0
  39. package/dist/cjs/excel-parser/types.d.ts +7 -1
  40. package/dist/cjs/excel-parser/types.d.ts.map +1 -1
  41. package/dist/cjs/excel-parser/workbook.d.ts +1 -0
  42. package/dist/cjs/excel-parser/workbook.d.ts.map +1 -1
  43. package/dist/cjs/excel-parser/workbook.js +4 -0
  44. package/dist/cjs/excel-parser/worker.js +3 -1
  45. package/dist/cjs/exporter/ods/ods-export.d.ts.map +1 -1
  46. package/dist/cjs/exporter/ods/ods-export.js +432 -175
  47. package/dist/cjs/exporter/xlsx/chart-builder.d.ts.map +1 -1
  48. package/dist/cjs/exporter/xlsx/chart-builder.js +210 -6
  49. package/dist/cjs/exporter/xlsx/pivot-builder.d.ts +8 -0
  50. package/dist/cjs/exporter/xlsx/pivot-builder.d.ts.map +1 -1
  51. package/dist/cjs/exporter/xlsx/pivot-builder.js +141 -42
  52. package/dist/cjs/exporter/xlsx/style-builder.js +9 -3
  53. package/dist/cjs/exporter/xlsx/threaded-comments-builder.d.ts +7 -1
  54. package/dist/cjs/exporter/xlsx/threaded-comments-builder.d.ts.map +1 -1
  55. package/dist/cjs/exporter/xlsx/threaded-comments-builder.js +15 -3
  56. package/dist/cjs/exporter/xlsx/xlsx-export.d.ts +11 -2
  57. package/dist/cjs/exporter/xlsx/xlsx-export.d.ts.map +1 -1
  58. package/dist/cjs/exporter/xlsx/xlsx-export.js +678 -222
  59. package/dist/cjs/helpers/implicit-intersection.d.ts +16 -0
  60. package/dist/cjs/helpers/implicit-intersection.d.ts.map +1 -0
  61. package/dist/cjs/helpers/implicit-intersection.js +197 -0
  62. package/dist/cjs/print-settings.d.ts +105 -0
  63. package/dist/cjs/print-settings.d.ts.map +1 -0
  64. package/dist/cjs/print-settings.js +494 -0
  65. package/dist/cjs/tsconfig.cjs.tsbuildinfo +1 -1
  66. package/dist/esm/excel-parser/cfb-decryptor.d.ts +6 -0
  67. package/dist/esm/excel-parser/cfb-decryptor.d.ts.map +1 -1
  68. package/dist/esm/excel-parser/cfb-decryptor.js +6 -0
  69. package/dist/esm/excel-parser/helpers.d.ts +9 -1
  70. package/dist/esm/excel-parser/helpers.d.ts.map +1 -1
  71. package/dist/esm/excel-parser/helpers.js +34 -0
  72. package/dist/esm/excel-parser/interface.d.ts +10 -1
  73. package/dist/esm/excel-parser/interface.d.ts.map +1 -1
  74. package/dist/esm/excel-parser/plugins/ods/index.d.ts +19 -0
  75. package/dist/esm/excel-parser/plugins/ods/index.d.ts.map +1 -1
  76. package/dist/esm/excel-parser/plugins/ods/index.js +347 -33
  77. package/dist/esm/excel-parser/plugins/ods/styles.d.ts +43 -1
  78. package/dist/esm/excel-parser/plugins/ods/styles.d.ts.map +1 -1
  79. package/dist/esm/excel-parser/plugins/ods/styles.js +276 -2
  80. package/dist/esm/excel-parser/plugins/xls/index.d.ts +11 -3
  81. package/dist/esm/excel-parser/plugins/xls/index.d.ts.map +1 -1
  82. package/dist/esm/excel-parser/plugins/xls/index.js +37 -5
  83. package/dist/esm/excel-parser/plugins/xlsb/index.d.ts +4 -0
  84. package/dist/esm/excel-parser/plugins/xlsb/index.d.ts.map +1 -1
  85. package/dist/esm/excel-parser/plugins/xlsb/index.js +20 -6
  86. package/dist/esm/excel-parser/plugins/xlsx/charts.d.ts +10 -0
  87. package/dist/esm/excel-parser/plugins/xlsx/charts.d.ts.map +1 -1
  88. package/dist/esm/excel-parser/plugins/xlsx/charts.js +69 -6
  89. package/dist/esm/excel-parser/plugins/xlsx/drawing.d.ts +28 -1
  90. package/dist/esm/excel-parser/plugins/xlsx/drawing.d.ts.map +1 -1
  91. package/dist/esm/excel-parser/plugins/xlsx/drawing.js +99 -0
  92. package/dist/esm/excel-parser/plugins/xlsx/index.d.ts +26 -1
  93. package/dist/esm/excel-parser/plugins/xlsx/index.d.ts.map +1 -1
  94. package/dist/esm/excel-parser/plugins/xlsx/index.js +362 -26
  95. package/dist/esm/excel-parser/plugins/xlsx/pivots.d.ts.map +1 -1
  96. package/dist/esm/excel-parser/plugins/xlsx/pivots.js +86 -6
  97. package/dist/esm/excel-parser/plugins/xlsx/sheet-views.d.ts +3 -0
  98. package/dist/esm/excel-parser/plugins/xlsx/sheet-views.d.ts.map +1 -1
  99. package/dist/esm/excel-parser/plugins/xlsx/sheet-views.js +2 -0
  100. package/dist/esm/excel-parser/plugins/xlsx/styles.d.ts.map +1 -1
  101. package/dist/esm/excel-parser/plugins/xlsx/styles.js +12 -2
  102. package/dist/esm/excel-parser/registry.d.ts.map +1 -1
  103. package/dist/esm/excel-parser/registry.js +2 -0
  104. package/dist/esm/excel-parser/types.d.ts +7 -1
  105. package/dist/esm/excel-parser/types.d.ts.map +1 -1
  106. package/dist/esm/excel-parser/workbook.d.ts +1 -0
  107. package/dist/esm/excel-parser/workbook.d.ts.map +1 -1
  108. package/dist/esm/excel-parser/workbook.js +3 -0
  109. package/dist/esm/excel-parser/worker.js +2 -0
  110. package/dist/esm/exporter/ods/ods-export.d.ts.map +1 -1
  111. package/dist/esm/exporter/ods/ods-export.js +306 -35
  112. package/dist/esm/exporter/xlsx/chart-builder.d.ts.map +1 -1
  113. package/dist/esm/exporter/xlsx/chart-builder.js +161 -0
  114. package/dist/esm/exporter/xlsx/pivot-builder.d.ts +8 -0
  115. package/dist/esm/exporter/xlsx/pivot-builder.d.ts.map +1 -1
  116. package/dist/esm/exporter/xlsx/pivot-builder.js +104 -19
  117. package/dist/esm/exporter/xlsx/style-builder.js +9 -3
  118. package/dist/esm/exporter/xlsx/threaded-comments-builder.d.ts +7 -1
  119. package/dist/esm/exporter/xlsx/threaded-comments-builder.d.ts.map +1 -1
  120. package/dist/esm/exporter/xlsx/threaded-comments-builder.js +15 -3
  121. package/dist/esm/exporter/xlsx/xlsx-export.d.ts +11 -2
  122. package/dist/esm/exporter/xlsx/xlsx-export.d.ts.map +1 -1
  123. package/dist/esm/exporter/xlsx/xlsx-export.js +449 -47
  124. package/dist/esm/helpers/implicit-intersection.d.ts +16 -0
  125. package/dist/esm/helpers/implicit-intersection.d.ts.map +1 -0
  126. package/dist/esm/helpers/implicit-intersection.js +184 -0
  127. package/dist/esm/print-settings.d.ts +105 -0
  128. package/dist/esm/print-settings.d.ts.map +1 -0
  129. package/dist/esm/print-settings.js +422 -0
  130. package/dist/esm/tsconfig.esm.tsbuildinfo +1 -1
  131. package/package.json +3 -3
@@ -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,7 +14,7 @@ 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";
@@ -789,6 +790,18 @@ var XlsxPlugin = /** @class */ (function (_super) {
789
790
  * `getDataValidations()` aggregates these per-sheet caches, keeping ids
790
791
  * stable across per-sheet and workbook-wide callers.
791
792
  */
793
+ /**
794
+ * `<protectedRanges>` per sheet, populated while `getSheets` builds each
795
+ * `Sheet` (the element sits after `<sheetData>` in the worksheet part, so it
796
+ * rides the same geometry pass). Read back via `getProtectedRanges`.
797
+ */
798
+ _this.protectedRangesBySheet = new Map();
799
+ /**
800
+ * The builtin `_xlnm.Print_Area` / `_xlnm.Print_Titles` defined names,
801
+ * hoisted out of `namedRanges` (they are sheet-scoped facets, not user
802
+ * names) and merged into each sheet's `printSettings` by `getSheets()`.
803
+ */
804
+ _this.printNamesBySheetId = new Map();
792
805
  _this.dataValidationsBySheetCache = new Map();
793
806
  /** Per-sheet memo for conditional formatting, mirroring the DV cache. */
794
807
  _this.conditionalFormattingBySheetCache = new Map();
@@ -835,7 +848,7 @@ var XlsxPlugin = /** @class */ (function (_super) {
835
848
  };
836
849
  XlsxPlugin.prototype.parseSheetMetadata = function (rid) {
837
850
  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;
851
+ 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
852
  var _this = this;
840
853
  return __generator(this, function (_a) {
841
854
  switch (_a.label) {
@@ -849,6 +862,10 @@ var XlsxPlugin = /** @class */ (function (_super) {
849
862
  maxColumnIndex = 0;
850
863
  sheetHasFilterMode = false;
851
864
  zeroHeight = false;
865
+ protectedRangeEntries = [];
866
+ fitToPage = false;
867
+ rowBreaks = [];
868
+ columnBreaks = [];
852
869
  filterColumns = new Map();
853
870
  getOrCreateFilterColumn = function (colId) {
854
871
  var entry = filterColumns.get(colId);
@@ -862,13 +879,20 @@ var XlsxPlugin = /** @class */ (function (_super) {
862
879
  tablePartIds = [];
863
880
  lastScannedRowIndex = 0;
864
881
  scanSeqColIndex = 1;
882
+ inCustomSheetViews = false;
865
883
  normalizeTag = function (name) {
866
884
  return name.includes(":") ? name.split(":")[1] : name;
867
885
  };
868
886
  parser = new HtmlParser({
869
887
  onopentag: function (tagName, attrs) {
870
- var _a, _b, _c, _d, _e, _f, _g;
888
+ var _a, _b, _c, _d, _e, _f, _g, _h;
871
889
  var name = normalizeTag(tagName);
890
+ if (name === "customSheetViews") {
891
+ inCustomSheetViews = true;
892
+ return;
893
+ }
894
+ if (inCustomSheetViews)
895
+ return;
872
896
  if (name === "dimension") {
873
897
  var ref = attrs === null || attrs === void 0 ? void 0 : attrs.ref;
874
898
  if (typeof ref === "string") {
@@ -914,6 +938,50 @@ var XlsxPlugin = /** @class */ (function (_super) {
914
938
  if (name === "tabColor") {
915
939
  tabColor = { a$: __assign({}, attrs) };
916
940
  }
941
+ if (name === "sheetProtection") {
942
+ sheetProtection = readSheetProtectionAttrs(attrs);
943
+ }
944
+ if (name === "protectedRange") {
945
+ var sqref = attrs.sqref;
946
+ if (typeof sqref === "string" && sqref) {
947
+ protectedRangeEntries.push({
948
+ sqref: sqref,
949
+ name: attrs.name,
950
+ securityDescriptor: attrs.securityDescriptor,
951
+ });
952
+ }
953
+ }
954
+ if (name === "pageSetUpPr") {
955
+ fitToPage = isXmlTrue(attrs === null || attrs === void 0 ? void 0 : attrs.fitToPage);
956
+ }
957
+ if (name === "pageSetup") {
958
+ pageSetup = readPageSetupAttrs(attrs);
959
+ }
960
+ if (name === "pageMargins") {
961
+ pageMargins = readPageMarginsAttrs(attrs);
962
+ }
963
+ if (name === "printOptions") {
964
+ printOptions = readPrintOptionsAttrs(attrs);
965
+ }
966
+ if (name === "headerFooter") {
967
+ headerFooter = readHeaderFooterAttrs(attrs);
968
+ }
969
+ if (isHeaderFooterTextKey(name)) {
970
+ headerFooterTextTarget = name;
971
+ headerFooter !== null && headerFooter !== void 0 ? headerFooter : (headerFooter = {});
972
+ }
973
+ if (name === "rowBreaks")
974
+ breakAxis = "row";
975
+ if (name === "colBreaks")
976
+ breakAxis = "column";
977
+ if (name === "brk" && breakAxis) {
978
+ // Only manual breaks are user state; Excel drops automatic ones
979
+ // (`man` absent) on save as well.
980
+ var id = parseInt((_a = attrs === null || attrs === void 0 ? void 0 : attrs.id) !== null && _a !== void 0 ? _a : "", 10);
981
+ if (Number.isFinite(id) && id > 0 && isXmlTrue(attrs === null || attrs === void 0 ? void 0 : attrs.man)) {
982
+ (breakAxis === "row" ? rowBreaks : columnBreaks).push(id);
983
+ }
984
+ }
917
985
  if (name === "sheetView" && !sheetViewAttrs) {
918
986
  sheetViewAttrs = __assign({}, attrs);
919
987
  }
@@ -924,8 +992,8 @@ var XlsxPlugin = /** @class */ (function (_super) {
924
992
  return;
925
993
  }
926
994
  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);
995
+ var min = parseInt((_b = attrs.min) !== null && _b !== void 0 ? _b : "0", 10);
996
+ var max = parseInt((_c = attrs.max) !== null && _c !== void 0 ? _c : "0", 10);
929
997
  // Column default style: cells in these columns without an
930
998
  // explicit `s` (including cells never written to the XML)
931
999
  // inherit this xf. Collected separately from DimensionProperties
@@ -984,7 +1052,7 @@ var XlsxPlugin = /** @class */ (function (_super) {
984
1052
  }
985
1053
  }
986
1054
  if (name === "row") {
987
- var parsedRowIndex = parseInt((_c = attrs.r) !== null && _c !== void 0 ? _c : "0", 10);
1055
+ var parsedRowIndex = parseInt((_d = attrs.r) !== null && _d !== void 0 ? _d : "0", 10);
988
1056
  var rowIndex = parsedRowIndex > 0 ? parsedRowIndex : lastScannedRowIndex + 1;
989
1057
  lastScannedRowIndex = rowIndex;
990
1058
  scanSeqColIndex = 1;
@@ -1024,7 +1092,7 @@ var XlsxPlugin = /** @class */ (function (_super) {
1024
1092
  if (name === "mergeCell") {
1025
1093
  var ref = attrs.ref;
1026
1094
  if (typeof ref === "string") {
1027
- var range = (_d = addressToSelection(ref)) === null || _d === void 0 ? void 0 : _d.range;
1095
+ var range = (_e = addressToSelection(ref)) === null || _e === void 0 ? void 0 : _e.range;
1028
1096
  if (range)
1029
1097
  merges.push(range);
1030
1098
  }
@@ -1036,7 +1104,7 @@ var XlsxPlugin = /** @class */ (function (_super) {
1036
1104
  }
1037
1105
  }
1038
1106
  if (name === "filterColumn") {
1039
- var colId = parseInt((_e = attrs.colId) !== null && _e !== void 0 ? _e : "0", 10);
1107
+ var colId = parseInt((_f = attrs.colId) !== null && _f !== void 0 ? _f : "0", 10);
1040
1108
  currentFilterColumn = Number.isNaN(colId) ? null : colId;
1041
1109
  }
1042
1110
  if (name === "filter" && currentFilterColumn !== null) {
@@ -1076,13 +1144,13 @@ var XlsxPlugin = /** @class */ (function (_super) {
1076
1144
  // operator= val=>. Records the AND flag, then each child below.
1077
1145
  if (name === "customFilters" && currentFilterColumn !== null) {
1078
1146
  var entry = getOrCreateFilterColumn(currentFilterColumn);
1079
- entry.customFilters = (_f = entry.customFilters) !== null && _f !== void 0 ? _f : [];
1147
+ entry.customFilters = (_g = entry.customFilters) !== null && _g !== void 0 ? _g : [];
1080
1148
  entry.customFiltersAnd =
1081
1149
  attrs.and === "1" || attrs.and === "true";
1082
1150
  }
1083
1151
  if (name === "customFilter" && currentFilterColumn !== null) {
1084
1152
  var entry = getOrCreateFilterColumn(currentFilterColumn);
1085
- entry.customFilters = (_g = entry.customFilters) !== null && _g !== void 0 ? _g : [];
1153
+ entry.customFilters = (_h = entry.customFilters) !== null && _h !== void 0 ? _h : [];
1086
1154
  entry.customFilters.push({
1087
1155
  operator: attrs.operator,
1088
1156
  val: attrs.val,
@@ -1102,11 +1170,30 @@ var XlsxPlugin = /** @class */ (function (_super) {
1102
1170
  }
1103
1171
  }
1104
1172
  },
1173
+ ontext: function (text) {
1174
+ var _a;
1175
+ if (headerFooterTextTarget && headerFooter) {
1176
+ headerFooter[headerFooterTextTarget] =
1177
+ "".concat((_a = headerFooter[headerFooterTextTarget]) !== null && _a !== void 0 ? _a : "").concat(text);
1178
+ }
1179
+ },
1105
1180
  onclosetag: function (tagName) {
1106
1181
  var name = normalizeTag(tagName);
1182
+ if (name === "customSheetViews") {
1183
+ inCustomSheetViews = false;
1184
+ return;
1185
+ }
1186
+ if (inCustomSheetViews)
1187
+ return;
1107
1188
  if (name === "filterColumn") {
1108
1189
  currentFilterColumn = null;
1109
1190
  }
1191
+ if (isHeaderFooterTextKey(name)) {
1192
+ headerFooterTextTarget = undefined;
1193
+ }
1194
+ if (name === "rowBreaks" || name === "colBreaks") {
1195
+ breakAxis = undefined;
1196
+ }
1110
1197
  },
1111
1198
  onerror: function (err) {
1112
1199
  console.error("Streaming sheet metadata parse error", err);
@@ -1183,6 +1270,18 @@ var XlsxPlugin = /** @class */ (function (_super) {
1183
1270
  tablePartIds: tablePartIds,
1184
1271
  outlineSummaryBelow: outlineSummaryBelow,
1185
1272
  outlineSummaryRight: outlineSummaryRight,
1273
+ sheetProtection: sheetProtection,
1274
+ protectedRangeEntries: protectedRangeEntries,
1275
+ printSettings: compactPrintSettings({
1276
+ pageSetup: fitToPage ? __assign(__assign({}, pageSetup), { fitToPage: true }) : pageSetup,
1277
+ // Every Excel worksheet carries `<pageMargins>`; only non-default
1278
+ // margins are user state worth modelling.
1279
+ pageMargins: isDefaultPageMargins(pageMargins) ? undefined : pageMargins,
1280
+ printOptions: printOptions,
1281
+ headerFooter: headerFooter,
1282
+ rowBreaks: rowBreaks,
1283
+ columnBreaks: columnBreaks,
1284
+ }),
1186
1285
  }];
1187
1286
  }
1188
1287
  });
@@ -2004,6 +2103,7 @@ var XlsxPlugin = /** @class */ (function (_super) {
2004
2103
  this.sheetMetadataCache.clear();
2005
2104
  this.dataValidationsBySheetCache.clear();
2006
2105
  this.conditionalFormattingBySheetCache.clear();
2106
+ this.protectedRangesBySheet.clear();
2007
2107
  return [4 /*yield*/, this.loadWorkbookXml()];
2008
2108
  case 2:
2009
2109
  _e.sent();
@@ -2041,6 +2141,7 @@ var XlsxPlugin = /** @class */ (function (_super) {
2041
2141
  this.sheetMetadataCache.clear();
2042
2142
  this.dataValidationsBySheetCache.clear();
2043
2143
  this.conditionalFormattingBySheetCache.clear();
2144
+ this.protectedRangesBySheet.clear();
2044
2145
  this.worksheetBySheetId.clear();
2045
2146
  };
2046
2147
  XlsxPlugin.prototype.clearSharedFormula = function () {
@@ -2136,7 +2237,7 @@ var XlsxPlugin = /** @class */ (function (_super) {
2136
2237
  : [];
2137
2238
  columns = columnDefsArray.map(function (colDef) {
2138
2239
  var name = colDef.a$.name || "";
2139
- var columnObj = { name: name };
2240
+ var columnObj = __assign({ name: name }, parseTableColumnTotals(colDef));
2140
2241
  // Check for calculated column
2141
2242
  // Handle both with and without namespace prefix
2142
2243
  var calculatedColumnFormula = get(colDef, "calculatedColumnFormula") ||
@@ -3338,8 +3439,9 @@ var XlsxPlugin = /** @class */ (function (_super) {
3338
3439
  return __awaiter(this, void 0, void 0, function () {
3339
3440
  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
3441
  var e_28, _a;
3341
- return __generator(this, function (_b) {
3342
- switch (_b.label) {
3442
+ var _b;
3443
+ return __generator(this, function (_c) {
3444
+ switch (_c.label) {
3343
3445
  case 0:
3344
3446
  images = [];
3345
3447
  target = this.relations[rid].target;
@@ -3356,17 +3458,17 @@ var XlsxPlugin = /** @class */ (function (_super) {
3356
3458
  sheetRelPath = path.replace("worksheets", "worksheets/_rels") + ".rels";
3357
3459
  return [4 /*yield*/, this.zipParser.getText(sheetRelPath)];
3358
3460
  case 1:
3359
- sheetRelContent = _b.sent();
3461
+ sheetRelContent = _c.sent();
3360
3462
  sheetRels = this.xmlParser.parse(sheetRelContent);
3361
3463
  drawingRelations = get(sheetRels, "Relationships.Relationship");
3362
3464
  drawingRelationsArray = Array.isArray(drawingRelations)
3363
3465
  ? drawingRelations
3364
3466
  : [drawingRelations];
3365
3467
  _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) {
3468
+ 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;
3469
+ var e_31, _h, e_30, _j, e_29, _k;
3470
+ return __generator(this, function (_l) {
3471
+ switch (_l.label) {
3370
3472
  case 0:
3371
3473
  drawingId = get(drawingElement, "a$.r:id") || get(drawingElement, "a$.id");
3372
3474
  drawingRels = drawingRelationsArray.filter(function (rel) {
@@ -3375,13 +3477,13 @@ var XlsxPlugin = /** @class */ (function (_super) {
3375
3477
  rel.a$.ID === drawingId ||
3376
3478
  (rel.a$.Target && rel.a$.Target.includes("drawing"));
3377
3479
  });
3378
- _o.label = 1;
3480
+ _l.label = 1;
3379
3481
  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;
3482
+ _l.trys.push([1, 19, 20, 21]);
3483
+ drawingRels_2 = (e_31 = void 0, __values(drawingRels)), drawingRels_2_1 = drawingRels_2.next();
3484
+ _l.label = 2;
3383
3485
  case 2:
3384
- if (!!drawingRels_2_1.done) return [3 /*break*/, 26];
3486
+ if (!!drawingRels_2_1.done) return [3 /*break*/, 18];
3385
3487
  drawingRel = drawingRels_2_1.value;
3386
3488
  drawingPath = drawingRel.a$.Target;
3387
3489
  if (drawingPath.startsWith("../")) {
@@ -3400,130 +3502,94 @@ var XlsxPlugin = /** @class */ (function (_super) {
3400
3502
  }
3401
3503
  return [4 /*yield*/, this_3.zipParser.getText(drawingPath)];
3402
3504
  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;
3505
+ drawingContent = (_b = (_l.sent())) !== null && _b !== void 0 ? _b : "";
3506
+ drawing_1 = this_3.xmlParser.parse(drawingContent);
3507
+ _l.label = 4;
3412
3508
  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)];
3509
+ _l.trys.push([4, 15, 16, 17]);
3510
+ _d = (e_30 = void 0, __values(anchorsInDocumentOrder(drawing_1, drawingContent))), _e = _d.next();
3511
+ _l.label = 5;
3416
3512
  case 5:
3417
- _c = (__values.apply(void 0, [_o.sent()])), _d = _c.next();
3418
- _o.label = 6;
3513
+ if (!!_e.done) return [3 /*break*/, 14];
3514
+ anchor = _e.value;
3515
+ _l.label = 6;
3419
3516
  case 6:
3420
- if (!!_d.done) return [3 /*break*/, 8];
3421
- image = _d.value;
3422
- images.push(image);
3423
- _o.label = 7;
3517
+ _l.trys.push([6, 11, 12, 13]);
3518
+ e_29 = void 0;
3519
+ return [4 /*yield*/, processAnchors(anchor.node, anchor.kind, drawingPath, sheetId, this_3.zipParser, this_3.xmlParser)];
3424
3520
  case 7:
3425
- _d = _c.next();
3426
- return [3 /*break*/, 6];
3427
- case 8: return [3 /*break*/, 11];
3521
+ _f = (__values.apply(void 0, [_l.sent()])), _g = _f.next();
3522
+ _l.label = 8;
3523
+ case 8:
3524
+ if (!!_g.done) return [3 /*break*/, 10];
3525
+ image = _g.value;
3526
+ images.push(image);
3527
+ _l.label = 9;
3428
3528
  case 9:
3429
- e_29_1 = _o.sent();
3529
+ _g = _f.next();
3530
+ return [3 /*break*/, 8];
3531
+ case 10: return [3 /*break*/, 13];
3532
+ case 11:
3533
+ e_29_1 = _l.sent();
3430
3534
  e_29 = { error: e_29_1 };
3431
- return [3 /*break*/, 11];
3432
- case 10:
3535
+ return [3 /*break*/, 13];
3536
+ case 12:
3433
3537
  try {
3434
- if (_d && !_d.done && (_k = _c.return)) _k.call(_c);
3538
+ if (_g && !_g.done && (_k = _f.return)) _k.call(_f);
3435
3539
  }
3436
3540
  finally { if (e_29) throw e_29.error; }
3437
3541
  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
3542
  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();
3543
+ _e = _d.next();
3544
+ return [3 /*break*/, 5];
3545
+ case 14: return [3 /*break*/, 17];
3546
+ case 15:
3547
+ e_30_1 = _l.sent();
3456
3548
  e_30 = { error: e_30_1 };
3457
- return [3 /*break*/, 18];
3458
- case 17:
3549
+ return [3 /*break*/, 17];
3550
+ case 16:
3459
3551
  try {
3460
- if (_f && !_f.done && (_l = _e.return)) _l.call(_e);
3552
+ if (_e && !_e.done && (_j = _d.return)) _j.call(_d);
3461
3553
  }
3462
3554
  finally { if (e_30) throw e_30.error; }
3463
3555
  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)];
3556
+ case 17:
3557
+ drawingRels_2_1 = drawingRels_2.next();
3558
+ return [3 /*break*/, 2];
3559
+ case 18: return [3 /*break*/, 21];
3468
3560
  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();
3561
+ e_31_1 = _l.sent();
3482
3562
  e_31 = { error: e_31_1 };
3483
- return [3 /*break*/, 25];
3484
- case 24:
3563
+ return [3 /*break*/, 21];
3564
+ case 20:
3485
3565
  try {
3486
- if (_h && !_h.done && (_m = _g.return)) _m.call(_g);
3566
+ if (drawingRels_2_1 && !drawingRels_2_1.done && (_h = drawingRels_2.return)) _h.call(drawingRels_2);
3487
3567
  }
3488
3568
  finally { if (e_31) throw e_31.error; }
3489
3569
  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*/];
3570
+ case 21: return [2 /*return*/];
3505
3571
  }
3506
3572
  });
3507
3573
  };
3508
3574
  this_3 = this;
3509
- _b.label = 2;
3575
+ _c.label = 2;
3510
3576
  case 2:
3511
- _b.trys.push([2, 7, 8, 9]);
3577
+ _c.trys.push([2, 7, 8, 9]);
3512
3578
  drawings_2 = __values(drawings), drawings_2_1 = drawings_2.next();
3513
- _b.label = 3;
3579
+ _c.label = 3;
3514
3580
  case 3:
3515
3581
  if (!!drawings_2_1.done) return [3 /*break*/, 6];
3516
3582
  drawingElement = drawings_2_1.value;
3517
3583
  return [5 /*yield**/, _loop_6(drawingElement)];
3518
3584
  case 4:
3519
- _b.sent();
3520
- _b.label = 5;
3585
+ _c.sent();
3586
+ _c.label = 5;
3521
3587
  case 5:
3522
3588
  drawings_2_1 = drawings_2.next();
3523
3589
  return [3 /*break*/, 3];
3524
3590
  case 6: return [3 /*break*/, 9];
3525
3591
  case 7:
3526
- e_28_1 = _b.sent();
3592
+ e_28_1 = _c.sent();
3527
3593
  e_28 = { error: e_28_1 };
3528
3594
  return [3 /*break*/, 9];
3529
3595
  case 8:
@@ -3605,9 +3671,46 @@ var XlsxPlugin = /** @class */ (function (_super) {
3605
3671
  XlsxPlugin.prototype._getSheets = function () {
3606
3672
  return this.workSheets;
3607
3673
  };
3674
+ /**
3675
+ * Resolve a builtin print name to its sheet (`localSheetId` indexes the
3676
+ * `<sheets>` order; a name without scope falls back to the sheet named in
3677
+ * the formula) and record the parsed print area / titles for `getSheets()`.
3678
+ */
3679
+ XlsxPlugin.prototype.stashBuiltinPrintName = function (name, expression, localSheetId, sheetIdBySheetName) {
3680
+ var _a, _b;
3681
+ if (!expression || expression.includes("#REF!"))
3682
+ return;
3683
+ var parsed = name === PRINT_AREA_NAME
3684
+ ? parsePrintAreaFormula(expression)
3685
+ : parsePrintTitlesFormula(expression);
3686
+ if (!parsed)
3687
+ return;
3688
+ var sheetId;
3689
+ if (localSheetId !== undefined) {
3690
+ var index = parseInt(localSheetId, 10);
3691
+ var sheetEl = this._getSheets()[index];
3692
+ var id = Number((_a = sheetEl === null || sheetEl === void 0 ? void 0 : sheetEl.a$) === null || _a === void 0 ? void 0 : _a.sheetId);
3693
+ if (Number.isFinite(id))
3694
+ sheetId = id;
3695
+ }
3696
+ if (sheetId === undefined && parsed.sheetName) {
3697
+ sheetId = sheetIdBySheetName[parsed.sheetName];
3698
+ }
3699
+ if (sheetId === undefined)
3700
+ return;
3701
+ var entry = (_b = this.printNamesBySheetId.get(sheetId)) !== null && _b !== void 0 ? _b : {};
3702
+ if ("ranges" in parsed) {
3703
+ entry.printArea = parsed.ranges;
3704
+ }
3705
+ else {
3706
+ entry.printTitles = parsed.titles;
3707
+ }
3708
+ this.printNamesBySheetId.set(sheetId, entry);
3709
+ };
3608
3710
  XlsxPlugin.prototype._getNamedRanges = function () {
3609
- var e_33, _a, e_34, _b;
3610
- var _c;
3711
+ var e_32, _a, e_33, _b;
3712
+ var _c, _d;
3713
+ this.printNamesBySheetId.clear();
3611
3714
  var xml = this.workbookXml;
3612
3715
  var sheetIdBySheetName = this._getSheets().reduce(function (acc, element) {
3613
3716
  var _a;
@@ -3632,6 +3735,14 @@ var XlsxPlugin = /** @class */ (function (_super) {
3632
3735
  var name_7 = (_c = defined_name.a$) === null || _c === void 0 ? void 0 : _c.name;
3633
3736
  var expression = defined_name.t$ || "";
3634
3737
  var hidden = defined_name.a$.hidden === "1";
3738
+ // `_xlnm.Print_Area` / `_xlnm.Print_Titles` are sheet-scoped print
3739
+ // facets, not user names: they land on `sheet.printSettings` (see
3740
+ // `getSheets()`), never in `namedRanges` — a global copy would make
3741
+ // Excel repair the file on the next export.
3742
+ if (isBuiltinPrintName(name_7)) {
3743
+ this.stashBuiltinPrintName(name_7, typeof expression === "string" ? expression : "", (_d = defined_name.a$) === null || _d === void 0 ? void 0 : _d.localSheetId, sheetIdBySheetName);
3744
+ continue;
3745
+ }
3635
3746
  // Empty defined names are noise; nothing useful to round-trip.
3636
3747
  // Hidden defined names ARE preserved — Excel uses them as scratch
3637
3748
  // names for features like print areas and add-ins, and dropping
@@ -3647,7 +3758,7 @@ var XlsxPlugin = /** @class */ (function (_super) {
3647
3758
  var pushedRange = false;
3648
3759
  if (selections.length) {
3649
3760
  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()) {
3761
+ 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
3762
  var selection = selections_1_1.value;
3652
3763
  var sheetId = selection.sheetName
3653
3764
  ? sheetIdBySheetName[selection.sheetName]
@@ -3658,12 +3769,12 @@ var XlsxPlugin = /** @class */ (function (_super) {
3658
3769
  }
3659
3770
  }
3660
3771
  }
3661
- catch (e_34_1) { e_34 = { error: e_34_1 }; }
3772
+ catch (e_33_1) { e_33 = { error: e_33_1 }; }
3662
3773
  finally {
3663
3774
  try {
3664
3775
  if (selections_1_1 && !selections_1_1.done && (_b = selections_1.return)) _b.call(selections_1);
3665
3776
  }
3666
- finally { if (e_34) throw e_34.error; }
3777
+ finally { if (e_33) throw e_33.error; }
3667
3778
  }
3668
3779
  }
3669
3780
  // Reference parsed but no selection bound to a known sheet — most
@@ -3687,12 +3798,12 @@ var XlsxPlugin = /** @class */ (function (_super) {
3687
3798
  }
3688
3799
  }
3689
3800
  }
3690
- catch (e_33_1) { e_33 = { error: e_33_1 }; }
3801
+ catch (e_32_1) { e_32 = { error: e_32_1 }; }
3691
3802
  finally {
3692
3803
  try {
3693
3804
  if (defined_names_1_1 && !defined_names_1_1.done && (_a = defined_names_1.return)) _a.call(defined_names_1);
3694
3805
  }
3695
- finally { if (e_33) throw e_33.error; }
3806
+ finally { if (e_32) throw e_32.error; }
3696
3807
  }
3697
3808
  }
3698
3809
  return namedRanges;
@@ -3751,8 +3862,8 @@ var XlsxPlugin = /** @class */ (function (_super) {
3751
3862
  // INTERFACE IMPLEMENTATION METHODS
3752
3863
  XlsxPlugin.prototype.getSheets = function () {
3753
3864
  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;
3865
+ var workSheets, sheets, tables, workSheets_1, workSheets_1_1, element, built, e_34_1;
3866
+ var e_34, _a;
3756
3867
  var _b;
3757
3868
  if (minRowCount === void 0) { minRowCount = 0; }
3758
3869
  if (minColumnCount === void 0) { minColumnCount = 0; }
@@ -3787,14 +3898,14 @@ var XlsxPlugin = /** @class */ (function (_super) {
3787
3898
  return [3 /*break*/, 2];
3788
3899
  case 5: return [3 /*break*/, 8];
3789
3900
  case 6:
3790
- e_35_1 = _c.sent();
3791
- e_35 = { error: e_35_1 };
3901
+ e_34_1 = _c.sent();
3902
+ e_34 = { error: e_34_1 };
3792
3903
  return [3 /*break*/, 8];
3793
3904
  case 7:
3794
3905
  try {
3795
3906
  if (workSheets_1_1 && !workSheets_1_1.done && (_a = workSheets_1.return)) _a.call(workSheets_1);
3796
3907
  }
3797
- finally { if (e_35) throw e_35.error; }
3908
+ finally { if (e_34) throw e_34.error; }
3798
3909
  return [7 /*endfinally*/];
3799
3910
  case 8: return [2 /*return*/, [sheets, tables]];
3800
3911
  }
@@ -3852,8 +3963,8 @@ var XlsxPlugin = /** @class */ (function (_super) {
3852
3963
  };
3853
3964
  XlsxPlugin.prototype.buildSheetFromElement = function (element_1) {
3854
3965
  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;
3966
+ 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;
3967
+ var e_35, _b;
3857
3968
  var _c;
3858
3969
  if (minRowCount === void 0) { minRowCount = 0; }
3859
3970
  if (minColumnCount === void 0) { minColumnCount = 0; }
@@ -3885,7 +3996,17 @@ var XlsxPlugin = /** @class */ (function (_super) {
3885
3996
  return [4 /*yield*/, this.getSheetMetadata(rid)];
3886
3997
  case 1:
3887
3998
  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;
3999
+ 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;
4000
+ if (sheetProtection) {
4001
+ sheet_1.sheetProtection = sheetProtection;
4002
+ }
4003
+ {
4004
+ printNames = this.printNamesBySheetId.get(sheetId);
4005
+ 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 }));
4006
+ if (merged)
4007
+ sheet_1.printSettings = merged;
4008
+ }
4009
+ this.protectedRangesBySheet.set(sheetId, protectedRangesFromEntries(sheetId, protectedRangeEntries));
3889
4010
  if (defaultRowHeightPx !== undefined) {
3890
4011
  sheet_1.defaultRowHeight = defaultRowHeightPx;
3891
4012
  }
@@ -3917,7 +4038,7 @@ var XlsxPlugin = /** @class */ (function (_super) {
3917
4038
  }
3918
4039
  });
3919
4040
  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;
4041
+ _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
4042
  sheet_1.frozenRowCount = frozenRowCount;
3922
4043
  sheet_1.frozenColumnCount = frozenColumnCount;
3923
4044
  if (paneTopLeftCell) {
@@ -3933,6 +4054,8 @@ var XlsxPlugin = /** @class */ (function (_super) {
3933
4054
  if (zoomScale !== undefined && zoomScale !== 100) {
3934
4055
  sheet_1.zoomScale = zoomScale;
3935
4056
  }
4057
+ if (rightToLeft)
4058
+ sheet_1.rightToLeft = true;
3936
4059
  // tab color
3937
4060
  if (tabColor) {
3938
4061
  sheet_1.tabColor = extractColor(tabColor, this.workbookStyles.indexedColors);
@@ -3952,12 +4075,12 @@ var XlsxPlugin = /** @class */ (function (_super) {
3952
4075
  sheet_1.merges.push(range);
3953
4076
  }
3954
4077
  }
3955
- catch (e_36_1) { e_36 = { error: e_36_1 }; }
4078
+ catch (e_35_1) { e_35 = { error: e_35_1 }; }
3956
4079
  finally {
3957
4080
  try {
3958
4081
  if (merges_2_1 && !merges_2_1.done && (_b = merges_2.return)) _b.call(merges_2);
3959
4082
  }
3960
- finally { if (e_36) throw e_36.error; }
4083
+ finally { if (e_35) throw e_35.error; }
3961
4084
  }
3962
4085
  columnCount = findMax([maxColumnIndex, minColumnCount]);
3963
4086
  rowEntries.forEach(function (entry, rowIndex) {
@@ -4045,8 +4168,8 @@ var XlsxPlugin = /** @class */ (function (_super) {
4045
4168
  };
4046
4169
  XlsxPlugin.prototype.processSheetData = function () {
4047
4170
  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;
4171
+ var workSheets, totalSheets, currentSheetIndex, workSheets_2, workSheets_2_1, element, e_36_1;
4172
+ var e_36, _a;
4050
4173
  var _b;
4051
4174
  if (chunkSize === void 0) { chunkSize = 100; }
4052
4175
  if (enableCellXfsRegistry === void 0) { enableCellXfsRegistry = false; }
@@ -4085,14 +4208,14 @@ var XlsxPlugin = /** @class */ (function (_super) {
4085
4208
  return [3 /*break*/, 2];
4086
4209
  case 6: return [3 /*break*/, 9];
4087
4210
  case 7:
4088
- e_37_1 = _c.sent();
4089
- e_37 = { error: e_37_1 };
4211
+ e_36_1 = _c.sent();
4212
+ e_36 = { error: e_36_1 };
4090
4213
  return [3 /*break*/, 9];
4091
4214
  case 8:
4092
4215
  try {
4093
4216
  if (workSheets_2_1 && !workSheets_2_1.done && (_a = workSheets_2.return)) _a.call(workSheets_2);
4094
4217
  }
4095
- finally { if (e_37) throw e_37.error; }
4218
+ finally { if (e_36) throw e_36.error; }
4096
4219
  return [7 /*endfinally*/];
4097
4220
  case 9: return [2 /*return*/];
4098
4221
  }
@@ -4142,10 +4265,10 @@ var XlsxPlugin = /** @class */ (function (_super) {
4142
4265
  };
4143
4266
  XlsxPlugin.prototype.processOneSheet = function (element_1, _a) {
4144
4267
  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;
4268
+ 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;
4269
+ var e_39, _o, e_38, _p;
4147
4270
  var _this = this;
4148
- var _q, e_38, _r, _s;
4271
+ var _q, e_37, _r, _s;
4149
4272
  var _t, _u, _v, _w, _x, _y, _z, _0, _1, _2, _3, _4;
4150
4273
  var chunkSize = _b.chunkSize, enableCellXfsRegistry = _b.enableCellXfsRegistry, _enableSharedStrings = _b.enableSharedStrings, onPhase = _b.onPhase, currentSheetIndex = _b.currentSheetIndex, totalSheets = _b.totalSheets;
4151
4274
  return __generator(this, function (_5) {
@@ -4175,12 +4298,12 @@ var XlsxPlugin = /** @class */ (function (_super) {
4175
4298
  }
4176
4299
  }
4177
4300
  }
4178
- catch (e_40_1) { e_40 = { error: e_40_1 }; }
4301
+ catch (e_39_1) { e_39 = { error: e_39_1 }; }
4179
4302
  finally {
4180
4303
  try {
4181
4304
  if (_d && !_d.done && (_o = _c.return)) _o.call(_c);
4182
4305
  }
4183
- finally { if (e_40) throw e_40.error; }
4306
+ finally { if (e_39) throw e_39.error; }
4184
4307
  }
4185
4308
  styleCellTemplates_1 = new Map();
4186
4309
  getTemplateForStyleIndex = function (styleIndex) {
@@ -4194,7 +4317,7 @@ var XlsxPlugin = /** @class */ (function (_super) {
4194
4317
  styleMaterializeBudget = STYLE_MATERIALIZE_CELL_BUDGET;
4195
4318
  mergeRangesByRow_1 = this.buildMergeRangesByRow(metadata.merges);
4196
4319
  getMergeRangeForCell = function (rowIndex, columnIndex) {
4197
- var e_41, _a;
4320
+ var e_40, _a;
4198
4321
  var ranges = mergeRangesByRow_1.get(rowIndex);
4199
4322
  if (!ranges)
4200
4323
  return undefined;
@@ -4207,12 +4330,12 @@ var XlsxPlugin = /** @class */ (function (_super) {
4207
4330
  }
4208
4331
  }
4209
4332
  }
4210
- catch (e_41_1) { e_41 = { error: e_41_1 }; }
4333
+ catch (e_40_1) { e_40 = { error: e_40_1 }; }
4211
4334
  finally {
4212
4335
  try {
4213
4336
  if (ranges_1_1 && !ranges_1_1.done && (_a = ranges_1.return)) _a.call(ranges_1);
4214
4337
  }
4215
- finally { if (e_41) throw e_41.error; }
4338
+ finally { if (e_40) throw e_40.error; }
4216
4339
  }
4217
4340
  return undefined;
4218
4341
  };
@@ -4312,7 +4435,7 @@ var XlsxPlugin = /** @class */ (function (_super) {
4312
4435
  _5.trys.push([9, 15, 16, 21]);
4313
4436
  _loop_7 = function () {
4314
4437
  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;
4438
+ var e_41, _19, e_42, _20, e_43, _21, e_44, _22, e_45, _23;
4316
4439
  return __generator(this, function (_24) {
4317
4440
  switch (_24.label) {
4318
4441
  case 0:
@@ -4354,7 +4477,7 @@ var XlsxPlugin = /** @class */ (function (_super) {
4354
4477
  cellArray = Array.isArray(cells) ? cells : [cells];
4355
4478
  seqColIndex = 1;
4356
4479
  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()) {
4480
+ 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
4481
  cell = cellArray_1_1.value;
4359
4482
  if (!cell || !cell.a$) {
4360
4483
  seqColIndex++;
@@ -4381,12 +4504,12 @@ var XlsxPlugin = /** @class */ (function (_super) {
4381
4504
  rowCellsByColumnIndex.set(columnIndex, cell);
4382
4505
  }
4383
4506
  }
4384
- catch (e_42_1) { e_42 = { error: e_42_1 }; }
4507
+ catch (e_41_1) { e_41 = { error: e_41_1 }; }
4385
4508
  finally {
4386
4509
  try {
4387
4510
  if (cellArray_1_1 && !cellArray_1_1.done && (_19 = cellArray_1.return)) _19.call(cellArray_1);
4388
4511
  }
4389
- finally { if (e_42) throw e_42.error; }
4512
+ finally { if (e_41) throw e_41.error; }
4390
4513
  }
4391
4514
  // Second pass: process each cell
4392
4515
  seqColIndex = 1;
@@ -4460,7 +4583,7 @@ var XlsxPlugin = /** @class */ (function (_super) {
4460
4583
  }
4461
4584
  if (rowHyperlinks) {
4462
4585
  try {
4463
- for (_6 = (e_43 = void 0, __values(rowHyperlinks.entries())), _7 = _6.next(); !_7.done; _7 = _6.next()) {
4586
+ for (_6 = (e_42 = void 0, __values(rowHyperlinks.entries())), _7 = _6.next(); !_7.done; _7 = _6.next()) {
4464
4587
  _8 = __read(_7.value, 2), columnIndex = _8[0], hyperlink = _8[1];
4465
4588
  if (rowData.values[columnIndex]) {
4466
4589
  if (!((_y = rowData.values[columnIndex]) === null || _y === void 0 ? void 0 : _y.hyperlink)) {
@@ -4472,18 +4595,18 @@ var XlsxPlugin = /** @class */ (function (_super) {
4472
4595
  }
4473
4596
  }
4474
4597
  }
4475
- catch (e_43_1) { e_43 = { error: e_43_1 }; }
4598
+ catch (e_42_1) { e_42 = { error: e_42_1 }; }
4476
4599
  finally {
4477
4600
  try {
4478
4601
  if (_7 && !_7.done && (_20 = _6.return)) _20.call(_6);
4479
4602
  }
4480
- finally { if (e_43) throw e_43.error; }
4603
+ finally { if (e_42) throw e_42.error; }
4481
4604
  }
4482
4605
  hyperlinksByRow.delete(rowIndex);
4483
4606
  }
4484
4607
  if (rowComments) {
4485
4608
  try {
4486
- for (_9 = (e_44 = void 0, __values(rowComments.entries())), _10 = _9.next(); !_10.done; _10 = _9.next()) {
4609
+ for (_9 = (e_43 = void 0, __values(rowComments.entries())), _10 = _9.next(); !_10.done; _10 = _9.next()) {
4487
4610
  _11 = __read(_10.value, 2), columnIndex = _11[0], text = _11[1];
4488
4611
  if (rowData.values[columnIndex]) {
4489
4612
  if (!((_z = rowData.values[columnIndex]) === null || _z === void 0 ? void 0 : _z.note)) {
@@ -4495,18 +4618,18 @@ var XlsxPlugin = /** @class */ (function (_super) {
4495
4618
  }
4496
4619
  }
4497
4620
  }
4498
- catch (e_44_1) { e_44 = { error: e_44_1 }; }
4621
+ catch (e_43_1) { e_43 = { error: e_43_1 }; }
4499
4622
  finally {
4500
4623
  try {
4501
4624
  if (_10 && !_10.done && (_21 = _9.return)) _21.call(_9);
4502
4625
  }
4503
- finally { if (e_44) throw e_44.error; }
4626
+ finally { if (e_43) throw e_43.error; }
4504
4627
  }
4505
4628
  commentsByRow_1.delete(rowIndex);
4506
4629
  }
4507
4630
  if (rowThreads) {
4508
4631
  try {
4509
- for (_12 = (e_45 = void 0, __values(rowThreads.entries())), _13 = _12.next(); !_13.done; _13 = _12.next()) {
4632
+ for (_12 = (e_44 = void 0, __values(rowThreads.entries())), _13 = _12.next(); !_13.done; _13 = _12.next()) {
4510
4633
  _14 = __read(_13.value, 2), columnIndex = _14[0], threadId = _14[1];
4511
4634
  if (rowData.values[columnIndex]) {
4512
4635
  if (!((_0 = rowData.values[columnIndex]) === null || _0 === void 0 ? void 0 : _0.commentThreadId)) {
@@ -4520,19 +4643,19 @@ var XlsxPlugin = /** @class */ (function (_super) {
4520
4643
  }
4521
4644
  }
4522
4645
  }
4523
- catch (e_45_1) { e_45 = { error: e_45_1 }; }
4646
+ catch (e_44_1) { e_44 = { error: e_44_1 }; }
4524
4647
  finally {
4525
4648
  try {
4526
4649
  if (_13 && !_13.done && (_22 = _12.return)) _22.call(_12);
4527
4650
  }
4528
- finally { if (e_45) throw e_45.error; }
4651
+ finally { if (e_44) throw e_44.error; }
4529
4652
  }
4530
4653
  threadsByRow_1.delete(rowIndex);
4531
4654
  }
4532
4655
  rowSparklines = sparklinesByRow.get(rowIndex);
4533
4656
  if (rowSparklines) {
4534
4657
  try {
4535
- for (_15 = (e_46 = void 0, __values(rowSparklines.entries())), _16 = _15.next(); !_16.done; _16 = _15.next()) {
4658
+ for (_15 = (e_45 = void 0, __values(rowSparklines.entries())), _16 = _15.next(); !_16.done; _16 = _15.next()) {
4536
4659
  _17 = __read(_16.value, 2), columnIndex = _17[0], sparkline = _17[1];
4537
4660
  existingCell = rowData.values[columnIndex];
4538
4661
  // Only set formula if cell doesn't already have one
@@ -4627,12 +4750,12 @@ var XlsxPlugin = /** @class */ (function (_super) {
4627
4750
  rowData.values[columnIndex] = cellData;
4628
4751
  }
4629
4752
  }
4630
- catch (e_46_1) { e_46 = { error: e_46_1 }; }
4753
+ catch (e_45_1) { e_45 = { error: e_45_1 }; }
4631
4754
  finally {
4632
4755
  try {
4633
4756
  if (_16 && !_16.done && (_23 = _15.return)) _23.call(_15);
4634
4757
  }
4635
- finally { if (e_46) throw e_46.error; }
4758
+ finally { if (e_45) throw e_45.error; }
4636
4759
  }
4637
4760
  sparklinesByRow.delete(rowIndex);
4638
4761
  }
@@ -4667,8 +4790,8 @@ var XlsxPlugin = /** @class */ (function (_super) {
4667
4790
  return [3 /*break*/, 10];
4668
4791
  case 14: return [3 /*break*/, 21];
4669
4792
  case 15:
4670
- e_38_1 = _5.sent();
4671
- e_38 = { error: e_38_1 };
4793
+ e_37_1 = _5.sent();
4794
+ e_37 = { error: e_37_1 };
4672
4795
  return [3 /*break*/, 21];
4673
4796
  case 16:
4674
4797
  _5.trys.push([16, , 19, 20]);
@@ -4679,7 +4802,7 @@ var XlsxPlugin = /** @class */ (function (_super) {
4679
4802
  _5.label = 18;
4680
4803
  case 18: return [3 /*break*/, 20];
4681
4804
  case 19:
4682
- if (e_38) throw e_38.error;
4805
+ if (e_37) throw e_37.error;
4683
4806
  return [7 /*endfinally*/];
4684
4807
  case 20: return [7 /*endfinally*/];
4685
4808
  case 21:
@@ -4712,14 +4835,14 @@ var XlsxPlugin = /** @class */ (function (_super) {
4712
4835
  return [3 /*break*/, 23];
4713
4836
  case 27: return [3 /*break*/, 30];
4714
4837
  case 28:
4715
- e_39_1 = _5.sent();
4716
- e_39 = { error: e_39_1 };
4838
+ e_38_1 = _5.sent();
4839
+ e_38 = { error: e_38_1 };
4717
4840
  return [3 /*break*/, 30];
4718
4841
  case 29:
4719
4842
  try {
4720
4843
  if (_m && !_m.done && (_p = _l.return)) _p.call(_l);
4721
4844
  }
4722
- finally { if (e_39) throw e_39.error; }
4845
+ finally { if (e_38) throw e_38.error; }
4723
4846
  return [7 /*endfinally*/];
4724
4847
  case 30:
4725
4848
  finalPayload = flushChunk(true);
@@ -4736,8 +4859,8 @@ var XlsxPlugin = /** @class */ (function (_super) {
4736
4859
  };
4737
4860
  XlsxPlugin.prototype.getDrawings = function () {
4738
4861
  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;
4862
+ var workSheets, allDrawings, workSheets_3, workSheets_3_1, element, sheetId, rid, features, sheet_data, drawings, e_46_1;
4863
+ var e_46, _a;
4741
4864
  return __generator(this, function (_b) {
4742
4865
  switch (_b.label) {
4743
4866
  case 0:
@@ -4770,14 +4893,14 @@ var XlsxPlugin = /** @class */ (function (_super) {
4770
4893
  return [3 /*break*/, 2];
4771
4894
  case 6: return [3 /*break*/, 9];
4772
4895
  case 7:
4773
- e_47_1 = _b.sent();
4774
- e_47 = { error: e_47_1 };
4896
+ e_46_1 = _b.sent();
4897
+ e_46 = { error: e_46_1 };
4775
4898
  return [3 /*break*/, 9];
4776
4899
  case 8:
4777
4900
  try {
4778
4901
  if (workSheets_3_1 && !workSheets_3_1.done && (_a = workSheets_3.return)) _a.call(workSheets_3);
4779
4902
  }
4780
- finally { if (e_47) throw e_47.error; }
4903
+ finally { if (e_46) throw e_46.error; }
4781
4904
  return [7 /*endfinally*/];
4782
4905
  case 9: return [2 /*return*/, allDrawings];
4783
4906
  }
@@ -4786,8 +4909,8 @@ var XlsxPlugin = /** @class */ (function (_super) {
4786
4909
  };
4787
4910
  XlsxPlugin.prototype.getCharts = function () {
4788
4911
  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;
4912
+ var allCharts, workSheets, workSheets_4, workSheets_4_1, element, sheetId, rid, features, sheet_data, charts, e_47_1;
4913
+ var e_47, _a;
4791
4914
  return __generator(this, function (_b) {
4792
4915
  switch (_b.label) {
4793
4916
  case 0:
@@ -4820,14 +4943,14 @@ var XlsxPlugin = /** @class */ (function (_super) {
4820
4943
  return [3 /*break*/, 2];
4821
4944
  case 6: return [3 /*break*/, 9];
4822
4945
  case 7:
4823
- e_48_1 = _b.sent();
4824
- e_48 = { error: e_48_1 };
4946
+ e_47_1 = _b.sent();
4947
+ e_47 = { error: e_47_1 };
4825
4948
  return [3 /*break*/, 9];
4826
4949
  case 8:
4827
4950
  try {
4828
4951
  if (workSheets_4_1 && !workSheets_4_1.done && (_a = workSheets_4.return)) _a.call(workSheets_4);
4829
4952
  }
4830
- finally { if (e_48) throw e_48.error; }
4953
+ finally { if (e_47) throw e_47.error; }
4831
4954
  return [7 /*endfinally*/];
4832
4955
  case 9: return [2 /*return*/, allCharts];
4833
4956
  }
@@ -4842,8 +4965,8 @@ var XlsxPlugin = /** @class */ (function (_super) {
4842
4965
  */
4843
4966
  XlsxPlugin.prototype.getPivotTables = function () {
4844
4967
  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;
4968
+ 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_48_1;
4969
+ var e_49, _b, e_48, _c;
4847
4970
  var _d, _e, _f;
4848
4971
  return __generator(this, function (_g) {
4849
4972
  switch (_g.label) {
@@ -4862,12 +4985,12 @@ var XlsxPlugin = /** @class */ (function (_super) {
4862
4985
  sheetNameToId.set(name_9, id);
4863
4986
  }
4864
4987
  }
4865
- catch (e_50_1) { e_50 = { error: e_50_1 }; }
4988
+ catch (e_49_1) { e_49 = { error: e_49_1 }; }
4866
4989
  finally {
4867
4990
  try {
4868
4991
  if (workSheets_5_1 && !workSheets_5_1.done && (_b = workSheets_5.return)) _b.call(workSheets_5);
4869
4992
  }
4870
- finally { if (e_50) throw e_50.error; }
4993
+ finally { if (e_49) throw e_49.error; }
4871
4994
  }
4872
4995
  pivotIdCounter = 1;
4873
4996
  nextPivotId = function () { return "imported-pivot-".concat(pivotIdCounter++); };
@@ -4936,14 +5059,14 @@ var XlsxPlugin = /** @class */ (function (_super) {
4936
5059
  return [3 /*break*/, 3];
4937
5060
  case 10: return [3 /*break*/, 13];
4938
5061
  case 11:
4939
- e_49_1 = _g.sent();
4940
- e_49 = { error: e_49_1 };
5062
+ e_48_1 = _g.sent();
5063
+ e_48 = { error: e_48_1 };
4941
5064
  return [3 /*break*/, 13];
4942
5065
  case 12:
4943
5066
  try {
4944
5067
  if (workSheets_6_1 && !workSheets_6_1.done && (_c = workSheets_6.return)) _c.call(workSheets_6);
4945
5068
  }
4946
- finally { if (e_49) throw e_49.error; }
5069
+ finally { if (e_48) throw e_48.error; }
4947
5070
  return [7 /*endfinally*/];
4948
5071
  case 13: return [2 /*return*/, all];
4949
5072
  }
@@ -4960,8 +5083,8 @@ var XlsxPlugin = /** @class */ (function (_super) {
4960
5083
  */
4961
5084
  XlsxPlugin.prototype.getPowerQuery = function () {
4962
5085
  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;
5086
+ var customXmlParts, connectionsXml, _a, _b, rel, type, itemPath, itemXml, propsXml, itemRelsPath, itemRels, _c, _d, relList, relArray, propsRel, propsPath, path, e_50_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_51_1, e_52_1, parts;
5087
+ var e_50, _o, e_52, _p, e_51, _q;
4965
5088
  var _r, _s, _t, _u, _v, _w;
4966
5089
  return __generator(this, function (_x) {
4967
5090
  switch (_x.label) {
@@ -5023,14 +5146,14 @@ var XlsxPlugin = /** @class */ (function (_super) {
5023
5146
  return [3 /*break*/, 2];
5024
5147
  case 10: return [3 /*break*/, 13];
5025
5148
  case 11:
5026
- e_51_1 = _x.sent();
5027
- e_51 = { error: e_51_1 };
5149
+ e_50_1 = _x.sent();
5150
+ e_50 = { error: e_50_1 };
5028
5151
  return [3 /*break*/, 13];
5029
5152
  case 12:
5030
5153
  try {
5031
5154
  if (_b && !_b.done && (_o = _a.return)) _o.call(_a);
5032
5155
  }
5033
- finally { if (e_51) throw e_51.error; }
5156
+ finally { if (e_50) throw e_50.error; }
5034
5157
  return [7 /*endfinally*/];
5035
5158
  case 13:
5036
5159
  queryTables = [];
@@ -5059,7 +5182,7 @@ var XlsxPlugin = /** @class */ (function (_super) {
5059
5182
  _x.label = 17;
5060
5183
  case 17:
5061
5184
  _x.trys.push([17, 24, 25, 26]);
5062
- relArray_1 = (e_52 = void 0, __values(relArray)), relArray_1_1 = relArray_1.next();
5185
+ relArray_1 = (e_51 = void 0, __values(relArray)), relArray_1_1 = relArray_1.next();
5063
5186
  _x.label = 18;
5064
5187
  case 18:
5065
5188
  if (!!relArray_1_1.done) return [3 /*break*/, 23];
@@ -5121,28 +5244,28 @@ var XlsxPlugin = /** @class */ (function (_super) {
5121
5244
  return [3 /*break*/, 18];
5122
5245
  case 23: return [3 /*break*/, 26];
5123
5246
  case 24:
5124
- e_52_1 = _x.sent();
5125
- e_52 = { error: e_52_1 };
5247
+ e_51_1 = _x.sent();
5248
+ e_51 = { error: e_51_1 };
5126
5249
  return [3 /*break*/, 26];
5127
5250
  case 25:
5128
5251
  try {
5129
5252
  if (relArray_1_1 && !relArray_1_1.done && (_q = relArray_1.return)) _q.call(relArray_1);
5130
5253
  }
5131
- finally { if (e_52) throw e_52.error; }
5254
+ finally { if (e_51) throw e_51.error; }
5132
5255
  return [7 /*endfinally*/];
5133
5256
  case 26:
5134
5257
  _f = _e.next();
5135
5258
  return [3 /*break*/, 15];
5136
5259
  case 27: return [3 /*break*/, 30];
5137
5260
  case 28:
5138
- e_53_1 = _x.sent();
5139
- e_53 = { error: e_53_1 };
5261
+ e_52_1 = _x.sent();
5262
+ e_52 = { error: e_52_1 };
5140
5263
  return [3 /*break*/, 30];
5141
5264
  case 29:
5142
5265
  try {
5143
5266
  if (_f && !_f.done && (_p = _e.return)) _p.call(_e);
5144
5267
  }
5145
- finally { if (e_53) throw e_53.error; }
5268
+ finally { if (e_52) throw e_52.error; }
5146
5269
  return [7 /*endfinally*/];
5147
5270
  case 30:
5148
5271
  parts = {};
@@ -5159,8 +5282,8 @@ var XlsxPlugin = /** @class */ (function (_super) {
5159
5282
  };
5160
5283
  XlsxPlugin.prototype.getConditionalFormatting = function () {
5161
5284
  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;
5285
+ var conditionalFormatting, _a, _b, element, _c, _d, _e, _f, e_53_1;
5286
+ var e_53, _g;
5164
5287
  return __generator(this, function (_h) {
5165
5288
  switch (_h.label) {
5166
5289
  case 0:
@@ -5185,14 +5308,14 @@ var XlsxPlugin = /** @class */ (function (_super) {
5185
5308
  return [3 /*break*/, 2];
5186
5309
  case 5: return [3 /*break*/, 8];
5187
5310
  case 6:
5188
- e_54_1 = _h.sent();
5189
- e_54 = { error: e_54_1 };
5311
+ e_53_1 = _h.sent();
5312
+ e_53 = { error: e_53_1 };
5190
5313
  return [3 /*break*/, 8];
5191
5314
  case 7:
5192
5315
  try {
5193
5316
  if (_b && !_b.done && (_g = _a.return)) _g.call(_a);
5194
5317
  }
5195
- finally { if (e_54) throw e_54.error; }
5318
+ finally { if (e_53) throw e_53.error; }
5196
5319
  return [7 /*endfinally*/];
5197
5320
  case 8: return [2 /*return*/, conditionalFormatting];
5198
5321
  }
@@ -5232,8 +5355,8 @@ var XlsxPlugin = /** @class */ (function (_super) {
5232
5355
  };
5233
5356
  XlsxPlugin.prototype.getDataValidations = function () {
5234
5357
  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;
5358
+ var dataValidations, _a, _b, element, _c, _d, _e, _f, e_54_1;
5359
+ var e_54, _g;
5237
5360
  return __generator(this, function (_h) {
5238
5361
  switch (_h.label) {
5239
5362
  case 0:
@@ -5258,14 +5381,14 @@ var XlsxPlugin = /** @class */ (function (_super) {
5258
5381
  return [3 /*break*/, 2];
5259
5382
  case 5: return [3 /*break*/, 8];
5260
5383
  case 6:
5261
- e_55_1 = _h.sent();
5262
- e_55 = { error: e_55_1 };
5384
+ e_54_1 = _h.sent();
5385
+ e_54 = { error: e_54_1 };
5263
5386
  return [3 /*break*/, 8];
5264
5387
  case 7:
5265
5388
  try {
5266
5389
  if (_b && !_b.done && (_g = _a.return)) _g.call(_a);
5267
5390
  }
5268
- finally { if (e_55) throw e_55.error; }
5391
+ finally { if (e_54) throw e_54.error; }
5269
5392
  return [7 /*endfinally*/];
5270
5393
  case 8: return [2 /*return*/, dataValidations];
5271
5394
  }
@@ -5305,6 +5428,19 @@ var XlsxPlugin = /** @class */ (function (_super) {
5305
5428
  });
5306
5429
  });
5307
5430
  };
5431
+ /**
5432
+ * Allow-edit ranges (`<protectedRanges>/<protectedRange>`) in the model the
5433
+ * `protect-range` command writes: `protectedRangeId` = the source `name`,
5434
+ * `range` = the first `sqref` area plus `sheetId`. Available after
5435
+ * `getSheets()`; sheet-level `<sheetProtection>` rides `Sheet.sheetProtection`.
5436
+ */
5437
+ XlsxPlugin.prototype.getProtectedRanges = function (sheetId) {
5438
+ var _a;
5439
+ if (sheetId !== undefined) {
5440
+ return (_a = this.protectedRangesBySheet.get(sheetId)) !== null && _a !== void 0 ? _a : [];
5441
+ }
5442
+ return Array.from(this.protectedRangesBySheet.values()).flat();
5443
+ };
5308
5444
  XlsxPlugin.prototype.getNamedRanges = function () {
5309
5445
  return this.namedRanges;
5310
5446
  };
@@ -5317,7 +5453,7 @@ var XlsxPlugin = /** @class */ (function (_super) {
5317
5453
  XlsxPlugin.prototype.getProperties = function () {
5318
5454
  return __awaiter(this, void 0, void 0, function () {
5319
5455
  var props, tryRead, coreXml, parsed, root, textOf_1, appXml, parsed, root, textOf, _a, _b, key;
5320
- var e_56, _c;
5456
+ var e_55, _c;
5321
5457
  var _this = this;
5322
5458
  var _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q;
5323
5459
  return __generator(this, function (_r) {
@@ -5401,12 +5537,12 @@ var XlsxPlugin = /** @class */ (function (_super) {
5401
5537
  }
5402
5538
  }
5403
5539
  }
5404
- catch (e_56_1) { e_56 = { error: e_56_1 }; }
5540
+ catch (e_55_1) { e_55 = { error: e_55_1 }; }
5405
5541
  finally {
5406
5542
  try {
5407
5543
  if (_b && !_b.done && (_c = _a.return)) _c.call(_a);
5408
5544
  }
5409
- finally { if (e_56) throw e_56.error; }
5545
+ finally { if (e_55) throw e_55.error; }
5410
5546
  }
5411
5547
  return [2 /*return*/, Object.keys(props).length ? props : undefined];
5412
5548
  }
@@ -5422,8 +5558,8 @@ var XlsxPlugin = /** @class */ (function (_super) {
5422
5558
  };
5423
5559
  XlsxPlugin.prototype.getSlicersForWorkbook = function () {
5424
5560
  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;
5561
+ 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_56_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_57_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_58_1, slicer, err_7, e_59_1, err_8;
5562
+ var e_60, _c, e_56, _d, e_61, _e, e_57, _f, e_62, _g, e_59, _h, e_58, _j, e_63, _k, e_64, _l;
5427
5563
  var _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z;
5428
5564
  return __generator(this, function (_0) {
5429
5565
  switch (_0.label) {
@@ -5472,12 +5608,12 @@ var XlsxPlugin = /** @class */ (function (_super) {
5472
5608
  addSlicerPath(this.resolveSheetPath(target));
5473
5609
  }
5474
5610
  }
5475
- catch (e_61_1) { e_61 = { error: e_61_1 }; }
5611
+ catch (e_60_1) { e_60 = { error: e_60_1 }; }
5476
5612
  finally {
5477
5613
  try {
5478
5614
  if (slicerRels_1_1 && !slicerRels_1_1.done && (_c = slicerRels_1.return)) _c.call(slicerRels_1);
5479
5615
  }
5480
- finally { if (e_61) throw e_61.error; }
5616
+ finally { if (e_60) throw e_60.error; }
5481
5617
  }
5482
5618
  workSheets = this._getSheets();
5483
5619
  sheetRelContext = new Map();
@@ -5524,7 +5660,7 @@ var XlsxPlugin = /** @class */ (function (_super) {
5524
5660
  "http://schemas.microsoft.com/office/2007/relationships/slicer";
5525
5661
  });
5526
5662
  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()) {
5663
+ for (sheetSlicerRels_1 = (e_61 = void 0, __values(sheetSlicerRels)), sheetSlicerRels_1_1 = sheetSlicerRels_1.next(); !sheetSlicerRels_1_1.done; sheetSlicerRels_1_1 = sheetSlicerRels_1.next()) {
5528
5664
  rel = sheetSlicerRels_1_1.value;
5529
5665
  target = (_r = rel === null || rel === void 0 ? void 0 : rel.a$) === null || _r === void 0 ? void 0 : _r.Target;
5530
5666
  if (!target)
@@ -5532,12 +5668,12 @@ var XlsxPlugin = /** @class */ (function (_super) {
5532
5668
  addSlicerPath(this.resolveRelationshipTarget(sheetRelPath, target), currentSheetId);
5533
5669
  }
5534
5670
  }
5535
- catch (e_62_1) { e_62 = { error: e_62_1 }; }
5671
+ catch (e_61_1) { e_61 = { error: e_61_1 }; }
5536
5672
  finally {
5537
5673
  try {
5538
5674
  if (sheetSlicerRels_1_1 && !sheetSlicerRels_1_1.done && (_e = sheetSlicerRels_1.return)) _e.call(sheetSlicerRels_1);
5539
5675
  }
5540
- finally { if (e_62) throw e_62.error; }
5676
+ finally { if (e_61) throw e_61.error; }
5541
5677
  }
5542
5678
  return [3 /*break*/, 8];
5543
5679
  case 7:
@@ -5549,14 +5685,14 @@ var XlsxPlugin = /** @class */ (function (_super) {
5549
5685
  return [3 /*break*/, 4];
5550
5686
  case 9: return [3 /*break*/, 12];
5551
5687
  case 10:
5552
- e_57_1 = _0.sent();
5553
- e_57 = { error: e_57_1 };
5688
+ e_56_1 = _0.sent();
5689
+ e_56 = { error: e_56_1 };
5554
5690
  return [3 /*break*/, 12];
5555
5691
  case 11:
5556
5692
  try {
5557
5693
  if (workSheets_7_1 && !workSheets_7_1.done && (_d = workSheets_7.return)) _d.call(workSheets_7);
5558
5694
  }
5559
- finally { if (e_57) throw e_57.error; }
5695
+ finally { if (e_56) throw e_56.error; }
5560
5696
  return [7 /*endfinally*/];
5561
5697
  case 12:
5562
5698
  if (slicerPathToSheetIds_2.size === 0) {
@@ -5602,7 +5738,7 @@ var XlsxPlugin = /** @class */ (function (_super) {
5602
5738
  ]);
5603
5739
  extArray = toArray_1(extList);
5604
5740
  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()) {
5741
+ for (extArray_2 = (e_62 = void 0, __values(extArray)), extArray_2_1 = extArray_2.next(); !extArray_2_1.done; extArray_2_1 = extArray_2.next()) {
5606
5742
  ext = extArray_2_1.value;
5607
5743
  tableSlicerCache = getWithFallback(ext, [
5608
5744
  "x15:tableSlicerCache",
@@ -5620,12 +5756,12 @@ var XlsxPlugin = /** @class */ (function (_super) {
5620
5756
  }
5621
5757
  }
5622
5758
  }
5623
- catch (e_63_1) { e_63 = { error: e_63_1 }; }
5759
+ catch (e_62_1) { e_62 = { error: e_62_1 }; }
5624
5760
  finally {
5625
5761
  try {
5626
5762
  if (extArray_2_1 && !extArray_2_1.done && (_g = extArray_2.return)) _g.call(extArray_2);
5627
5763
  }
5628
- finally { if (e_63) throw e_63.error; }
5764
+ finally { if (e_62) throw e_62.error; }
5629
5765
  }
5630
5766
  return [3 /*break*/, 18];
5631
5767
  case 17:
@@ -5637,14 +5773,14 @@ var XlsxPlugin = /** @class */ (function (_super) {
5637
5773
  return [3 /*break*/, 14];
5638
5774
  case 19: return [3 /*break*/, 22];
5639
5775
  case 20:
5640
- e_58_1 = _0.sent();
5641
- e_58 = { error: e_58_1 };
5776
+ e_57_1 = _0.sent();
5777
+ e_57 = { error: e_57_1 };
5642
5778
  return [3 /*break*/, 22];
5643
5779
  case 21:
5644
5780
  try {
5645
5781
  if (slicerCacheRels_1_1 && !slicerCacheRels_1_1.done && (_f = slicerCacheRels_1.return)) _f.call(slicerCacheRels_1);
5646
5782
  }
5647
- finally { if (e_58) throw e_58.error; }
5783
+ finally { if (e_57) throw e_57.error; }
5648
5784
  return [7 /*endfinally*/];
5649
5785
  case 22:
5650
5786
  _0.trys.push([22, 38, 39, 40]);
@@ -5687,7 +5823,7 @@ var XlsxPlugin = /** @class */ (function (_super) {
5687
5823
  _0.label = 26;
5688
5824
  case 26:
5689
5825
  _0.trys.push([26, 32, 33, 34]);
5690
- workSheets_8 = (e_59 = void 0, __values(workSheets)), workSheets_8_1 = workSheets_8.next();
5826
+ workSheets_8 = (e_58 = void 0, __values(workSheets)), workSheets_8_1 = workSheets_8.next();
5691
5827
  _0.label = 27;
5692
5828
  case 27:
5693
5829
  if (!!workSheets_8_1.done) return [3 /*break*/, 31];
@@ -5713,7 +5849,7 @@ var XlsxPlugin = /** @class */ (function (_super) {
5713
5849
  anchors = __spreadArray(__spreadArray([], __read(toArray_1(wsDr["xdr:oneCellAnchor"] || wsDr["oneCellAnchor"])), false), __read(toArray_1(wsDr["xdr:twoCellAnchor"] || wsDr["twoCellAnchor"])), false);
5714
5850
  firstSlicerAnchor = null;
5715
5851
  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()) {
5852
+ for (anchors_2 = (e_63 = void 0, __values(anchors)), anchors_2_1 = anchors_2.next(); !anchors_2_1.done; anchors_2_1 = anchors_2.next()) {
5717
5853
  anchor = anchors_2_1.value;
5718
5854
  alternateContent = getWithFallback(anchor, [
5719
5855
  "mc:AlternateContent",
@@ -5730,7 +5866,7 @@ var XlsxPlugin = /** @class */ (function (_super) {
5730
5866
  ]));
5731
5867
  })), false);
5732
5868
  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()) {
5869
+ for (graphicFrames_1 = (e_64 = void 0, __values(graphicFrames)), graphicFrames_1_1 = graphicFrames_1.next(); !graphicFrames_1_1.done; graphicFrames_1_1 = graphicFrames_1.next()) {
5734
5870
  graphicFrame = graphicFrames_1_1.value;
5735
5871
  graphicData = getWithFallback(graphicFrame, [
5736
5872
  "a:graphic.a:graphicData",
@@ -5763,23 +5899,23 @@ var XlsxPlugin = /** @class */ (function (_super) {
5763
5899
  }
5764
5900
  }
5765
5901
  }
5766
- catch (e_65_1) { e_65 = { error: e_65_1 }; }
5902
+ catch (e_64_1) { e_64 = { error: e_64_1 }; }
5767
5903
  finally {
5768
5904
  try {
5769
5905
  if (graphicFrames_1_1 && !graphicFrames_1_1.done && (_l = graphicFrames_1.return)) _l.call(graphicFrames_1);
5770
5906
  }
5771
- finally { if (e_65) throw e_65.error; }
5907
+ finally { if (e_64) throw e_64.error; }
5772
5908
  }
5773
5909
  if (position)
5774
5910
  break;
5775
5911
  }
5776
5912
  }
5777
- catch (e_64_1) { e_64 = { error: e_64_1 }; }
5913
+ catch (e_63_1) { e_63 = { error: e_63_1 }; }
5778
5914
  finally {
5779
5915
  try {
5780
5916
  if (anchors_2_1 && !anchors_2_1.done && (_k = anchors_2.return)) _k.call(anchors_2);
5781
5917
  }
5782
- finally { if (e_64) throw e_64.error; }
5918
+ finally { if (e_63) throw e_63.error; }
5783
5919
  }
5784
5920
  if (!position && firstSlicerAnchor) {
5785
5921
  position = this.extractSlicerPosition(firstSlicerAnchor, currentSheetId);
@@ -5793,14 +5929,14 @@ var XlsxPlugin = /** @class */ (function (_super) {
5793
5929
  return [3 /*break*/, 27];
5794
5930
  case 31: return [3 /*break*/, 34];
5795
5931
  case 32:
5796
- e_59_1 = _0.sent();
5797
- e_59 = { error: e_59_1 };
5932
+ e_58_1 = _0.sent();
5933
+ e_58 = { error: e_58_1 };
5798
5934
  return [3 /*break*/, 34];
5799
5935
  case 33:
5800
5936
  try {
5801
5937
  if (workSheets_8_1 && !workSheets_8_1.done && (_j = workSheets_8.return)) _j.call(workSheets_8);
5802
5938
  }
5803
- finally { if (e_59) throw e_59.error; }
5939
+ finally { if (e_58) throw e_58.error; }
5804
5940
  return [7 /*endfinally*/];
5805
5941
  case 34:
5806
5942
  // Create default position if we couldn't find one
@@ -5842,14 +5978,14 @@ var XlsxPlugin = /** @class */ (function (_super) {
5842
5978
  return [3 /*break*/, 23];
5843
5979
  case 37: return [3 /*break*/, 40];
5844
5980
  case 38:
5845
- e_60_1 = _0.sent();
5846
- e_60 = { error: e_60_1 };
5981
+ e_59_1 = _0.sent();
5982
+ e_59 = { error: e_59_1 };
5847
5983
  return [3 /*break*/, 40];
5848
5984
  case 39:
5849
5985
  try {
5850
5986
  if (slicerPathToSheetIds_1_1 && !slicerPathToSheetIds_1_1.done && (_h = slicerPathToSheetIds_1.return)) _h.call(slicerPathToSheetIds_1);
5851
5987
  }
5852
- finally { if (e_60) throw e_60.error; }
5988
+ finally { if (e_59) throw e_59.error; }
5853
5989
  return [7 /*endfinally*/];
5854
5990
  case 40: return [3 /*break*/, 42];
5855
5991
  case 41:
@@ -6054,3 +6190,200 @@ var XlsxPlugin = /** @class */ (function (_super) {
6054
6190
  return XlsxPlugin;
6055
6191
  }(BaseWorkbookPlugin));
6056
6192
  export { XlsxPlugin };
6193
+ /** `CT_SheetProtection` boolean attributes, in OOXML order (camelCase = model key). */
6194
+ var SHEET_PROTECTION_FLAGS = [
6195
+ "sheet",
6196
+ "objects",
6197
+ "scenarios",
6198
+ "formatCells",
6199
+ "formatColumns",
6200
+ "formatRows",
6201
+ "insertColumns",
6202
+ "insertRows",
6203
+ "insertHyperlinks",
6204
+ "deleteColumns",
6205
+ "deleteRows",
6206
+ "selectLockedCells",
6207
+ "sort",
6208
+ "autoFilter",
6209
+ "pivotTables",
6210
+ "selectUnlockedCells",
6211
+ ];
6212
+ /**
6213
+ * `<sheetProtection …>` attributes → `Sheet.sheetProtection`. Only attributes
6214
+ * present in the source are set (`"1"|"true"` → true, anything else → false),
6215
+ * so an explicit flag round-trips without inventing schema defaults; the
6216
+ * password hash (legacy `password` or the agile quartet) rides along verbatim.
6217
+ * Mirrors `rnc-import`'s `read_sheet_protection`.
6218
+ */
6219
+ var readSheetProtectionAttrs = function (attrs) {
6220
+ var e_65, _a;
6221
+ var protection = {};
6222
+ try {
6223
+ 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()) {
6224
+ var flag = SHEET_PROTECTION_FLAGS_1_1.value;
6225
+ var value = attrs[flag];
6226
+ if (value !== undefined) {
6227
+ protection[flag] = value === "1" || value === "true";
6228
+ }
6229
+ }
6230
+ }
6231
+ catch (e_65_1) { e_65 = { error: e_65_1 }; }
6232
+ finally {
6233
+ try {
6234
+ if (SHEET_PROTECTION_FLAGS_1_1 && !SHEET_PROTECTION_FLAGS_1_1.done && (_a = SHEET_PROTECTION_FLAGS_1.return)) _a.call(SHEET_PROTECTION_FLAGS_1);
6235
+ }
6236
+ finally { if (e_65) throw e_65.error; }
6237
+ }
6238
+ if (attrs.password)
6239
+ protection.password = attrs.password;
6240
+ if (attrs.algorithmName)
6241
+ protection.algorithmName = attrs.algorithmName;
6242
+ if (attrs.hashValue)
6243
+ protection.hashValue = attrs.hashValue;
6244
+ if (attrs.saltValue)
6245
+ protection.saltValue = attrs.saltValue;
6246
+ if (attrs.spinCount !== undefined) {
6247
+ var spinCount = parseInt(attrs.spinCount, 10);
6248
+ if (Number.isFinite(spinCount))
6249
+ protection.spinCount = spinCount;
6250
+ }
6251
+ return protection;
6252
+ };
6253
+ /**
6254
+ * `<protectedRange sqref name>` entries → `ProtectedRange[]` for one sheet. The
6255
+ * `name` becomes the `protectedRangeId` so it keys the stored facet and
6256
+ * re-exports under the same name; only the first `sqref` area is modeled
6257
+ * (Excel writes one per element in practice).
6258
+ */
6259
+ var protectedRangesFromEntries = function (sheetId, entries) {
6260
+ var e_66, _a;
6261
+ var ranges = [];
6262
+ try {
6263
+ for (var entries_1 = __values(entries), entries_1_1 = entries_1.next(); !entries_1_1.done; entries_1_1 = entries_1.next()) {
6264
+ var entry = entries_1_1.value;
6265
+ var first = entry.sqref.trim().split(/\s+/)[0];
6266
+ var range = first ? getRangeFromAddressRef(first) : undefined;
6267
+ if (!range)
6268
+ continue;
6269
+ var protectedRange = {
6270
+ range: __assign({ sheetId: sheetId }, range),
6271
+ };
6272
+ if (entry.name)
6273
+ protectedRange.protectedRangeId = entry.name;
6274
+ if (entry.securityDescriptor) {
6275
+ protectedRange.securityDescriptor = entry.securityDescriptor;
6276
+ }
6277
+ ranges.push(protectedRange);
6278
+ }
6279
+ }
6280
+ catch (e_66_1) { e_66 = { error: e_66_1 }; }
6281
+ finally {
6282
+ try {
6283
+ if (entries_1_1 && !entries_1_1.done && (_a = entries_1.return)) _a.call(entries_1);
6284
+ }
6285
+ finally { if (e_66) throw e_66.error; }
6286
+ }
6287
+ return ranges;
6288
+ };
6289
+ var isXmlTrue = function (value) {
6290
+ return value === "1" || value === "true";
6291
+ };
6292
+ /** `"1"|"true"|"0"|"false"` → boolean; absent stays undefined. */
6293
+ var xmlBoolOpt = function (value) {
6294
+ return value === undefined ? undefined : isXmlTrue(value);
6295
+ };
6296
+ var xmlIntOpt = function (value) {
6297
+ if (value === undefined)
6298
+ return undefined;
6299
+ var n = parseInt(value, 10);
6300
+ return Number.isFinite(n) ? n : undefined;
6301
+ };
6302
+ var xmlFloatOpt = function (value) {
6303
+ if (value === undefined)
6304
+ return undefined;
6305
+ var n = parseFloat(value);
6306
+ return Number.isFinite(n) ? n : undefined;
6307
+ };
6308
+ var stripUndefined = function (value) {
6309
+ var e_67, _a;
6310
+ try {
6311
+ for (var _b = __values(Object.keys(value)), _c = _b.next(); !_c.done; _c = _b.next()) {
6312
+ var key = _c.value;
6313
+ if (value[key] === undefined)
6314
+ delete value[key];
6315
+ }
6316
+ }
6317
+ catch (e_67_1) { e_67 = { error: e_67_1 }; }
6318
+ finally {
6319
+ try {
6320
+ if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
6321
+ }
6322
+ finally { if (e_67) throw e_67.error; }
6323
+ }
6324
+ return value;
6325
+ };
6326
+ /** `<headerFooter>` children whose text is a header/footer code string. */
6327
+ var HEADER_FOOTER_TEXT_ELEMENTS = [
6328
+ "oddHeader",
6329
+ "oddFooter",
6330
+ "evenHeader",
6331
+ "evenFooter",
6332
+ "firstHeader",
6333
+ "firstFooter",
6334
+ ];
6335
+ var isHeaderFooterTextKey = function (name) {
6336
+ return HEADER_FOOTER_TEXT_ELEMENTS.includes(name);
6337
+ };
6338
+ /**
6339
+ * `<pageSetup …>` → `PageSetup` (present attributes only; `fitToPage` is
6340
+ * filled from `<sheetPr><pageSetUpPr>` by the caller). Mirrors
6341
+ * `rnc-import`'s `read_page_setup`.
6342
+ */
6343
+ var readPageSetupAttrs = function (attrs) {
6344
+ var orientation = attrs.orientation;
6345
+ var pageOrder = attrs.pageOrder;
6346
+ return stripUndefined({
6347
+ orientation: orientation === "landscape" || orientation === "portrait"
6348
+ ? orientation
6349
+ : undefined,
6350
+ paperSize: xmlIntOpt(attrs.paperSize),
6351
+ scale: xmlIntOpt(attrs.scale),
6352
+ fitToWidth: xmlIntOpt(attrs.fitToWidth),
6353
+ fitToHeight: xmlIntOpt(attrs.fitToHeight),
6354
+ firstPageNumber: xmlIntOpt(attrs.firstPageNumber),
6355
+ useFirstPageNumber: xmlBoolOpt(attrs.useFirstPageNumber),
6356
+ pageOrder: pageOrder === "overThenDown" || pageOrder === "downThenOver"
6357
+ ? pageOrder
6358
+ : undefined,
6359
+ blackAndWhite: xmlBoolOpt(attrs.blackAndWhite),
6360
+ draft: xmlBoolOpt(attrs.draft),
6361
+ });
6362
+ };
6363
+ var readPageMarginsAttrs = function (attrs) {
6364
+ return stripUndefined({
6365
+ left: xmlFloatOpt(attrs.left),
6366
+ right: xmlFloatOpt(attrs.right),
6367
+ top: xmlFloatOpt(attrs.top),
6368
+ bottom: xmlFloatOpt(attrs.bottom),
6369
+ header: xmlFloatOpt(attrs.header),
6370
+ footer: xmlFloatOpt(attrs.footer),
6371
+ });
6372
+ };
6373
+ var readPrintOptionsAttrs = function (attrs) {
6374
+ return stripUndefined({
6375
+ gridLines: xmlBoolOpt(attrs.gridLines),
6376
+ headings: xmlBoolOpt(attrs.headings),
6377
+ horizontalCentered: xmlBoolOpt(attrs.horizontalCentered),
6378
+ verticalCentered: xmlBoolOpt(attrs.verticalCentered),
6379
+ });
6380
+ };
6381
+ /** `<headerFooter …>` attributes; the child texts stream in via `ontext`. */
6382
+ var readHeaderFooterAttrs = function (attrs) {
6383
+ return stripUndefined({
6384
+ differentOddEven: xmlBoolOpt(attrs.differentOddEven),
6385
+ differentFirst: xmlBoolOpt(attrs.differentFirst),
6386
+ scaleWithDoc: xmlBoolOpt(attrs.scaleWithDoc),
6387
+ alignWithMargins: xmlBoolOpt(attrs.alignWithMargins),
6388
+ });
6389
+ };