exceljs-lts 4.5.3 → 4.5.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.
package/README.md CHANGED
@@ -675,6 +675,19 @@ worksheet.autoFilter = {
675
675
  }
676
676
  ```
677
677
 
678
+ Specific columns can be excluded from showing a filter button with `exclude`. It takes an array of
679
+ column offsets within the range (0 is the leftmost column of the range) and hides the filter button
680
+ on those columns, e.g. under merged header cells.
681
+
682
+ ```javascript
683
+ // Set an auto filter from A1 to E1, hiding the filter buttons on columns A and C
684
+ worksheet.autoFilter = {
685
+ from: 'A1',
686
+ to: 'E1',
687
+ exclude: [0, 2],
688
+ }
689
+ ```
690
+
678
691
  ## Columns[⬆](#contents)<!-- Link generated with jump2header -->
679
692
 
680
693
  ```javascript
@@ -2072,6 +2085,8 @@ worksheet.addImage(imageId2, 'B2:D6');
2072
2085
  ```
2073
2086
 
2074
2087
  Using a structure instead of a range string, it is possible to partially cover cells.
2088
+ The structure needs a `br` or an `ext`. `addImage` and `addBackgroundImage` throw an Error right away if the
2089
+ image id was not returned by `workbook.addImage` or if the range is malformed.
2075
2090
 
2076
2091
  Note that the coordinate system used for this is zero based, so the top-left of A1 will be { col: 0, row: 0 }.
2077
2092
  Fractions of cells can be specified by using floating point numbers, e.g. the midpoint of A1 is { col: 0.5, row: 0.5 }.
package/README_zh.md CHANGED
@@ -641,6 +641,17 @@ worksheet.autoFilter = {
641
641
  }
642
642
  ```
643
643
 
644
+ 可以使用 `exclude` 隐藏指定列的筛选按钮。它接受一个列偏移数组(0 表示范围最左侧的列),例如用于合并的标题单元格。
645
+
646
+ ```javascript
647
+ // 将自动筛选器设置为从 A1 到 E1,并隐藏 A 列和 C 列的筛选按钮
648
+ worksheet.autoFilter = {
649
+ from: 'A1',
650
+ to: 'E1',
651
+ exclude: [0, 2],
652
+ }
653
+ ```
654
+
644
655
  ## 列[⬆](#目录)<!-- Link generated with jump2header -->
645
656
 
646
657
  ```javascript
@@ -64,5 +64,33 @@ class Image {
64
64
  }
65
65
  }
66
66
  }
67
+ function isFiniteNumber(value) {
68
+ return typeof value === 'number' && Number.isFinite(value);
69
+ }
70
+ Image.validateRange = function validateRange(range) {
71
+ if (typeof range === 'string') {
72
+ let decoded;
73
+ try {
74
+ decoded = colCache.decode(range);
75
+ } catch (e) {
76
+ decoded = {};
77
+ }
78
+ const isRange = ['top', 'left', 'bottom', 'right'].every(key => isFiniteNumber(decoded[key]));
79
+ const isAddress = isFiniteNumber(decoded.row) && isFiniteNumber(decoded.col);
80
+ if (!isRange && !isAddress) {
81
+ throw new Error(`Invalid image range "${range}": expected a cell range such as "B2:D6"`);
82
+ }
83
+ return;
84
+ }
85
+ if (!range || typeof range !== 'object') {
86
+ throw new Error('Invalid image range: expected a cell range string or an object with tl and br or ext');
87
+ }
88
+ if (!range.br && !range.ext) {
89
+ throw new Error('Invalid image range: an object range needs either br or ext');
90
+ }
91
+ if (range.ext && typeof range.ext !== 'object') {
92
+ throw new Error('Invalid image range: ext must be an object with width and height');
93
+ }
94
+ };
67
95
  module.exports = Image;
68
96
  //# sourceMappingURL=image.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"image.js","names":["colCache","require","Anchor","Image","constructor","worksheet","model","type","imageId","hyperlinks","range","tl","br","ext","editAs","Error","decoded","decode","col","left","row","top","right","bottom","module","exports"],"sources":["../../../lib/doc/image.js"],"sourcesContent":["const colCache = require('../utils/col-cache');\nconst Anchor = require('./anchor');\n\nclass Image {\n constructor(worksheet, model) {\n this.worksheet = worksheet;\n this.model = model;\n }\n\n get model() {\n switch (this.type) {\n case 'background':\n return {\n type: this.type,\n imageId: this.imageId,\n };\n case 'image':\n return {\n type: this.type,\n imageId: this.imageId,\n hyperlinks: this.range.hyperlinks,\n range: {\n tl: this.range.tl.model,\n br: this.range.br && this.range.br.model,\n ext: this.range.ext,\n editAs: this.range.editAs,\n },\n };\n default:\n throw new Error('Invalid Image Type');\n }\n }\n\n set model({type, imageId, range, hyperlinks}) {\n this.type = type;\n this.imageId = imageId;\n\n if (type === 'image') {\n if (typeof range === 'string') {\n const decoded = colCache.decode(range);\n this.range = {\n tl: new Anchor(this.worksheet, {col: decoded.left, row: decoded.top}, -1),\n br: new Anchor(this.worksheet, {col: decoded.right, row: decoded.bottom}, 0),\n editAs: 'oneCell',\n };\n } else {\n this.range = {\n tl: new Anchor(this.worksheet, range.tl, 0),\n br: range.br && new Anchor(this.worksheet, range.br, 0),\n ext: range.ext,\n editAs: range.editAs,\n hyperlinks: hyperlinks || range.hyperlinks,\n };\n }\n }\n }\n}\n\nmodule.exports = Image;\n"],"mappings":";;AAAA,MAAMA,QAAQ,GAAGC,OAAO,CAAC,oBAAoB,CAAC;AAC9C,MAAMC,MAAM,GAAGD,OAAO,CAAC,UAAU,CAAC;AAElC,MAAME,KAAK,CAAC;EACVC,WAAWA,CAACC,SAAS,EAAEC,KAAK,EAAE;IAC5B,IAAI,CAACD,SAAS,GAAGA,SAAS;IAC1B,IAAI,CAACC,KAAK,GAAGA,KAAK;EACpB;EAEA,IAAIA,KAAKA,CAAA,EAAG;IACV,QAAQ,IAAI,CAACC,IAAI;MACf,KAAK,YAAY;QACf,OAAO;UACLA,IAAI,EAAE,IAAI,CAACA,IAAI;UACfC,OAAO,EAAE,IAAI,CAACA;QAChB,CAAC;MACH,KAAK,OAAO;QACV,OAAO;UACLD,IAAI,EAAE,IAAI,CAACA,IAAI;UACfC,OAAO,EAAE,IAAI,CAACA,OAAO;UACrBC,UAAU,EAAE,IAAI,CAACC,KAAK,CAACD,UAAU;UACjCC,KAAK,EAAE;YACLC,EAAE,EAAE,IAAI,CAACD,KAAK,CAACC,EAAE,CAACL,KAAK;YACvBM,EAAE,EAAE,IAAI,CAACF,KAAK,CAACE,EAAE,IAAI,IAAI,CAACF,KAAK,CAACE,EAAE,CAACN,KAAK;YACxCO,GAAG,EAAE,IAAI,CAACH,KAAK,CAACG,GAAG;YACnBC,MAAM,EAAE,IAAI,CAACJ,KAAK,CAACI;UACrB;QACF,CAAC;MACH;QACE,MAAM,IAAIC,KAAK,CAAC,oBAAoB,CAAC;IACzC;EACF;EAEA,IAAIT,KAAKA,CAAC;IAACC,IAAI;IAAEC,OAAO;IAAEE,KAAK;IAAED;EAAU,CAAC,EAAE;IAC5C,IAAI,CAACF,IAAI,GAAGA,IAAI;IAChB,IAAI,CAACC,OAAO,GAAGA,OAAO;IAEtB,IAAID,IAAI,KAAK,OAAO,EAAE;MACpB,IAAI,OAAOG,KAAK,KAAK,QAAQ,EAAE;QAC7B,MAAMM,OAAO,GAAGhB,QAAQ,CAACiB,MAAM,CAACP,KAAK,CAAC;QACtC,IAAI,CAACA,KAAK,GAAG;UACXC,EAAE,EAAE,IAAIT,MAAM,CAAC,IAAI,CAACG,SAAS,EAAE;YAACa,GAAG,EAAEF,OAAO,CAACG,IAAI;YAAEC,GAAG,EAAEJ,OAAO,CAACK;UAAG,CAAC,EAAE,CAAC,CAAC,CAAC;UACzET,EAAE,EAAE,IAAIV,MAAM,CAAC,IAAI,CAACG,SAAS,EAAE;YAACa,GAAG,EAAEF,OAAO,CAACM,KAAK;YAAEF,GAAG,EAAEJ,OAAO,CAACO;UAAM,CAAC,EAAE,CAAC,CAAC;UAC5ET,MAAM,EAAE;QACV,CAAC;MACH,CAAC,MAAM;QACL,IAAI,CAACJ,KAAK,GAAG;UACXC,EAAE,EAAE,IAAIT,MAAM,CAAC,IAAI,CAACG,SAAS,EAAEK,KAAK,CAACC,EAAE,EAAE,CAAC,CAAC;UAC3CC,EAAE,EAAEF,KAAK,CAACE,EAAE,IAAI,IAAIV,MAAM,CAAC,IAAI,CAACG,SAAS,EAAEK,KAAK,CAACE,EAAE,EAAE,CAAC,CAAC;UACvDC,GAAG,EAAEH,KAAK,CAACG,GAAG;UACdC,MAAM,EAAEJ,KAAK,CAACI,MAAM;UACpBL,UAAU,EAAEA,UAAU,IAAIC,KAAK,CAACD;QAClC,CAAC;MACH;IACF;EACF;AACF;AAEAe,MAAM,CAACC,OAAO,GAAGtB,KAAK","ignoreList":[]}
1
+ {"version":3,"file":"image.js","names":["colCache","require","Anchor","Image","constructor","worksheet","model","type","imageId","hyperlinks","range","tl","br","ext","editAs","Error","decoded","decode","col","left","row","top","right","bottom","isFiniteNumber","value","Number","isFinite","validateRange","e","isRange","every","key","isAddress","module","exports"],"sources":["../../../lib/doc/image.js"],"sourcesContent":["const colCache = require('../utils/col-cache');\nconst Anchor = require('./anchor');\n\nclass Image {\n constructor(worksheet, model) {\n this.worksheet = worksheet;\n this.model = model;\n }\n\n get model() {\n switch (this.type) {\n case 'background':\n return {\n type: this.type,\n imageId: this.imageId,\n };\n case 'image':\n return {\n type: this.type,\n imageId: this.imageId,\n hyperlinks: this.range.hyperlinks,\n range: {\n tl: this.range.tl.model,\n br: this.range.br && this.range.br.model,\n ext: this.range.ext,\n editAs: this.range.editAs,\n },\n };\n default:\n throw new Error('Invalid Image Type');\n }\n }\n\n set model({type, imageId, range, hyperlinks}) {\n this.type = type;\n this.imageId = imageId;\n\n if (type === 'image') {\n if (typeof range === 'string') {\n const decoded = colCache.decode(range);\n this.range = {\n tl: new Anchor(this.worksheet, {col: decoded.left, row: decoded.top}, -1),\n br: new Anchor(this.worksheet, {col: decoded.right, row: decoded.bottom}, 0),\n editAs: 'oneCell',\n };\n } else {\n this.range = {\n tl: new Anchor(this.worksheet, range.tl, 0),\n br: range.br && new Anchor(this.worksheet, range.br, 0),\n ext: range.ext,\n editAs: range.editAs,\n hyperlinks: hyperlinks || range.hyperlinks,\n };\n }\n }\n }\n}\n\nfunction isFiniteNumber(value) {\n return typeof value === 'number' && Number.isFinite(value);\n}\n\nImage.validateRange = function validateRange(range) {\n if (typeof range === 'string') {\n let decoded;\n try {\n decoded = colCache.decode(range);\n } catch (e) {\n decoded = {};\n }\n const isRange = ['top', 'left', 'bottom', 'right'].every(key => isFiniteNumber(decoded[key]));\n const isAddress = isFiniteNumber(decoded.row) && isFiniteNumber(decoded.col);\n if (!isRange && !isAddress) {\n throw new Error(`Invalid image range \"${range}\": expected a cell range such as \"B2:D6\"`);\n }\n return;\n }\n if (!range || typeof range !== 'object') {\n throw new Error(\n 'Invalid image range: expected a cell range string or an object with tl and br or ext'\n );\n }\n if (!range.br && !range.ext) {\n throw new Error('Invalid image range: an object range needs either br or ext');\n }\n if (range.ext && typeof range.ext !== 'object') {\n throw new Error('Invalid image range: ext must be an object with width and height');\n }\n};\n\nmodule.exports = Image;\n"],"mappings":"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","ignoreList":[]}
@@ -747,7 +747,14 @@ class Worksheet {
747
747
 
748
748
  // =========================================================================
749
749
  // Images
750
+ _validateImageId(imageId) {
751
+ if (imageId === undefined || imageId === null || !this._workbook.getImage(imageId)) {
752
+ throw new Error(`Image with id ${imageId} not found. Add it with workbook.addImage() first`);
753
+ }
754
+ }
750
755
  addImage(imageId, range) {
756
+ this._validateImageId(imageId);
757
+ Image.validateRange(range);
751
758
  const model = {
752
759
  type: 'image',
753
760
  imageId,
@@ -759,6 +766,7 @@ class Worksheet {
759
766
  return this._media.filter(m => m.type === 'image');
760
767
  }
761
768
  addBackgroundImage(imageId) {
769
+ this._validateImageId(imageId);
762
770
  const model = {
763
771
  type: 'background',
764
772
  imageId
@@ -1 +1 @@
1
- {"version":3,"file":"worksheet.js","names":["_","require","colCache","Range","Row","Column","Enums","Image","Table","DataValidations","makePivotTable","Encryptor","copyStyle","Worksheet","constructor","options","_workbook","workbook","id","orderNo","name","state","_rows","_columns","_keys","_merges","rowBreaks","properties","Object","assign","defaultRowHeight","dyDescent","outlineLevelCol","outlineLevelRow","pageSetup","margins","left","right","top","bottom","header","footer","orientation","horizontalDpi","verticalDpi","fitToPage","fitToWidth","fitToHeight","scale","pageOrder","blackAndWhite","draft","cellComments","errors","paperSize","undefined","showRowColHeaders","showGridLines","firstPageNumber","horizontalCentered","verticalCentered","colBreaks","headerFooter","differentFirst","differentOddEven","oddHeader","oddFooter","evenHeader","evenFooter","firstHeader","firstFooter","dataValidations","views","autoFilter","_media","sheetProtection","tables","pivotTables","conditionalFormattings","_name","Error","test","length","console","warn","substring","_worksheets","find","ws","toLowerCase","destroy","removeWorksheetEx","dimensions","forEach","row","rowDims","expand","number","min","max","columns","value","_headerRowCount","reduce","pv","cv","headerCount","headers","Math","count","defn","column","push","getColumnKey","key","setColumnKey","deleteColumnKey","eachColumnKey","f","each","getColumn","c","col","l2n","n","spliceColumns","start","inserts","rows","nRows","merges","values","filter","merge","i","j","cell","getCell","style","unmerge","encodeAddress","rowArguments","insert","getRow","splice","apply","r","nExpand","nKeep","nEnd","mergeCellsWithoutStyle","definedNames","lastColumn","columnCount","maxCount","eachRow","cellCount","actualColumnCount","counts","eachCell","_commitRow","_lastRowNumber","_nextRow","lastRow","findRow","findRows","slice","rowCount","actualRowCount","getRows","addRow","rowNo","_setStyleOption","addRows","insertRow","pos","spliceRows","insertRows","_copyStyle","src","dest","styleEmpty","rSrc","rDst","includeEmpty","colNumber","height","duplicateRow","rowNum","Array","fill","nInserts","nFrom","nTo","_value","cellToBeMerged","_row","_number","prevMaster","_master","newMaster","_column","iteratee","hasValues","getSheetValues","findCell","address","getAddress","getCellEx","mergeCells","cells","_mergeCellsInternal","ignoreStyle","type","ValueType","Merge","master","_unMergeMaster","hasMerges","some","Boolean","unMergeCells","fillFormula","range","formula","results","shareType","decoded","decode","width","masterAddress","isShared","getResult","isArray","first","ref","result","sharedFormula","addImage","imageId","model","getImages","m","addBackgroundImage","getBackgroundImageId","image","protect","password","Promise","resolve","sheet","spinCount","Number","isFinite","round","algorithmName","saltValue","randomBytes","toString","hashValue","convertPasswordToHash","unprotect","addTable","table","getTable","removeTable","getTables","addPivotTable","pivotTable","addConditionalFormatting","cf","removeConditionalFormatting","Function","tabColor","trace","media","map","medium","cols","toModel","rowModel","_parseRows","_parseMergeCells","fromModel","t","module","exports"],"sources":["../../../lib/doc/worksheet.js"],"sourcesContent":["const _ = require('../utils/under-dash');\n\nconst colCache = require('../utils/col-cache');\nconst Range = require('./range');\nconst Row = require('./row');\nconst Column = require('./column');\nconst Enums = require('./enums');\nconst Image = require('./image');\nconst Table = require('./table');\nconst DataValidations = require('./data-validations');\nconst {makePivotTable} = require('./pivot-table');\nconst Encryptor = require('../utils/encryptor');\nconst {copyStyle} = require('../utils/copy-style');\n\n// Worksheet requirements\n// Operate as sheet inside workbook or standalone\n// Load and Save from file and stream\n// Access/Add/Delete individual cells\n// Manage column widths and row heights\n\nclass Worksheet {\n constructor(options) {\n options = options || {};\n this._workbook = options.workbook;\n\n // in a workbook, each sheet will have a number\n this.id = options.id;\n this.orderNo = options.orderNo;\n\n // and a name\n this.name = options.name;\n\n // add a state\n this.state = options.state || 'visible';\n\n // rows allows access organised by row. Sparse array of arrays indexed by row-1, col\n // Note: _rows is zero based. Must subtract 1 to go from cell.row to index\n this._rows = [];\n\n // column definitions\n this._columns = null;\n\n // column keys (addRow convenience): key ==> this._collumns index\n this._keys = {};\n\n // keep record of all merges\n this._merges = {};\n\n // record of all row and column pageBreaks\n this.rowBreaks = [];\n\n // for tabColor, default row height, outline levels, etc\n this.properties = Object.assign(\n {},\n {\n defaultRowHeight: 15,\n dyDescent: 55,\n outlineLevelCol: 0,\n outlineLevelRow: 0,\n },\n options.properties\n );\n\n // for all things printing\n this.pageSetup = Object.assign(\n {},\n {\n margins: {left: 0.7, right: 0.7, top: 0.75, bottom: 0.75, header: 0.3, footer: 0.3},\n orientation: 'portrait',\n horizontalDpi: 4294967295,\n verticalDpi: 4294967295,\n fitToPage: !!(\n options.pageSetup &&\n (options.pageSetup.fitToWidth || options.pageSetup.fitToHeight) &&\n !options.pageSetup.scale\n ),\n pageOrder: 'downThenOver',\n blackAndWhite: false,\n draft: false,\n cellComments: 'None',\n errors: 'displayed',\n scale: 100,\n fitToWidth: 1,\n fitToHeight: 1,\n paperSize: undefined,\n showRowColHeaders: false,\n showGridLines: false,\n firstPageNumber: undefined,\n horizontalCentered: false,\n verticalCentered: false,\n rowBreaks: null,\n colBreaks: null,\n },\n options.pageSetup\n );\n\n this.headerFooter = Object.assign(\n {},\n {\n differentFirst: false,\n differentOddEven: false,\n oddHeader: null,\n oddFooter: null,\n evenHeader: null,\n evenFooter: null,\n firstHeader: null,\n firstFooter: null,\n },\n options.headerFooter\n );\n\n this.dataValidations = new DataValidations();\n\n // for freezepanes, split, zoom, gridlines, etc\n this.views = options.views || [];\n\n this.autoFilter = options.autoFilter || null;\n\n // for images, etc\n this._media = [];\n\n // worksheet protection\n this.sheetProtection = null;\n\n // for tables\n this.tables = {};\n\n this.pivotTables = [];\n\n this.conditionalFormattings = [];\n }\n\n get name() {\n return this._name;\n }\n\n set name(name) {\n if (name === undefined) {\n name = `sheet${this.id}`;\n }\n\n if (this._name === name) return;\n\n if (typeof name !== 'string') {\n throw new Error('The name has to be a string.');\n }\n\n if (name === '') {\n throw new Error('The name can\\'t be empty.');\n }\n\n if (name === 'History') {\n throw new Error('The name \"History\" is protected. Please use a different name.');\n }\n\n // Illegal character in worksheet name: asterisk (*), question mark (?),\n // colon (:), forward slash (/ \\), or bracket ([])\n if (/[*?:/\\\\[\\]]/.test(name)) {\n throw new Error(`Worksheet name ${name} cannot include any of the following characters: * ? : \\\\ / [ ]`);\n }\n\n if (/(^')|('$)/.test(name)) {\n throw new Error(`The first or last character of worksheet name cannot be a single quotation mark: ${name}`);\n }\n\n if (name && name.length > 31) {\n // eslint-disable-next-line no-console\n console.warn(`Worksheet name ${name} exceeds 31 chars. This will be truncated`);\n name = name.substring(0, 31);\n }\n\n if (\n this._workbook._worksheets.find(\n ws => ws && ws !== this && ws.name.toLowerCase() === name.toLowerCase()\n )\n ) {\n throw new Error(`Worksheet name already exists: ${name}`);\n }\n\n this._name = name;\n }\n\n get workbook() {\n return this._workbook;\n }\n\n // when you're done with this worksheet, call this to remove from workbook\n destroy() {\n this._workbook.removeWorksheetEx(this);\n }\n\n // Get the bounding range of the cells in this worksheet\n get dimensions() {\n const dimensions = new Range();\n this._rows.forEach(row => {\n if (row) {\n const rowDims = row.dimensions;\n if (rowDims) {\n dimensions.expand(row.number, rowDims.min, row.number, rowDims.max);\n }\n }\n });\n return dimensions;\n }\n\n // =========================================================================\n // Columns\n\n // get the current columns array.\n get columns() {\n return this._columns;\n }\n\n // set the columns from an array of column definitions.\n // Note: any headers defined will overwrite existing values.\n set columns(value) {\n // calculate max header row count\n this._headerRowCount = value.reduce((pv, cv) => {\n const headerCount = (cv.header && 1) || (cv.headers && cv.headers.length) || 0;\n return Math.max(pv, headerCount);\n }, 0);\n\n // construct Column objects\n let count = 1;\n const columns = (this._columns = []);\n value.forEach(defn => {\n const column = new Column(this, count++, false);\n columns.push(column);\n column.defn = defn;\n });\n }\n\n getColumnKey(key) {\n return this._keys[key];\n }\n\n setColumnKey(key, value) {\n this._keys[key] = value;\n }\n\n deleteColumnKey(key) {\n delete this._keys[key];\n }\n\n eachColumnKey(f) {\n _.each(this._keys, f);\n }\n\n // get a single column by col number. If it doesn't exist, create it and any gaps before it\n getColumn(c) {\n if (typeof c === 'string') {\n // if it matches a key'd column, return that\n const col = this._keys[c];\n if (col) return col;\n\n // otherwise, assume letter\n c = colCache.l2n(c);\n }\n if (!this._columns) {\n this._columns = [];\n }\n if (c > this._columns.length) {\n let n = this._columns.length + 1;\n while (n <= c) {\n this._columns.push(new Column(this, n++));\n }\n }\n return this._columns[c - 1];\n }\n\n spliceColumns(start, count, ...inserts) {\n const rows = this._rows;\n const nRows = rows.length;\n\n // unmerge any merges that touch the spliced or shifted columns so their cells move\n // as plain cells; they are re-merged at their new position below\n const merges = Object.values(this._merges).filter(merge => merge.right >= start);\n merges.forEach(merge => {\n for (let i = merge.top; i <= merge.bottom; i++) {\n for (let j = merge.left; j <= merge.right; j++) {\n // keep each cell's own style (e.g. borders) while unmerging\n const cell = this.getCell(i, j);\n const {style} = cell;\n cell.unmerge();\n cell.style = style;\n }\n }\n delete this._merges[colCache.encodeAddress(merge.top, merge.left)];\n });\n\n if (inserts.length > 0) {\n // must iterate over all rows whether they exist yet or not\n for (let i = 0; i < nRows; i++) {\n const rowArguments = [start, count];\n // eslint-disable-next-line no-loop-func\n inserts.forEach(insert => {\n rowArguments.push(insert[i] || null);\n });\n const row = this.getRow(i + 1);\n // eslint-disable-next-line prefer-spread\n row.splice.apply(row, rowArguments);\n }\n } else {\n // nothing to insert, so just splice all rows\n this._rows.forEach(r => {\n if (r) {\n r.splice(start, count);\n }\n });\n }\n\n // splice column definitions\n const nExpand = inserts.length - count;\n const nKeep = start + count;\n const nEnd = this._columns.length;\n if (nExpand < 0) {\n for (let i = start + inserts.length; i <= nEnd; i++) {\n this.getColumn(i).defn = this.getColumn(i - nExpand).defn;\n }\n } else if (nExpand > 0) {\n for (let i = nEnd; i >= nKeep; i--) {\n this.getColumn(i + nExpand).defn = this.getColumn(i).defn;\n }\n }\n for (let i = start; i < start + inserts.length; i++) {\n this.getColumn(i).defn = null;\n }\n\n // re-merge the merges that were unmerged above, shifted, shrunk or grown to match.\n // Inserted columns join a merge only when it continues on both sides of them.\n merges.forEach(merge => {\n let {left, right} = merge;\n if (left >= nKeep) {\n left += nExpand;\n } else if (left >= start) {\n left = start + inserts.length;\n }\n if (right >= nKeep) {\n right += nExpand;\n } else if (right >= start) {\n right = start - 1;\n }\n // drop merges whose columns were all deleted or that are down to a single cell\n if (left < right || (left === right && merge.top < merge.bottom)) {\n this.mergeCellsWithoutStyle(merge.top, left, merge.bottom, right);\n }\n });\n\n // account for defined names\n this.workbook.definedNames.spliceColumns(this.name, start, count, inserts.length);\n }\n\n get lastColumn() {\n return this.getColumn(this.columnCount);\n }\n\n get columnCount() {\n let maxCount = 0;\n this.eachRow(row => {\n maxCount = Math.max(maxCount, row.cellCount);\n });\n return maxCount;\n }\n\n get actualColumnCount() {\n // performance nightmare - for each row, counts all the columns used\n const counts = [];\n let count = 0;\n this.eachRow(row => {\n row.eachCell(({col}) => {\n if (!counts[col]) {\n counts[col] = true;\n count++;\n }\n });\n });\n return count;\n }\n\n // =========================================================================\n // Rows\n\n _commitRow() {\n // nop - allows streaming reader to fill a document\n }\n\n get _lastRowNumber() {\n // need to cope with results of splice\n const rows = this._rows;\n let n = rows.length;\n while (n > 0 && rows[n - 1] === undefined) {\n n--;\n }\n return n;\n }\n\n get _nextRow() {\n return this._lastRowNumber + 1;\n }\n\n get lastRow() {\n if (this._rows.length) {\n return this._rows[this._rows.length - 1];\n }\n return undefined;\n }\n\n // find a row (if exists) by row number\n findRow(r) {\n return this._rows[r - 1];\n }\n\n // find multiple rows (if exists) by row number\n findRows(start, length) {\n return this._rows.slice(start - 1, start - 1 + length);\n }\n\n get rowCount() {\n return this._lastRowNumber;\n }\n\n get actualRowCount() {\n // counts actual rows that have actual data\n let count = 0;\n this.eachRow(() => {\n count++;\n });\n return count;\n }\n\n // get a row by row number.\n getRow(r) {\n let row = this._rows[r - 1];\n if (!row) {\n row = this._rows[r - 1] = new Row(this, r);\n }\n return row;\n }\n\n // get multiple rows by row number.\n getRows(start, length) {\n if (length < 1) return undefined;\n const rows = [];\n for (let i = start; i < start + length; i++) {\n rows.push(this.getRow(i));\n }\n return rows;\n }\n\n addRow(value, style = 'n') {\n const rowNo = this._nextRow;\n const row = this.getRow(rowNo);\n row.values = value;\n this._setStyleOption(rowNo, style[0] === 'i' ? style : 'n');\n return row;\n }\n\n addRows(value, style = 'n') {\n const rows = [];\n value.forEach(row => {\n rows.push(this.addRow(row, style));\n });\n return rows;\n }\n\n insertRow(pos, value, style = 'n') {\n this.spliceRows(pos, 0, value);\n this._setStyleOption(pos, style);\n return this.getRow(pos);\n }\n\n insertRows(pos, values, style = 'n') {\n this.spliceRows(pos, 0, ...values);\n if (style !== 'n') {\n // copy over the styles\n for (let i = 0; i < values.length; i++) {\n if (style[0] === 'o' && this.findRow(values.length + pos + i) !== undefined) {\n this._copyStyle(values.length + pos + i, pos + i, style[1] === '+');\n } else if (style[0] === 'i' && this.findRow(pos - 1) !== undefined) {\n this._copyStyle(pos - 1, pos + i, style[1] === '+');\n }\n }\n }\n return this.getRows(pos, values.length);\n }\n\n // set row at position to same style as of either pervious row (option 'i') or next row (option 'o')\n _setStyleOption(pos, style = 'n') {\n if (style[0] === 'o' && this.findRow(pos + 1) !== undefined) {\n this._copyStyle(pos + 1, pos, style[1] === '+');\n } else if (style[0] === 'i' && this.findRow(pos - 1) !== undefined) {\n this._copyStyle(pos - 1, pos, style[1] === '+');\n }\n }\n\n _copyStyle(src, dest, styleEmpty = false) {\n const rSrc = this.getRow(src);\n const rDst = this.getRow(dest);\n rDst.style = copyStyle(rSrc.style);\n // eslint-disable-next-line no-loop-func\n rSrc.eachCell({includeEmpty: styleEmpty}, (cell, colNumber) => {\n rDst.getCell(colNumber).style = copyStyle(cell.style);\n });\n rDst.height = rSrc.height;\n }\n\n duplicateRow(rowNum, count, insert = false) {\n // create count duplicates of rowNum\n // either inserting new or overwriting existing rows\n\n const rSrc = this._rows[rowNum - 1];\n const inserts = new Array(count).fill(rSrc.values);\n this.spliceRows(rowNum + 1, insert ? 0 : count, ...inserts);\n\n // now copy styles...\n for (let i = 0; i < count; i++) {\n const rDst = this._rows[rowNum + i];\n rDst.style = rSrc.style;\n rDst.height = rSrc.height;\n // eslint-disable-next-line no-loop-func\n rSrc.eachCell({includeEmpty: true}, (cell, colNumber) => {\n rDst.getCell(colNumber).style = cell.style;\n });\n }\n }\n\n spliceRows(start, count, ...inserts) {\n // same problem as row.splice, except worse.\n const nKeep = start + count;\n const nInserts = inserts.length;\n const nExpand = nInserts - count;\n const nEnd = this._rows.length;\n let i;\n let rSrc;\n if (nExpand < 0) {\n // remove rows by moving the rows below the splice up\n for (i = nKeep; i <= nEnd; i++) {\n rSrc = this._rows[i - 1];\n if (rSrc) {\n const rDst = this.getRow(i + nExpand);\n rDst.values = rSrc.values;\n rDst.style = rSrc.style;\n rDst.height = rSrc.height;\n // eslint-disable-next-line no-loop-func\n rSrc.eachCell({includeEmpty: true}, (cell, colNumber) => {\n rDst.getCell(colNumber).style = cell.style;\n });\n this._rows[i - 1] = undefined;\n } else {\n this._rows[i + nExpand - 1] = undefined;\n }\n }\n\n // The move above only overwrites rows up to (nEnd + nExpand). When there are\n // not enough rows below the splice, rows from there to (nKeep - 1) would be\n // left behind, so clear them (but not past the end of the sheet).\n const nFrom = Math.max(start + nInserts, nEnd + nExpand + 1);\n const nTo = Math.min(nKeep - 1, nEnd);\n for (i = nFrom; i <= nTo; i++) {\n this._rows[i - 1] = undefined;\n }\n } else if (nExpand > 0) {\n // insert new cells\n for (i = nEnd; i >= nKeep; i--) {\n rSrc = this._rows[i - 1];\n if (rSrc) {\n const rDst = this.getRow(i + nExpand);\n rDst.values = rSrc.values;\n rDst.style = rSrc.style;\n rDst.height = rSrc.height;\n // eslint-disable-next-line no-loop-func\n rSrc.eachCell({includeEmpty: true}, (cell, colNumber) => {\n rDst.getCell(colNumber).style = cell.style;\n\n // remerge cells accounting for insert offset\n if (cell._value.constructor.name === 'MergeValue') {\n const cellToBeMerged = this.getRow(cell._row._number + nInserts).getCell(colNumber);\n const prevMaster = cell._value._master;\n const newMaster = this.getRow(prevMaster._row._number + nInserts).getCell(prevMaster._column._number);\n cellToBeMerged.merge(newMaster);\n }\n });\n } else {\n this._rows[i + nExpand - 1] = undefined;\n }\n }\n }\n\n // now copy over the new values\n for (i = 0; i < nInserts; i++) {\n const rDst = this.getRow(start + i);\n rDst.style = {};\n rDst.values = inserts[i];\n }\n\n // account for defined names\n this.workbook.definedNames.spliceRows(this.name, start, count, nInserts);\n }\n\n // iterate over every row in the worksheet, including maybe empty rows\n eachRow(options, iteratee) {\n if (!iteratee) {\n iteratee = options;\n options = undefined;\n }\n if (options && options.includeEmpty) {\n const n = this._rows.length;\n for (let i = 1; i <= n; i++) {\n iteratee(this.getRow(i), i);\n }\n } else {\n this._rows.forEach(row => {\n if (row && row.hasValues) {\n iteratee(row, row.number);\n }\n });\n }\n }\n\n // return all rows as sparse array\n getSheetValues() {\n const rows = [];\n this._rows.forEach(row => {\n if (row) {\n rows[row.number] = row.values;\n }\n });\n return rows;\n }\n\n // =========================================================================\n // Cells\n\n // returns the cell at [r,c] or address given by r. If not found, return undefined\n findCell(r, c) {\n const address = colCache.getAddress(r, c);\n const row = this._rows[address.row - 1];\n return row ? row.findCell(address.col) : undefined;\n }\n\n // return the cell at [r,c] or address given by r. If not found, create a new one.\n getCell(r, c) {\n const address = colCache.getAddress(r, c);\n const row = this.getRow(address.row);\n return row.getCellEx(address);\n }\n\n // =========================================================================\n // Merge\n\n // convert the range defined by ['tl:br'], [tl,br] or [t,l,b,r] into a single 'merged' cell\n mergeCells(...cells) {\n const dimensions = new Range(cells);\n this._mergeCellsInternal(dimensions);\n }\n\n mergeCellsWithoutStyle(...cells) {\n const dimensions = new Range(cells);\n this._mergeCellsInternal(dimensions, true);\n }\n\n _mergeCellsInternal(dimensions, ignoreStyle) {\n // check cells aren't already merged. Any existing merge that intersects the range has a\n // cell inside it that is either a merged (slave) cell or a master indexed in this._merges,\n // so this is O(cells in range) rather than O(existing merges).\n // Check everything before changing anything so a rejected merge leaves the sheet untouched.\n for (let i = dimensions.top; i <= dimensions.bottom; i++) {\n for (let j = dimensions.left; j <= dimensions.right; j++) {\n const cell = this.findCell(i, j);\n if (\n (cell && cell.type === Enums.ValueType.Merge) ||\n this._merges[colCache.encodeAddress(i, j)]\n ) {\n throw new Error('Cannot merge already merged cells');\n }\n }\n }\n\n // apply merge\n const master = this.getCell(dimensions.top, dimensions.left);\n for (let i = dimensions.top; i <= dimensions.bottom; i++) {\n for (let j = dimensions.left; j <= dimensions.right; j++) {\n // merge all but the master cell\n if (i > dimensions.top || j > dimensions.left) {\n this.getCell(i, j).merge(master, ignoreStyle);\n }\n }\n }\n\n // index merge\n this._merges[master.address] = dimensions;\n }\n\n _unMergeMaster(master) {\n // master is always top left of a rectangle\n const merge = this._merges[master.address];\n if (merge) {\n for (let i = merge.top; i <= merge.bottom; i++) {\n for (let j = merge.left; j <= merge.right; j++) {\n this.getCell(i, j).unmerge();\n }\n }\n delete this._merges[master.address];\n }\n }\n\n get hasMerges() {\n // return true if this._merges has a merge object\n return _.some(this._merges, Boolean);\n }\n\n // scan the range defined by ['tl:br'], [tl,br] or [t,l,b,r] and if any cell is part of a merge,\n // un-merge the group. Note this function can affect multiple merges and merge-blocks are\n // atomic - either they're all merged or all un-merged.\n unMergeCells(...cells) {\n const dimensions = new Range(cells);\n\n // find any cells in that range and unmerge them\n for (let i = dimensions.top; i <= dimensions.bottom; i++) {\n for (let j = dimensions.left; j <= dimensions.right; j++) {\n const cell = this.findCell(i, j);\n if (cell) {\n if (cell.type === Enums.ValueType.Merge) {\n // this cell merges to another master\n this._unMergeMaster(cell.master);\n } else if (this._merges[cell.address]) {\n // this cell is a master\n this._unMergeMaster(cell);\n }\n }\n }\n }\n }\n\n // ===========================================================================\n // Shared/Array Formula\n fillFormula(range, formula, results, shareType = 'shared') {\n // Define formula for top-left cell and share to rest\n const decoded = colCache.decode(range);\n const {top, left, bottom, right} = decoded;\n const width = right - left + 1;\n const masterAddress = colCache.encodeAddress(top, left);\n const isShared = shareType === 'shared';\n\n // work out result accessor\n let getResult;\n if (typeof results === 'function') {\n getResult = results;\n } else if (Array.isArray(results)) {\n if (Array.isArray(results[0])) {\n getResult = (row, col) => results[row - top][col - left];\n } else {\n // eslint-disable-next-line no-mixed-operators\n getResult = (row, col) => results[(row - top) * width + (col - left)];\n }\n } else {\n getResult = () => undefined;\n }\n let first = true;\n for (let r = top; r <= bottom; r++) {\n for (let c = left; c <= right; c++) {\n if (first) {\n this.getCell(r, c).value = {\n shareType,\n formula,\n ref: range,\n result: getResult(r, c),\n };\n first = false;\n } else {\n this.getCell(r, c).value = isShared\n ? {\n sharedFormula: masterAddress,\n result: getResult(r, c),\n }\n : getResult(r, c);\n }\n }\n }\n }\n\n // =========================================================================\n // Images\n addImage(imageId, range) {\n const model = {\n type: 'image',\n imageId,\n range,\n };\n this._media.push(new Image(this, model));\n }\n\n getImages() {\n return this._media.filter(m => m.type === 'image');\n }\n\n addBackgroundImage(imageId) {\n const model = {\n type: 'background',\n imageId,\n };\n this._media.push(new Image(this, model));\n }\n\n getBackgroundImageId() {\n const image = this._media.find(m => m.type === 'background');\n return image && image.imageId;\n }\n\n // =========================================================================\n // Worksheet Protection\n protect(password, options) {\n // TODO: make this function truly async\n // perhaps marshal to worker thread or something\n return new Promise(resolve => {\n this.sheetProtection = {\n sheet: true,\n };\n if (options && 'spinCount' in options) {\n // force spinCount to be integer >= 0\n options.spinCount = Number.isFinite(options.spinCount) ? Math.round(Math.max(0, options.spinCount)) : 100000;\n }\n if (password) {\n this.sheetProtection.algorithmName = 'SHA-512';\n this.sheetProtection.saltValue = Encryptor.randomBytes(16).toString('base64');\n this.sheetProtection.spinCount = options && 'spinCount' in options ? options.spinCount : 100000; // allow user specified spinCount\n this.sheetProtection.hashValue = Encryptor.convertPasswordToHash(\n password,\n 'SHA512',\n this.sheetProtection.saltValue,\n this.sheetProtection.spinCount\n );\n }\n if (options) {\n this.sheetProtection = Object.assign(this.sheetProtection, options);\n if (!password && 'spinCount' in options) {\n delete this.sheetProtection.spinCount;\n }\n }\n resolve();\n });\n }\n\n unprotect() {\n this.sheetProtection = null;\n }\n\n // =========================================================================\n // Tables\n addTable(model) {\n const table = new Table(this, model);\n this.tables[model.name] = table;\n return table;\n }\n\n getTable(name) {\n return this.tables[name];\n }\n\n removeTable(name) {\n delete this.tables[name];\n }\n\n getTables() {\n return Object.values(this.tables);\n }\n\n // =========================================================================\n // Pivot Tables\n addPivotTable(model) {\n // eslint-disable-next-line no-console\n console.warn(\n `Warning: Pivot Table support is experimental. \nPlease leave feedback at https://github.com/exceljs/exceljs/discussions/2575`\n );\n\n const pivotTable = makePivotTable(this, model);\n\n this.pivotTables.push(pivotTable);\n this.workbook.pivotTables.push(pivotTable);\n\n return pivotTable;\n }\n\n // ===========================================================================\n // Conditional Formatting\n addConditionalFormatting(cf) {\n this.conditionalFormattings.push(cf);\n }\n\n removeConditionalFormatting(filter) {\n if (typeof filter === 'number') {\n this.conditionalFormattings.splice(filter, 1);\n } else if (filter instanceof Function) {\n this.conditionalFormattings = this.conditionalFormattings.filter(filter);\n } else {\n this.conditionalFormattings = [];\n }\n }\n\n // ===========================================================================\n // Deprecated\n get tabColor() {\n // eslint-disable-next-line no-console\n console.trace('worksheet.tabColor property is now deprecated. Please use worksheet.properties.tabColor');\n return this.properties.tabColor;\n }\n\n set tabColor(value) {\n // eslint-disable-next-line no-console\n console.trace('worksheet.tabColor property is now deprecated. Please use worksheet.properties.tabColor');\n this.properties.tabColor = value;\n }\n\n // ===========================================================================\n // Model\n\n get model() {\n const model = {\n id: this.id,\n name: this.name,\n dataValidations: this.dataValidations.model,\n properties: this.properties,\n state: this.state,\n pageSetup: this.pageSetup,\n headerFooter: this.headerFooter,\n rowBreaks: this.rowBreaks,\n views: this.views,\n autoFilter: this.autoFilter,\n media: this._media.map(medium => medium.model),\n sheetProtection: this.sheetProtection,\n tables: Object.values(this.tables).map(table => table.model),\n pivotTables: this.pivotTables,\n conditionalFormattings: this.conditionalFormattings,\n };\n\n // =================================================\n // columns\n model.cols = Column.toModel(this.columns);\n\n // ==========================================================\n // Rows\n const rows = (model.rows = []);\n const dimensions = (model.dimensions = new Range());\n this._rows.forEach(row => {\n const rowModel = row && row.model;\n if (rowModel) {\n dimensions.expand(rowModel.number, rowModel.min, rowModel.number, rowModel.max);\n rows.push(rowModel);\n }\n });\n\n // ==========================================================\n // Merges\n model.merges = [];\n _.each(this._merges, merge => {\n model.merges.push(merge.range);\n });\n\n return model;\n }\n\n _parseRows(model) {\n this._rows = [];\n model.rows.forEach(rowModel => {\n const row = new Row(this, rowModel.number);\n this._rows[row.number - 1] = row;\n row.model = rowModel;\n });\n }\n\n _parseMergeCells(model) {\n _.each(model.mergeCells, merge => {\n // Do not merge styles when importing an Excel file\n // since each cell may have different styles intentionally.\n this.mergeCellsWithoutStyle(merge);\n });\n }\n\n set model(value) {\n this.name = value.name;\n this._columns = Column.fromModel(this, value.cols);\n this._parseRows(value);\n\n this._parseMergeCells(value);\n this.dataValidations = new DataValidations(value.dataValidations);\n this.properties = value.properties;\n this.pageSetup = value.pageSetup;\n this.headerFooter = value.headerFooter;\n this.views = value.views;\n this.autoFilter = value.autoFilter;\n this._media = value.media.map(medium => new Image(this, medium));\n this.sheetProtection = value.sheetProtection;\n this.tables = value.tables.reduce((tables, table) => {\n const t = new Table(this);\n t.model = table;\n tables[table.name] = t;\n return tables;\n }, {});\n this.pivotTables = value.pivotTables;\n this.conditionalFormattings = value.conditionalFormattings;\n }\n}\n\nmodule.exports = Worksheet;\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"worksheet.js","names":["_","require","colCache","Range","Row","Column","Enums","Image","Table","DataValidations","makePivotTable","Encryptor","copyStyle","Worksheet","constructor","options","_workbook","workbook","id","orderNo","name","state","_rows","_columns","_keys","_merges","rowBreaks","properties","Object","assign","defaultRowHeight","dyDescent","outlineLevelCol","outlineLevelRow","pageSetup","margins","left","right","top","bottom","header","footer","orientation","horizontalDpi","verticalDpi","fitToPage","fitToWidth","fitToHeight","scale","pageOrder","blackAndWhite","draft","cellComments","errors","paperSize","undefined","showRowColHeaders","showGridLines","firstPageNumber","horizontalCentered","verticalCentered","colBreaks","headerFooter","differentFirst","differentOddEven","oddHeader","oddFooter","evenHeader","evenFooter","firstHeader","firstFooter","dataValidations","views","autoFilter","_media","sheetProtection","tables","pivotTables","conditionalFormattings","_name","Error","test","length","console","warn","substring","_worksheets","find","ws","toLowerCase","destroy","removeWorksheetEx","dimensions","forEach","row","rowDims","expand","number","min","max","columns","value","_headerRowCount","reduce","pv","cv","headerCount","headers","Math","count","defn","column","push","getColumnKey","key","setColumnKey","deleteColumnKey","eachColumnKey","f","each","getColumn","c","col","l2n","n","spliceColumns","start","inserts","rows","nRows","merges","values","filter","merge","i","j","cell","getCell","style","unmerge","encodeAddress","rowArguments","insert","getRow","splice","apply","r","nExpand","nKeep","nEnd","mergeCellsWithoutStyle","definedNames","lastColumn","columnCount","maxCount","eachRow","cellCount","actualColumnCount","counts","eachCell","_commitRow","_lastRowNumber","_nextRow","lastRow","findRow","findRows","slice","rowCount","actualRowCount","getRows","addRow","rowNo","_setStyleOption","addRows","insertRow","pos","spliceRows","insertRows","_copyStyle","src","dest","styleEmpty","rSrc","rDst","includeEmpty","colNumber","height","duplicateRow","rowNum","Array","fill","nInserts","nFrom","nTo","_value","cellToBeMerged","_row","_number","prevMaster","_master","newMaster","_column","iteratee","hasValues","getSheetValues","findCell","address","getAddress","getCellEx","mergeCells","cells","_mergeCellsInternal","ignoreStyle","type","ValueType","Merge","master","_unMergeMaster","hasMerges","some","Boolean","unMergeCells","fillFormula","range","formula","results","shareType","decoded","decode","width","masterAddress","isShared","getResult","isArray","first","ref","result","sharedFormula","_validateImageId","imageId","getImage","addImage","validateRange","model","getImages","m","addBackgroundImage","getBackgroundImageId","image","protect","password","Promise","resolve","sheet","spinCount","Number","isFinite","round","algorithmName","saltValue","randomBytes","toString","hashValue","convertPasswordToHash","unprotect","addTable","table","getTable","removeTable","getTables","addPivotTable","pivotTable","addConditionalFormatting","cf","removeConditionalFormatting","Function","tabColor","trace","media","map","medium","cols","toModel","rowModel","_parseRows","_parseMergeCells","fromModel","t","module","exports"],"sources":["../../../lib/doc/worksheet.js"],"sourcesContent":["const _ = require('../utils/under-dash');\n\nconst colCache = require('../utils/col-cache');\nconst Range = require('./range');\nconst Row = require('./row');\nconst Column = require('./column');\nconst Enums = require('./enums');\nconst Image = require('./image');\nconst Table = require('./table');\nconst DataValidations = require('./data-validations');\nconst {makePivotTable} = require('./pivot-table');\nconst Encryptor = require('../utils/encryptor');\nconst {copyStyle} = require('../utils/copy-style');\n\n// Worksheet requirements\n// Operate as sheet inside workbook or standalone\n// Load and Save from file and stream\n// Access/Add/Delete individual cells\n// Manage column widths and row heights\n\nclass Worksheet {\n constructor(options) {\n options = options || {};\n this._workbook = options.workbook;\n\n // in a workbook, each sheet will have a number\n this.id = options.id;\n this.orderNo = options.orderNo;\n\n // and a name\n this.name = options.name;\n\n // add a state\n this.state = options.state || 'visible';\n\n // rows allows access organised by row. Sparse array of arrays indexed by row-1, col\n // Note: _rows is zero based. Must subtract 1 to go from cell.row to index\n this._rows = [];\n\n // column definitions\n this._columns = null;\n\n // column keys (addRow convenience): key ==> this._collumns index\n this._keys = {};\n\n // keep record of all merges\n this._merges = {};\n\n // record of all row and column pageBreaks\n this.rowBreaks = [];\n\n // for tabColor, default row height, outline levels, etc\n this.properties = Object.assign(\n {},\n {\n defaultRowHeight: 15,\n dyDescent: 55,\n outlineLevelCol: 0,\n outlineLevelRow: 0,\n },\n options.properties\n );\n\n // for all things printing\n this.pageSetup = Object.assign(\n {},\n {\n margins: {left: 0.7, right: 0.7, top: 0.75, bottom: 0.75, header: 0.3, footer: 0.3},\n orientation: 'portrait',\n horizontalDpi: 4294967295,\n verticalDpi: 4294967295,\n fitToPage: !!(\n options.pageSetup &&\n (options.pageSetup.fitToWidth || options.pageSetup.fitToHeight) &&\n !options.pageSetup.scale\n ),\n pageOrder: 'downThenOver',\n blackAndWhite: false,\n draft: false,\n cellComments: 'None',\n errors: 'displayed',\n scale: 100,\n fitToWidth: 1,\n fitToHeight: 1,\n paperSize: undefined,\n showRowColHeaders: false,\n showGridLines: false,\n firstPageNumber: undefined,\n horizontalCentered: false,\n verticalCentered: false,\n rowBreaks: null,\n colBreaks: null,\n },\n options.pageSetup\n );\n\n this.headerFooter = Object.assign(\n {},\n {\n differentFirst: false,\n differentOddEven: false,\n oddHeader: null,\n oddFooter: null,\n evenHeader: null,\n evenFooter: null,\n firstHeader: null,\n firstFooter: null,\n },\n options.headerFooter\n );\n\n this.dataValidations = new DataValidations();\n\n // for freezepanes, split, zoom, gridlines, etc\n this.views = options.views || [];\n\n this.autoFilter = options.autoFilter || null;\n\n // for images, etc\n this._media = [];\n\n // worksheet protection\n this.sheetProtection = null;\n\n // for tables\n this.tables = {};\n\n this.pivotTables = [];\n\n this.conditionalFormattings = [];\n }\n\n get name() {\n return this._name;\n }\n\n set name(name) {\n if (name === undefined) {\n name = `sheet${this.id}`;\n }\n\n if (this._name === name) return;\n\n if (typeof name !== 'string') {\n throw new Error('The name has to be a string.');\n }\n\n if (name === '') {\n throw new Error('The name can\\'t be empty.');\n }\n\n if (name === 'History') {\n throw new Error('The name \"History\" is protected. Please use a different name.');\n }\n\n // Illegal character in worksheet name: asterisk (*), question mark (?),\n // colon (:), forward slash (/ \\), or bracket ([])\n if (/[*?:/\\\\[\\]]/.test(name)) {\n throw new Error(`Worksheet name ${name} cannot include any of the following characters: * ? : \\\\ / [ ]`);\n }\n\n if (/(^')|('$)/.test(name)) {\n throw new Error(`The first or last character of worksheet name cannot be a single quotation mark: ${name}`);\n }\n\n if (name && name.length > 31) {\n // eslint-disable-next-line no-console\n console.warn(`Worksheet name ${name} exceeds 31 chars. This will be truncated`);\n name = name.substring(0, 31);\n }\n\n if (\n this._workbook._worksheets.find(\n ws => ws && ws !== this && ws.name.toLowerCase() === name.toLowerCase()\n )\n ) {\n throw new Error(`Worksheet name already exists: ${name}`);\n }\n\n this._name = name;\n }\n\n get workbook() {\n return this._workbook;\n }\n\n // when you're done with this worksheet, call this to remove from workbook\n destroy() {\n this._workbook.removeWorksheetEx(this);\n }\n\n // Get the bounding range of the cells in this worksheet\n get dimensions() {\n const dimensions = new Range();\n this._rows.forEach(row => {\n if (row) {\n const rowDims = row.dimensions;\n if (rowDims) {\n dimensions.expand(row.number, rowDims.min, row.number, rowDims.max);\n }\n }\n });\n return dimensions;\n }\n\n // =========================================================================\n // Columns\n\n // get the current columns array.\n get columns() {\n return this._columns;\n }\n\n // set the columns from an array of column definitions.\n // Note: any headers defined will overwrite existing values.\n set columns(value) {\n // calculate max header row count\n this._headerRowCount = value.reduce((pv, cv) => {\n const headerCount = (cv.header && 1) || (cv.headers && cv.headers.length) || 0;\n return Math.max(pv, headerCount);\n }, 0);\n\n // construct Column objects\n let count = 1;\n const columns = (this._columns = []);\n value.forEach(defn => {\n const column = new Column(this, count++, false);\n columns.push(column);\n column.defn = defn;\n });\n }\n\n getColumnKey(key) {\n return this._keys[key];\n }\n\n setColumnKey(key, value) {\n this._keys[key] = value;\n }\n\n deleteColumnKey(key) {\n delete this._keys[key];\n }\n\n eachColumnKey(f) {\n _.each(this._keys, f);\n }\n\n // get a single column by col number. If it doesn't exist, create it and any gaps before it\n getColumn(c) {\n if (typeof c === 'string') {\n // if it matches a key'd column, return that\n const col = this._keys[c];\n if (col) return col;\n\n // otherwise, assume letter\n c = colCache.l2n(c);\n }\n if (!this._columns) {\n this._columns = [];\n }\n if (c > this._columns.length) {\n let n = this._columns.length + 1;\n while (n <= c) {\n this._columns.push(new Column(this, n++));\n }\n }\n return this._columns[c - 1];\n }\n\n spliceColumns(start, count, ...inserts) {\n const rows = this._rows;\n const nRows = rows.length;\n\n // unmerge any merges that touch the spliced or shifted columns so their cells move\n // as plain cells; they are re-merged at their new position below\n const merges = Object.values(this._merges).filter(merge => merge.right >= start);\n merges.forEach(merge => {\n for (let i = merge.top; i <= merge.bottom; i++) {\n for (let j = merge.left; j <= merge.right; j++) {\n // keep each cell's own style (e.g. borders) while unmerging\n const cell = this.getCell(i, j);\n const {style} = cell;\n cell.unmerge();\n cell.style = style;\n }\n }\n delete this._merges[colCache.encodeAddress(merge.top, merge.left)];\n });\n\n if (inserts.length > 0) {\n // must iterate over all rows whether they exist yet or not\n for (let i = 0; i < nRows; i++) {\n const rowArguments = [start, count];\n // eslint-disable-next-line no-loop-func\n inserts.forEach(insert => {\n rowArguments.push(insert[i] || null);\n });\n const row = this.getRow(i + 1);\n // eslint-disable-next-line prefer-spread\n row.splice.apply(row, rowArguments);\n }\n } else {\n // nothing to insert, so just splice all rows\n this._rows.forEach(r => {\n if (r) {\n r.splice(start, count);\n }\n });\n }\n\n // splice column definitions\n const nExpand = inserts.length - count;\n const nKeep = start + count;\n const nEnd = this._columns.length;\n if (nExpand < 0) {\n for (let i = start + inserts.length; i <= nEnd; i++) {\n this.getColumn(i).defn = this.getColumn(i - nExpand).defn;\n }\n } else if (nExpand > 0) {\n for (let i = nEnd; i >= nKeep; i--) {\n this.getColumn(i + nExpand).defn = this.getColumn(i).defn;\n }\n }\n for (let i = start; i < start + inserts.length; i++) {\n this.getColumn(i).defn = null;\n }\n\n // re-merge the merges that were unmerged above, shifted, shrunk or grown to match.\n // Inserted columns join a merge only when it continues on both sides of them.\n merges.forEach(merge => {\n let {left, right} = merge;\n if (left >= nKeep) {\n left += nExpand;\n } else if (left >= start) {\n left = start + inserts.length;\n }\n if (right >= nKeep) {\n right += nExpand;\n } else if (right >= start) {\n right = start - 1;\n }\n // drop merges whose columns were all deleted or that are down to a single cell\n if (left < right || (left === right && merge.top < merge.bottom)) {\n this.mergeCellsWithoutStyle(merge.top, left, merge.bottom, right);\n }\n });\n\n // account for defined names\n this.workbook.definedNames.spliceColumns(this.name, start, count, inserts.length);\n }\n\n get lastColumn() {\n return this.getColumn(this.columnCount);\n }\n\n get columnCount() {\n let maxCount = 0;\n this.eachRow(row => {\n maxCount = Math.max(maxCount, row.cellCount);\n });\n return maxCount;\n }\n\n get actualColumnCount() {\n // performance nightmare - for each row, counts all the columns used\n const counts = [];\n let count = 0;\n this.eachRow(row => {\n row.eachCell(({col}) => {\n if (!counts[col]) {\n counts[col] = true;\n count++;\n }\n });\n });\n return count;\n }\n\n // =========================================================================\n // Rows\n\n _commitRow() {\n // nop - allows streaming reader to fill a document\n }\n\n get _lastRowNumber() {\n // need to cope with results of splice\n const rows = this._rows;\n let n = rows.length;\n while (n > 0 && rows[n - 1] === undefined) {\n n--;\n }\n return n;\n }\n\n get _nextRow() {\n return this._lastRowNumber + 1;\n }\n\n get lastRow() {\n if (this._rows.length) {\n return this._rows[this._rows.length - 1];\n }\n return undefined;\n }\n\n // find a row (if exists) by row number\n findRow(r) {\n return this._rows[r - 1];\n }\n\n // find multiple rows (if exists) by row number\n findRows(start, length) {\n return this._rows.slice(start - 1, start - 1 + length);\n }\n\n get rowCount() {\n return this._lastRowNumber;\n }\n\n get actualRowCount() {\n // counts actual rows that have actual data\n let count = 0;\n this.eachRow(() => {\n count++;\n });\n return count;\n }\n\n // get a row by row number.\n getRow(r) {\n let row = this._rows[r - 1];\n if (!row) {\n row = this._rows[r - 1] = new Row(this, r);\n }\n return row;\n }\n\n // get multiple rows by row number.\n getRows(start, length) {\n if (length < 1) return undefined;\n const rows = [];\n for (let i = start; i < start + length; i++) {\n rows.push(this.getRow(i));\n }\n return rows;\n }\n\n addRow(value, style = 'n') {\n const rowNo = this._nextRow;\n const row = this.getRow(rowNo);\n row.values = value;\n this._setStyleOption(rowNo, style[0] === 'i' ? style : 'n');\n return row;\n }\n\n addRows(value, style = 'n') {\n const rows = [];\n value.forEach(row => {\n rows.push(this.addRow(row, style));\n });\n return rows;\n }\n\n insertRow(pos, value, style = 'n') {\n this.spliceRows(pos, 0, value);\n this._setStyleOption(pos, style);\n return this.getRow(pos);\n }\n\n insertRows(pos, values, style = 'n') {\n this.spliceRows(pos, 0, ...values);\n if (style !== 'n') {\n // copy over the styles\n for (let i = 0; i < values.length; i++) {\n if (style[0] === 'o' && this.findRow(values.length + pos + i) !== undefined) {\n this._copyStyle(values.length + pos + i, pos + i, style[1] === '+');\n } else if (style[0] === 'i' && this.findRow(pos - 1) !== undefined) {\n this._copyStyle(pos - 1, pos + i, style[1] === '+');\n }\n }\n }\n return this.getRows(pos, values.length);\n }\n\n // set row at position to same style as of either pervious row (option 'i') or next row (option 'o')\n _setStyleOption(pos, style = 'n') {\n if (style[0] === 'o' && this.findRow(pos + 1) !== undefined) {\n this._copyStyle(pos + 1, pos, style[1] === '+');\n } else if (style[0] === 'i' && this.findRow(pos - 1) !== undefined) {\n this._copyStyle(pos - 1, pos, style[1] === '+');\n }\n }\n\n _copyStyle(src, dest, styleEmpty = false) {\n const rSrc = this.getRow(src);\n const rDst = this.getRow(dest);\n rDst.style = copyStyle(rSrc.style);\n // eslint-disable-next-line no-loop-func\n rSrc.eachCell({includeEmpty: styleEmpty}, (cell, colNumber) => {\n rDst.getCell(colNumber).style = copyStyle(cell.style);\n });\n rDst.height = rSrc.height;\n }\n\n duplicateRow(rowNum, count, insert = false) {\n // create count duplicates of rowNum\n // either inserting new or overwriting existing rows\n\n const rSrc = this._rows[rowNum - 1];\n const inserts = new Array(count).fill(rSrc.values);\n this.spliceRows(rowNum + 1, insert ? 0 : count, ...inserts);\n\n // now copy styles...\n for (let i = 0; i < count; i++) {\n const rDst = this._rows[rowNum + i];\n rDst.style = rSrc.style;\n rDst.height = rSrc.height;\n // eslint-disable-next-line no-loop-func\n rSrc.eachCell({includeEmpty: true}, (cell, colNumber) => {\n rDst.getCell(colNumber).style = cell.style;\n });\n }\n }\n\n spliceRows(start, count, ...inserts) {\n // same problem as row.splice, except worse.\n const nKeep = start + count;\n const nInserts = inserts.length;\n const nExpand = nInserts - count;\n const nEnd = this._rows.length;\n let i;\n let rSrc;\n if (nExpand < 0) {\n // remove rows by moving the rows below the splice up\n for (i = nKeep; i <= nEnd; i++) {\n rSrc = this._rows[i - 1];\n if (rSrc) {\n const rDst = this.getRow(i + nExpand);\n rDst.values = rSrc.values;\n rDst.style = rSrc.style;\n rDst.height = rSrc.height;\n // eslint-disable-next-line no-loop-func\n rSrc.eachCell({includeEmpty: true}, (cell, colNumber) => {\n rDst.getCell(colNumber).style = cell.style;\n });\n this._rows[i - 1] = undefined;\n } else {\n this._rows[i + nExpand - 1] = undefined;\n }\n }\n\n // The move above only overwrites rows up to (nEnd + nExpand). When there are\n // not enough rows below the splice, rows from there to (nKeep - 1) would be\n // left behind, so clear them (but not past the end of the sheet).\n const nFrom = Math.max(start + nInserts, nEnd + nExpand + 1);\n const nTo = Math.min(nKeep - 1, nEnd);\n for (i = nFrom; i <= nTo; i++) {\n this._rows[i - 1] = undefined;\n }\n } else if (nExpand > 0) {\n // insert new cells\n for (i = nEnd; i >= nKeep; i--) {\n rSrc = this._rows[i - 1];\n if (rSrc) {\n const rDst = this.getRow(i + nExpand);\n rDst.values = rSrc.values;\n rDst.style = rSrc.style;\n rDst.height = rSrc.height;\n // eslint-disable-next-line no-loop-func\n rSrc.eachCell({includeEmpty: true}, (cell, colNumber) => {\n rDst.getCell(colNumber).style = cell.style;\n\n // remerge cells accounting for insert offset\n if (cell._value.constructor.name === 'MergeValue') {\n const cellToBeMerged = this.getRow(cell._row._number + nInserts).getCell(colNumber);\n const prevMaster = cell._value._master;\n const newMaster = this.getRow(prevMaster._row._number + nInserts).getCell(prevMaster._column._number);\n cellToBeMerged.merge(newMaster);\n }\n });\n } else {\n this._rows[i + nExpand - 1] = undefined;\n }\n }\n }\n\n // now copy over the new values\n for (i = 0; i < nInserts; i++) {\n const rDst = this.getRow(start + i);\n rDst.style = {};\n rDst.values = inserts[i];\n }\n\n // account for defined names\n this.workbook.definedNames.spliceRows(this.name, start, count, nInserts);\n }\n\n // iterate over every row in the worksheet, including maybe empty rows\n eachRow(options, iteratee) {\n if (!iteratee) {\n iteratee = options;\n options = undefined;\n }\n if (options && options.includeEmpty) {\n const n = this._rows.length;\n for (let i = 1; i <= n; i++) {\n iteratee(this.getRow(i), i);\n }\n } else {\n this._rows.forEach(row => {\n if (row && row.hasValues) {\n iteratee(row, row.number);\n }\n });\n }\n }\n\n // return all rows as sparse array\n getSheetValues() {\n const rows = [];\n this._rows.forEach(row => {\n if (row) {\n rows[row.number] = row.values;\n }\n });\n return rows;\n }\n\n // =========================================================================\n // Cells\n\n // returns the cell at [r,c] or address given by r. If not found, return undefined\n findCell(r, c) {\n const address = colCache.getAddress(r, c);\n const row = this._rows[address.row - 1];\n return row ? row.findCell(address.col) : undefined;\n }\n\n // return the cell at [r,c] or address given by r. If not found, create a new one.\n getCell(r, c) {\n const address = colCache.getAddress(r, c);\n const row = this.getRow(address.row);\n return row.getCellEx(address);\n }\n\n // =========================================================================\n // Merge\n\n // convert the range defined by ['tl:br'], [tl,br] or [t,l,b,r] into a single 'merged' cell\n mergeCells(...cells) {\n const dimensions = new Range(cells);\n this._mergeCellsInternal(dimensions);\n }\n\n mergeCellsWithoutStyle(...cells) {\n const dimensions = new Range(cells);\n this._mergeCellsInternal(dimensions, true);\n }\n\n _mergeCellsInternal(dimensions, ignoreStyle) {\n // check cells aren't already merged. Any existing merge that intersects the range has a\n // cell inside it that is either a merged (slave) cell or a master indexed in this._merges,\n // so this is O(cells in range) rather than O(existing merges).\n // Check everything before changing anything so a rejected merge leaves the sheet untouched.\n for (let i = dimensions.top; i <= dimensions.bottom; i++) {\n for (let j = dimensions.left; j <= dimensions.right; j++) {\n const cell = this.findCell(i, j);\n if (\n (cell && cell.type === Enums.ValueType.Merge) ||\n this._merges[colCache.encodeAddress(i, j)]\n ) {\n throw new Error('Cannot merge already merged cells');\n }\n }\n }\n\n // apply merge\n const master = this.getCell(dimensions.top, dimensions.left);\n for (let i = dimensions.top; i <= dimensions.bottom; i++) {\n for (let j = dimensions.left; j <= dimensions.right; j++) {\n // merge all but the master cell\n if (i > dimensions.top || j > dimensions.left) {\n this.getCell(i, j).merge(master, ignoreStyle);\n }\n }\n }\n\n // index merge\n this._merges[master.address] = dimensions;\n }\n\n _unMergeMaster(master) {\n // master is always top left of a rectangle\n const merge = this._merges[master.address];\n if (merge) {\n for (let i = merge.top; i <= merge.bottom; i++) {\n for (let j = merge.left; j <= merge.right; j++) {\n this.getCell(i, j).unmerge();\n }\n }\n delete this._merges[master.address];\n }\n }\n\n get hasMerges() {\n // return true if this._merges has a merge object\n return _.some(this._merges, Boolean);\n }\n\n // scan the range defined by ['tl:br'], [tl,br] or [t,l,b,r] and if any cell is part of a merge,\n // un-merge the group. Note this function can affect multiple merges and merge-blocks are\n // atomic - either they're all merged or all un-merged.\n unMergeCells(...cells) {\n const dimensions = new Range(cells);\n\n // find any cells in that range and unmerge them\n for (let i = dimensions.top; i <= dimensions.bottom; i++) {\n for (let j = dimensions.left; j <= dimensions.right; j++) {\n const cell = this.findCell(i, j);\n if (cell) {\n if (cell.type === Enums.ValueType.Merge) {\n // this cell merges to another master\n this._unMergeMaster(cell.master);\n } else if (this._merges[cell.address]) {\n // this cell is a master\n this._unMergeMaster(cell);\n }\n }\n }\n }\n }\n\n // ===========================================================================\n // Shared/Array Formula\n fillFormula(range, formula, results, shareType = 'shared') {\n // Define formula for top-left cell and share to rest\n const decoded = colCache.decode(range);\n const {top, left, bottom, right} = decoded;\n const width = right - left + 1;\n const masterAddress = colCache.encodeAddress(top, left);\n const isShared = shareType === 'shared';\n\n // work out result accessor\n let getResult;\n if (typeof results === 'function') {\n getResult = results;\n } else if (Array.isArray(results)) {\n if (Array.isArray(results[0])) {\n getResult = (row, col) => results[row - top][col - left];\n } else {\n // eslint-disable-next-line no-mixed-operators\n getResult = (row, col) => results[(row - top) * width + (col - left)];\n }\n } else {\n getResult = () => undefined;\n }\n let first = true;\n for (let r = top; r <= bottom; r++) {\n for (let c = left; c <= right; c++) {\n if (first) {\n this.getCell(r, c).value = {\n shareType,\n formula,\n ref: range,\n result: getResult(r, c),\n };\n first = false;\n } else {\n this.getCell(r, c).value = isShared\n ? {\n sharedFormula: masterAddress,\n result: getResult(r, c),\n }\n : getResult(r, c);\n }\n }\n }\n }\n\n // =========================================================================\n // Images\n _validateImageId(imageId) {\n if (imageId === undefined || imageId === null || !this._workbook.getImage(imageId)) {\n throw new Error(`Image with id ${imageId} not found. Add it with workbook.addImage() first`);\n }\n }\n\n addImage(imageId, range) {\n this._validateImageId(imageId);\n Image.validateRange(range);\n const model = {\n type: 'image',\n imageId,\n range,\n };\n this._media.push(new Image(this, model));\n }\n\n getImages() {\n return this._media.filter(m => m.type === 'image');\n }\n\n addBackgroundImage(imageId) {\n this._validateImageId(imageId);\n const model = {\n type: 'background',\n imageId,\n };\n this._media.push(new Image(this, model));\n }\n\n getBackgroundImageId() {\n const image = this._media.find(m => m.type === 'background');\n return image && image.imageId;\n }\n\n // =========================================================================\n // Worksheet Protection\n protect(password, options) {\n // TODO: make this function truly async\n // perhaps marshal to worker thread or something\n return new Promise(resolve => {\n this.sheetProtection = {\n sheet: true,\n };\n if (options && 'spinCount' in options) {\n // force spinCount to be integer >= 0\n options.spinCount = Number.isFinite(options.spinCount) ? Math.round(Math.max(0, options.spinCount)) : 100000;\n }\n if (password) {\n this.sheetProtection.algorithmName = 'SHA-512';\n this.sheetProtection.saltValue = Encryptor.randomBytes(16).toString('base64');\n this.sheetProtection.spinCount = options && 'spinCount' in options ? options.spinCount : 100000; // allow user specified spinCount\n this.sheetProtection.hashValue = Encryptor.convertPasswordToHash(\n password,\n 'SHA512',\n this.sheetProtection.saltValue,\n this.sheetProtection.spinCount\n );\n }\n if (options) {\n this.sheetProtection = Object.assign(this.sheetProtection, options);\n if (!password && 'spinCount' in options) {\n delete this.sheetProtection.spinCount;\n }\n }\n resolve();\n });\n }\n\n unprotect() {\n this.sheetProtection = null;\n }\n\n // =========================================================================\n // Tables\n addTable(model) {\n const table = new Table(this, model);\n this.tables[model.name] = table;\n return table;\n }\n\n getTable(name) {\n return this.tables[name];\n }\n\n removeTable(name) {\n delete this.tables[name];\n }\n\n getTables() {\n return Object.values(this.tables);\n }\n\n // =========================================================================\n // Pivot Tables\n addPivotTable(model) {\n // eslint-disable-next-line no-console\n console.warn(\n `Warning: Pivot Table support is experimental. \nPlease leave feedback at https://github.com/exceljs/exceljs/discussions/2575`\n );\n\n const pivotTable = makePivotTable(this, model);\n\n this.pivotTables.push(pivotTable);\n this.workbook.pivotTables.push(pivotTable);\n\n return pivotTable;\n }\n\n // ===========================================================================\n // Conditional Formatting\n addConditionalFormatting(cf) {\n this.conditionalFormattings.push(cf);\n }\n\n removeConditionalFormatting(filter) {\n if (typeof filter === 'number') {\n this.conditionalFormattings.splice(filter, 1);\n } else if (filter instanceof Function) {\n this.conditionalFormattings = this.conditionalFormattings.filter(filter);\n } else {\n this.conditionalFormattings = [];\n }\n }\n\n // ===========================================================================\n // Deprecated\n get tabColor() {\n // eslint-disable-next-line no-console\n console.trace('worksheet.tabColor property is now deprecated. Please use worksheet.properties.tabColor');\n return this.properties.tabColor;\n }\n\n set tabColor(value) {\n // eslint-disable-next-line no-console\n console.trace('worksheet.tabColor property is now deprecated. Please use worksheet.properties.tabColor');\n this.properties.tabColor = value;\n }\n\n // ===========================================================================\n // Model\n\n get model() {\n const model = {\n id: this.id,\n name: this.name,\n dataValidations: this.dataValidations.model,\n properties: this.properties,\n state: this.state,\n pageSetup: this.pageSetup,\n headerFooter: this.headerFooter,\n rowBreaks: this.rowBreaks,\n views: this.views,\n autoFilter: this.autoFilter,\n media: this._media.map(medium => medium.model),\n sheetProtection: this.sheetProtection,\n tables: Object.values(this.tables).map(table => table.model),\n pivotTables: this.pivotTables,\n conditionalFormattings: this.conditionalFormattings,\n };\n\n // =================================================\n // columns\n model.cols = Column.toModel(this.columns);\n\n // ==========================================================\n // Rows\n const rows = (model.rows = []);\n const dimensions = (model.dimensions = new Range());\n this._rows.forEach(row => {\n const rowModel = row && row.model;\n if (rowModel) {\n dimensions.expand(rowModel.number, rowModel.min, rowModel.number, rowModel.max);\n rows.push(rowModel);\n }\n });\n\n // ==========================================================\n // Merges\n model.merges = [];\n _.each(this._merges, merge => {\n model.merges.push(merge.range);\n });\n\n return model;\n }\n\n _parseRows(model) {\n this._rows = [];\n model.rows.forEach(rowModel => {\n const row = new Row(this, rowModel.number);\n this._rows[row.number - 1] = row;\n row.model = rowModel;\n });\n }\n\n _parseMergeCells(model) {\n _.each(model.mergeCells, merge => {\n // Do not merge styles when importing an Excel file\n // since each cell may have different styles intentionally.\n this.mergeCellsWithoutStyle(merge);\n });\n }\n\n set model(value) {\n this.name = value.name;\n this._columns = Column.fromModel(this, value.cols);\n this._parseRows(value);\n\n this._parseMergeCells(value);\n this.dataValidations = new DataValidations(value.dataValidations);\n this.properties = value.properties;\n this.pageSetup = value.pageSetup;\n this.headerFooter = value.headerFooter;\n this.views = value.views;\n this.autoFilter = value.autoFilter;\n this._media = value.media.map(medium => new Image(this, medium));\n this.sheetProtection = value.sheetProtection;\n this.tables = value.tables.reduce((tables, table) => {\n const t = new Table(this);\n t.model = table;\n tables[table.name] = t;\n return tables;\n }, {});\n this.pivotTables = value.pivotTables;\n this.conditionalFormattings = value.conditionalFormattings;\n }\n}\n\nmodule.exports = Worksheet;\n"],"mappings":"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","ignoreList":[]}
@@ -450,6 +450,9 @@ class WorksheetWriter {
450
450
  // =========================================================================
451
451
 
452
452
  addBackgroundImage(imageId) {
453
+ if (imageId === undefined || imageId === null || !this._workbook.getImage(imageId)) {
454
+ throw new Error(`Image with id ${imageId} not found. Add it with workbook.addImage() first`);
455
+ }
453
456
  this._background = {
454
457
  imageId
455
458
  };