@cj-tech-master/excelts 5.1.0 → 5.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * @cj-tech-master/excelts v5.1.0
2
+ * @cj-tech-master/excelts v5.1.1
3
3
  * TypeScript Excel Workbook Manager - Read and Write xlsx and csv Files.
4
4
  * (c) 2026 cjnoname
5
5
  * Released under the MIT License
@@ -5918,6 +5918,10 @@ var ExcelTS = (function(exports) {
5918
5918
  * the rows will still be shifted as if the values existed
5919
5919
  */
5920
5920
  spliceColumns(start, count, ...inserts) {
5921
+ for (const merge of Object.values(this._merges)) for (let r = merge.top; r <= merge.bottom; r++) for (let c = merge.left; c <= merge.right; c++) {
5922
+ const cell = this.findCell(r, c);
5923
+ if (cell && cell.type === Enums.ValueType.Merge) cell.unmerge();
5924
+ }
5921
5925
  const nRows = this._rows.length;
5922
5926
  if (inserts.length > 0) for (let i = 0; i < nRows; i++) {
5923
5927
  const insertValues = inserts.map((insert) => insert[i] ?? null);
@@ -5940,6 +5944,7 @@ var ExcelTS = (function(exports) {
5940
5944
  if (br && br.nativeCol >= start - 1) br.nativeCol = Math.max(0, br.nativeCol + nExpand);
5941
5945
  }
5942
5946
  }
5947
+ this._spliceMerges("col", start, count, inserts.length);
5943
5948
  }
5944
5949
  /**
5945
5950
  * Get the last column in a worksheet
@@ -6079,6 +6084,8 @@ var ExcelTS = (function(exports) {
6079
6084
  duplicateRow(rowNum, count, insert = false) {
6080
6085
  const rSrc = this._rows[rowNum - 1];
6081
6086
  const inserts = Array.from({ length: count }).fill(rSrc.values);
6087
+ const srcMerges = [];
6088
+ for (const merge of Object.values(this._merges)) if (merge.top === rowNum && merge.bottom === rowNum) srcMerges.push(merge);
6082
6089
  this.spliceRows(rowNum + 1, insert ? 0 : count, ...inserts);
6083
6090
  for (let i = 0; i < count; i++) {
6084
6091
  const rDst = this._rows[rowNum + i];
@@ -6088,6 +6095,15 @@ var ExcelTS = (function(exports) {
6088
6095
  rDst.getCell(colNumber).style = cell.style;
6089
6096
  });
6090
6097
  }
6098
+ if (srcMerges.length > 0) for (let i = 0; i < count; i++) {
6099
+ const dstRow = rowNum + 1 + i;
6100
+ if (!insert) {
6101
+ const toRemove = [];
6102
+ for (const [key, merge] of Object.entries(this._merges)) if (merge.top <= dstRow && merge.bottom >= dstRow) toRemove.push(key);
6103
+ for (const key of toRemove) this._unMergeMaster(this.getCell(key));
6104
+ }
6105
+ for (const srcMerge of srcMerges) this.mergeCellsWithoutStyle(dstRow, srcMerge.left, dstRow, srcMerge.right);
6106
+ }
6091
6107
  }
6092
6108
  /**
6093
6109
  * Cut one or more rows (rows below are shifted up)
@@ -6096,6 +6112,10 @@ var ExcelTS = (function(exports) {
6096
6112
  * Known limitation: If a splice causes any merged cells to move, the results may be unpredictable
6097
6113
  */
6098
6114
  spliceRows(start, count, ...inserts) {
6115
+ for (const merge of Object.values(this._merges)) for (let r = merge.top; r <= merge.bottom; r++) for (let c = merge.left; c <= merge.right; c++) {
6116
+ const cell = this.findCell(r, c);
6117
+ if (cell && cell.type === Enums.ValueType.Merge) cell.unmerge();
6118
+ }
6099
6119
  const nKeep = start + count;
6100
6120
  const nInserts = inserts.length;
6101
6121
  const nExpand = nInserts - count;
@@ -6126,12 +6146,6 @@ var ExcelTS = (function(exports) {
6126
6146
  rDst.height = rSrc.height;
6127
6147
  rSrc.eachCell({ includeEmpty: true }, (cell, colNumber) => {
6128
6148
  rDst.getCell(colNumber).style = cell.style;
6129
- if (cell.type === Enums.ValueType.Merge) {
6130
- const cellToBeMerged = this.getRow(cell.row + nInserts).getCell(colNumber);
6131
- const prevMaster = cell.master;
6132
- const newMaster = this.getRow(prevMaster.row + nInserts).getCell(prevMaster.col);
6133
- cellToBeMerged.merge(newMaster);
6134
- }
6135
6149
  });
6136
6150
  } else this._rows[i + nExpand - 1] = void 0;
6137
6151
  }
@@ -6148,6 +6162,7 @@ var ExcelTS = (function(exports) {
6148
6162
  if (br && br.nativeRow >= start - 1) br.nativeRow = Math.max(0, br.nativeRow + nExpand);
6149
6163
  }
6150
6164
  }
6165
+ this._spliceMerges("row", start, count, nInserts);
6151
6166
  }
6152
6167
  eachRow(optOrCallback, maybeCallback) {
6153
6168
  let options;
@@ -6221,6 +6236,56 @@ var ExcelTS = (function(exports) {
6221
6236
  delete this._merges[master.address];
6222
6237
  }
6223
6238
  }
6239
+ /**
6240
+ * Update _merges dictionary and cell-level merge references after a row or column splice.
6241
+ */
6242
+ _spliceMerges(axis, start, count, nInserts) {
6243
+ const nExpand = nInserts - count;
6244
+ if (nExpand === 0 && count === 0) return;
6245
+ const nKeep = start + count;
6246
+ const isRow = axis === "row";
6247
+ const newMerges = {};
6248
+ for (const merge of Object.values(this._merges)) {
6249
+ const { top, left, bottom, right } = merge.model;
6250
+ const lo = isRow ? top : left;
6251
+ const hi = isRow ? bottom : right;
6252
+ if (nExpand <= 0 && count > 0) {
6253
+ const deleteEnd = nKeep - 1;
6254
+ if (lo > deleteEnd) {
6255
+ const newRange = isRow ? new Range(top + nExpand, left, bottom + nExpand, right) : new Range(top, left + nExpand, bottom, right + nExpand);
6256
+ newMerges[colCache.encodeAddress(newRange.top, newRange.left)] = newRange;
6257
+ } else if (hi < start) newMerges[colCache.encodeAddress(top, left)] = merge;
6258
+ else if (lo >= start && hi <= deleteEnd) {} else {
6259
+ let newTop = top;
6260
+ let newLeft = left;
6261
+ let newBottom = bottom;
6262
+ let newRight = right;
6263
+ if (isRow) {
6264
+ newTop = top < start ? top : start;
6265
+ newBottom = Math.max(newTop, bottom + nExpand);
6266
+ } else {
6267
+ newLeft = left < start ? left : start;
6268
+ newRight = Math.max(newLeft, right + nExpand);
6269
+ }
6270
+ const newRange = new Range(newTop, newLeft, newBottom, newRight);
6271
+ if (newTop === newBottom && newLeft === newRight) {} else newMerges[colCache.encodeAddress(newRange.top, newRange.left)] = newRange;
6272
+ }
6273
+ } else if (lo >= nKeep) {
6274
+ const newRange = isRow ? new Range(top + nExpand, left, bottom + nExpand, right) : new Range(top, left + nExpand, bottom, right + nExpand);
6275
+ newMerges[colCache.encodeAddress(newRange.top, newRange.left)] = newRange;
6276
+ } else if (hi < nKeep) newMerges[colCache.encodeAddress(top, left)] = merge;
6277
+ else {
6278
+ if (isRow) merge.model.bottom = bottom + nExpand;
6279
+ else merge.model.right = right + nExpand;
6280
+ newMerges[colCache.encodeAddress(top, left)] = merge;
6281
+ }
6282
+ }
6283
+ this._merges = newMerges;
6284
+ for (const m of Object.values(newMerges)) {
6285
+ const master = this.getCell(m.top, m.left);
6286
+ for (let r = m.top; r <= m.bottom; r++) for (let c = m.left; c <= m.right; c++) if (r > m.top || c > m.left) this.getCell(r, c).merge(master, true);
6287
+ }
6288
+ }
6224
6289
  get hasMerges() {
6225
6290
  return Object.values(this._merges).some(Boolean);
6226
6291
  }