ooxml-core 1.8.2 → 1.8.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.
@@ -1006,12 +1006,13 @@ function formatRange(range) {
1006
1006
  function quoteSheetName(name) {
1007
1007
  return /^[A-Za-z_][A-Za-z0-9_.]*$/.test(name) && !parseAddress(name) ? name : `'${name.replace(/'/g, "''")}'`;
1008
1008
  }
1009
- var MAX_ROW, MAX_COL, formatAddress, cellKey;
1009
+ var MAX_ROW, MAX_COL, formatAddress, rangeSize, cellKey;
1010
1010
  var init_address = __esm({
1011
1011
  "xlsx/address.ts"() {
1012
1012
  MAX_ROW = 1048575;
1013
1013
  MAX_COL = 16383;
1014
1014
  formatAddress = (address2) => `${columnLabel(address2.col)}${address2.row + 1}`;
1015
+ rangeSize = (range) => (range.end.row - range.start.row + 1) * (range.end.col - range.start.col + 1);
1015
1016
  cellKey = (row2, col) => row2 * (MAX_COL + 1) + col;
1016
1017
  }
1017
1018
  });
@@ -7292,10 +7293,11 @@ function usedRange(sheet) {
7292
7293
  if (maxRow < 0) return void 0;
7293
7294
  return { start: { row: minRow, col: minCol }, end: { row: maxRow, col: maxCol } };
7294
7295
  }
7295
- var getCell;
7296
+ var getCell, getValue;
7296
7297
  var init_cells = __esm({
7297
7298
  "xlsx/cells.ts"() {
7298
7299
  getCell = (sheet, row2, col) => sheet.rows.get(row2)?.get(col);
7300
+ getValue = (sheet, row2, col) => getCell(sheet, row2, col)?.value ?? null;
7299
7301
  }
7300
7302
  });
7301
7303
 
@@ -18983,6 +18985,76 @@ var init_sheet_data = __esm({
18983
18985
  }
18984
18986
  });
18985
18987
 
18988
+ // xlsx/layout/sparkline-data.ts
18989
+ function resolveSparklineRange(workbook, sheet, formula) {
18990
+ const ref = formula.trim().replace(/^=/, "");
18991
+ const bang = ref.lastIndexOf("!");
18992
+ let target = sheet;
18993
+ if (bang >= 0) {
18994
+ const raw2 = ref.slice(0, bang);
18995
+ const name = /^'.*'$/.test(raw2) ? raw2.slice(1, -1).replace(/''/g, "'") : raw2;
18996
+ target = sheetByName(workbook, name);
18997
+ }
18998
+ const range = parseRange(ref.slice(bang + 1).replace(/\$/g, ""));
18999
+ return target && range ? { sheet: target, range: normalizeRange(range) } : void 0;
19000
+ }
19001
+ var init_sparkline_data = __esm({
19002
+ "xlsx/layout/sparkline-data.ts"() {
19003
+ init_address();
19004
+ init_workbook();
19005
+ }
19006
+ });
19007
+
19008
+ // xlsx/write/chart-cache.ts
19009
+ function referenceValues(workbook, sheet, ref, maxCells = MAX_CHART_CACHE_CELLS) {
19010
+ if (!ref) return void 0;
19011
+ const target = resolveSparklineRange(workbook, sheet, ref);
19012
+ if (!target) return void 0;
19013
+ const { range } = target;
19014
+ const count2 = rangeSize(range);
19015
+ if (!Number.isSafeInteger(count2) || count2 < 1 || count2 > maxCells || range.end.row > MAX_ROW || range.end.col > MAX_COL)
19016
+ return void 0;
19017
+ const values2 = [];
19018
+ for (let row2 = range.start.row; row2 <= range.end.row; row2++)
19019
+ for (let col = range.start.col; col <= range.end.col; col++)
19020
+ values2.push(getValue(target.sheet, row2, col));
19021
+ return values2;
19022
+ }
19023
+ function categoryValue(value) {
19024
+ if (value === null) return "";
19025
+ if (typeof value === "boolean") return value ? "TRUE" : "FALSE";
19026
+ if (typeof value === "object") return value.error;
19027
+ if (typeof value === "number" && !Number.isFinite(value)) return "";
19028
+ return value;
19029
+ }
19030
+ function chartWithCurrentCaches(workbook, sheet, chart) {
19031
+ return {
19032
+ ...chart,
19033
+ series: chart.series.map((series) => {
19034
+ const values2 = referenceValues(workbook, sheet, series.valuesRef);
19035
+ const categories = referenceValues(workbook, sheet, series.categoriesRef);
19036
+ const name = referenceValues(workbook, sheet, series.nameRef, 1);
19037
+ return {
19038
+ ...series,
19039
+ ...name === void 0 ? {} : { name: String(categoryValue(name[0] ?? null)) },
19040
+ values: values2?.map(
19041
+ (value) => typeof value === "number" && Number.isFinite(value) ? value : null
19042
+ ) ?? series.values,
19043
+ categories: categories?.map(categoryValue) ?? series.categories
19044
+ };
19045
+ })
19046
+ };
19047
+ }
19048
+ var MAX_CHART_CACHE_CELLS;
19049
+ var init_chart_cache = __esm({
19050
+ "xlsx/write/chart-cache.ts"() {
19051
+ init_address();
19052
+ init_cells();
19053
+ init_sparkline_data();
19054
+ MAX_CHART_CACHE_CELLS = 1e4;
19055
+ }
19056
+ });
19057
+
18986
19058
  // xlsx/write/vml-ids.ts
18987
19059
  function vmlIdmapBlocks(xml) {
18988
19060
  const blocks = [];
@@ -19474,7 +19546,10 @@ function writeSheetDrawing(ctx, sheet, partName, rels, sourceDrawing) {
19474
19546
  }
19475
19547
  }
19476
19548
  const target = sourceDrawing && !writer.has(sourceDrawing) ? sourceDrawing : writer.uniqueName((n) => `xl/drawings/drawing${n}.xml`, ctx.reserved);
19477
- if (!writeDrawing(writer, target, sheet.drawings, sourceDrawing)) return "";
19549
+ const drawings = sheet.drawings.map(
19550
+ (object) => object.kind === "chart" && (!object.partName || !source2?.has(object.partName)) ? chartWithCurrentCaches(ctx.workbook, sheet, object) : object
19551
+ );
19552
+ if (!writeDrawing(writer, target, drawings, sourceDrawing)) return "";
19478
19553
  return `<drawing r:id="${rels.add(RELATIONSHIP_TYPES.drawing, relativeTarget(partName, target))}"/>`;
19479
19554
  }
19480
19555
  var init_sheet_parts = __esm({
@@ -19484,6 +19559,7 @@ var init_sheet_parts = __esm({
19484
19559
  init_drawing3();
19485
19560
  init_package2();
19486
19561
  init_tables();
19562
+ init_chart_cache();
19487
19563
  init_comments2();
19488
19564
  init_drawing();
19489
19565
  init_snapshot();
@@ -979,12 +979,13 @@ function formatRange(range) {
979
979
  function quoteSheetName(name) {
980
980
  return /^[A-Za-z_][A-Za-z0-9_.]*$/.test(name) && !parseAddress(name) ? name : `'${name.replace(/'/g, "''")}'`;
981
981
  }
982
- var MAX_ROW, MAX_COL, formatAddress, cellKey;
982
+ var MAX_ROW, MAX_COL, formatAddress, rangeSize, cellKey;
983
983
  var init_address = __esm({
984
984
  "xlsx/address.ts"() {
985
985
  MAX_ROW = 1048575;
986
986
  MAX_COL = 16383;
987
987
  formatAddress = (address2) => `${columnLabel(address2.col)}${address2.row + 1}`;
988
+ rangeSize = (range) => (range.end.row - range.start.row + 1) * (range.end.col - range.start.col + 1);
988
989
  cellKey = (row2, col) => row2 * (MAX_COL + 1) + col;
989
990
  }
990
991
  });
@@ -7265,10 +7266,11 @@ function usedRange(sheet) {
7265
7266
  if (maxRow < 0) return void 0;
7266
7267
  return { start: { row: minRow, col: minCol }, end: { row: maxRow, col: maxCol } };
7267
7268
  }
7268
- var getCell;
7269
+ var getCell, getValue;
7269
7270
  var init_cells = __esm({
7270
7271
  "xlsx/cells.ts"() {
7271
7272
  getCell = (sheet, row2, col) => sheet.rows.get(row2)?.get(col);
7273
+ getValue = (sheet, row2, col) => getCell(sheet, row2, col)?.value ?? null;
7272
7274
  }
7273
7275
  });
7274
7276
 
@@ -18956,6 +18958,76 @@ var init_sheet_data = __esm({
18956
18958
  }
18957
18959
  });
18958
18960
 
18961
+ // xlsx/layout/sparkline-data.ts
18962
+ function resolveSparklineRange(workbook, sheet, formula) {
18963
+ const ref = formula.trim().replace(/^=/, "");
18964
+ const bang = ref.lastIndexOf("!");
18965
+ let target = sheet;
18966
+ if (bang >= 0) {
18967
+ const raw2 = ref.slice(0, bang);
18968
+ const name = /^'.*'$/.test(raw2) ? raw2.slice(1, -1).replace(/''/g, "'") : raw2;
18969
+ target = sheetByName(workbook, name);
18970
+ }
18971
+ const range = parseRange(ref.slice(bang + 1).replace(/\$/g, ""));
18972
+ return target && range ? { sheet: target, range: normalizeRange(range) } : void 0;
18973
+ }
18974
+ var init_sparkline_data = __esm({
18975
+ "xlsx/layout/sparkline-data.ts"() {
18976
+ init_address();
18977
+ init_workbook();
18978
+ }
18979
+ });
18980
+
18981
+ // xlsx/write/chart-cache.ts
18982
+ function referenceValues(workbook, sheet, ref, maxCells = MAX_CHART_CACHE_CELLS) {
18983
+ if (!ref) return void 0;
18984
+ const target = resolveSparklineRange(workbook, sheet, ref);
18985
+ if (!target) return void 0;
18986
+ const { range } = target;
18987
+ const count2 = rangeSize(range);
18988
+ if (!Number.isSafeInteger(count2) || count2 < 1 || count2 > maxCells || range.end.row > MAX_ROW || range.end.col > MAX_COL)
18989
+ return void 0;
18990
+ const values2 = [];
18991
+ for (let row2 = range.start.row; row2 <= range.end.row; row2++)
18992
+ for (let col = range.start.col; col <= range.end.col; col++)
18993
+ values2.push(getValue(target.sheet, row2, col));
18994
+ return values2;
18995
+ }
18996
+ function categoryValue(value) {
18997
+ if (value === null) return "";
18998
+ if (typeof value === "boolean") return value ? "TRUE" : "FALSE";
18999
+ if (typeof value === "object") return value.error;
19000
+ if (typeof value === "number" && !Number.isFinite(value)) return "";
19001
+ return value;
19002
+ }
19003
+ function chartWithCurrentCaches(workbook, sheet, chart) {
19004
+ return {
19005
+ ...chart,
19006
+ series: chart.series.map((series) => {
19007
+ const values2 = referenceValues(workbook, sheet, series.valuesRef);
19008
+ const categories = referenceValues(workbook, sheet, series.categoriesRef);
19009
+ const name = referenceValues(workbook, sheet, series.nameRef, 1);
19010
+ return {
19011
+ ...series,
19012
+ ...name === void 0 ? {} : { name: String(categoryValue(name[0] ?? null)) },
19013
+ values: values2?.map(
19014
+ (value) => typeof value === "number" && Number.isFinite(value) ? value : null
19015
+ ) ?? series.values,
19016
+ categories: categories?.map(categoryValue) ?? series.categories
19017
+ };
19018
+ })
19019
+ };
19020
+ }
19021
+ var MAX_CHART_CACHE_CELLS;
19022
+ var init_chart_cache = __esm({
19023
+ "xlsx/write/chart-cache.ts"() {
19024
+ init_address();
19025
+ init_cells();
19026
+ init_sparkline_data();
19027
+ MAX_CHART_CACHE_CELLS = 1e4;
19028
+ }
19029
+ });
19030
+
18959
19031
  // xlsx/write/vml-ids.ts
18960
19032
  function vmlIdmapBlocks(xml) {
18961
19033
  const blocks = [];
@@ -19447,7 +19519,10 @@ function writeSheetDrawing(ctx, sheet, partName, rels, sourceDrawing) {
19447
19519
  }
19448
19520
  }
19449
19521
  const target = sourceDrawing && !writer.has(sourceDrawing) ? sourceDrawing : writer.uniqueName((n) => `xl/drawings/drawing${n}.xml`, ctx.reserved);
19450
- if (!writeDrawing(writer, target, sheet.drawings, sourceDrawing)) return "";
19522
+ const drawings = sheet.drawings.map(
19523
+ (object) => object.kind === "chart" && (!object.partName || !source2?.has(object.partName)) ? chartWithCurrentCaches(ctx.workbook, sheet, object) : object
19524
+ );
19525
+ if (!writeDrawing(writer, target, drawings, sourceDrawing)) return "";
19451
19526
  return `<drawing r:id="${rels.add(RELATIONSHIP_TYPES.drawing, relativeTarget(partName, target))}"/>`;
19452
19527
  }
19453
19528
  var init_sheet_parts = __esm({
@@ -19457,6 +19532,7 @@ var init_sheet_parts = __esm({
19457
19532
  init_drawing3();
19458
19533
  init_package2();
19459
19534
  init_tables();
19535
+ init_chart_cache();
19460
19536
  init_comments2();
19461
19537
  init_drawing();
19462
19538
  init_snapshot();
@@ -1 +1 @@
1
- {"version":3,"file":"sheets.d.ts","sourceRoot":"","sources":["../../../xlsx/edit/sheets.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAe,UAAU,EAAmB,MAAM,UAAU,CAAC;AAQhF,OAAO,EAAE,KAAK,WAAW,EAAW,MAAM,WAAW,CAAC;AA4BtD,wFAAwF;AACxF,wBAAgB,QAAQ,CAAC,GAAG,EAAE,WAAW,EAAE,IAAI,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAmB7E;AAED;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAwBjE;AAED,+EAA+E;AAC/E,wBAAgB,WAAW,CAAC,GAAG,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAmB/E;AAED,6DAA6D;AAC7D,wBAAgB,SAAS,CAAC,GAAG,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,IAAI,CAuB1E;AA0CD,2FAA2F;AAC3F,wBAAgB,cAAc,CAAC,GAAG,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAyCtE;AAED,wBAAgB,aAAa,CAAC,GAAG,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,GAAG,IAAI,CAoBtF;AAED,wBAAgB,WAAW,CAAC,GAAG,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,KAAK,GAAG,IAAI,CAYhF"}
1
+ {"version":3,"file":"sheets.d.ts","sourceRoot":"","sources":["../../../xlsx/edit/sheets.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAe,UAAU,EAAmB,MAAM,UAAU,CAAC;AAQhF,OAAO,EAAE,KAAK,WAAW,EAAW,MAAM,WAAW,CAAC;AA4BtD,wFAAwF;AACxF,wBAAgB,QAAQ,CAAC,GAAG,EAAE,WAAW,EAAE,IAAI,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAmB7E;AAED;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAwBjE;AAED,+EAA+E;AAC/E,wBAAgB,WAAW,CAAC,GAAG,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAmB/E;AAED,6DAA6D;AAC7D,wBAAgB,SAAS,CAAC,GAAG,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,IAAI,CAuB1E;AA0CD,2FAA2F;AAC3F,wBAAgB,cAAc,CAAC,GAAG,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CA4CtE;AAED,wBAAgB,aAAa,CAAC,GAAG,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,GAAG,IAAI,CAoBtF;AAED,wBAAgB,WAAW,CAAC,GAAG,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,KAAK,GAAG,IAAI,CAYhF"}
@@ -10,7 +10,7 @@ export interface SortKey {
10
10
  * text compares case-insensitively.
11
11
  */
12
12
  export declare function compareCellValues(a: CellValue, b: CellValue, descending?: boolean): number;
13
- /** Sorts rows of a range in place (no undo step). Exported for the auto-filter sort. */
13
+ /** Sorts visible rows in place, leaving hidden rows untouched. Used by the auto-filter sort. */
14
14
  export declare function sortRows(sheet: Worksheet, range: CellRange, keys: SortKey[], hasHeader: boolean): void;
15
15
  /** Sorts the rows of `range` by `keys` (absolute column indices), stable, header kept in place. */
16
16
  export declare function sortRange(ctx: EditContext, s: number, range: CellRange, keys: SortKey[], hasHeader: boolean): void;
@@ -1 +1 @@
1
- {"version":3,"file":"sort.d.ts","sourceRoot":"","sources":["../../../xlsx/edit/sort.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,SAAS,EAAmC,MAAM,YAAY,CAAC;AAE7E,OAAO,KAAK,EAAQ,SAAS,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAE3D,OAAO,EAAE,KAAK,WAAW,EAAW,MAAM,WAAW,CAAC;AAItD,MAAM,WAAW,OAAO;IACvB,GAAG,EAAE,MAAM,CAAC;IACZ,UAAU,CAAC,EAAE,OAAO,CAAC;CACrB;AAeD;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,SAAS,EAAE,UAAU,UAAQ,GAAG,MAAM,CAaxF;AAED,wFAAwF;AACxF,wBAAgB,QAAQ,CACvB,KAAK,EAAE,SAAS,EAChB,KAAK,EAAE,SAAS,EAChB,IAAI,EAAE,OAAO,EAAE,EACf,SAAS,EAAE,OAAO,GAChB,IAAI,CAiDN;AAsBD,mGAAmG;AACnG,wBAAgB,SAAS,CACxB,GAAG,EAAE,WAAW,EAChB,CAAC,EAAE,MAAM,EACT,KAAK,EAAE,SAAS,EAChB,IAAI,EAAE,OAAO,EAAE,EACf,SAAS,EAAE,OAAO,GAChB,IAAI,CAUN"}
1
+ {"version":3,"file":"sort.d.ts","sourceRoot":"","sources":["../../../xlsx/edit/sort.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,SAAS,EAAmC,MAAM,YAAY,CAAC;AAE7E,OAAO,KAAK,EAAQ,SAAS,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAE3D,OAAO,EAAE,KAAK,WAAW,EAAW,MAAM,WAAW,CAAC;AAItD,MAAM,WAAW,OAAO;IACvB,GAAG,EAAE,MAAM,CAAC;IACZ,UAAU,CAAC,EAAE,OAAO,CAAC;CACrB;AAeD;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,SAAS,EAAE,UAAU,UAAQ,GAAG,MAAM,CAaxF;AAED,gGAAgG;AAChG,wBAAgB,QAAQ,CACvB,KAAK,EAAE,SAAS,EAChB,KAAK,EAAE,SAAS,EAChB,IAAI,EAAE,OAAO,EAAE,EACf,SAAS,EAAE,OAAO,GAChB,IAAI,CAkDN;AAsBD,mGAAmG;AACnG,wBAAgB,SAAS,CACxB,GAAG,EAAE,WAAW,EAChB,CAAC,EAAE,MAAM,EACT,KAAK,EAAE,SAAS,EAChB,IAAI,EAAE,OAAO,EAAE,EACf,SAAS,EAAE,OAAO,GAChB,IAAI,CAUN"}