exceljs-lts 4.5.4 → 4.5.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (36) hide show
  1. package/README.md +28 -11
  2. package/README_zh.md +18 -10
  3. package/dist/es5/doc/cell.js +37 -12
  4. package/dist/es5/doc/cell.js.map +1 -1
  5. package/dist/es5/doc/data-validations.js +94 -1
  6. package/dist/es5/doc/data-validations.js.map +1 -1
  7. package/dist/es5/stream/xlsx/workbook-reader.js +2 -1
  8. package/dist/es5/stream/xlsx/workbook-reader.js.map +1 -1
  9. package/dist/es5/stream/xlsx/workbook-writer.js +21 -1
  10. package/dist/es5/stream/xlsx/workbook-writer.js.map +1 -1
  11. package/dist/es5/stream/xlsx/worksheet-reader.js +1 -1
  12. package/dist/es5/stream/xlsx/worksheet-reader.js.map +1 -1
  13. package/dist/es5/stream/xlsx/worksheet-writer.js +87 -1
  14. package/dist/es5/stream/xlsx/worksheet-writer.js.map +1 -1
  15. package/dist/es5/xlsx/rel-type.js +1 -0
  16. package/dist/es5/xlsx/rel-type.js.map +1 -1
  17. package/dist/es5/xlsx/xform/sheet/data-validations-xform.js +14 -3
  18. package/dist/es5/xlsx/xform/sheet/data-validations-xform.js.map +1 -1
  19. package/dist/exceljs.bare.js +148 -18
  20. package/dist/exceljs.bare.js.map +5 -5
  21. package/dist/exceljs.bare.min.js +1 -1
  22. package/dist/exceljs.bare.min.js.map +1 -1
  23. package/dist/exceljs.js +148 -18
  24. package/dist/exceljs.js.map +5 -5
  25. package/dist/exceljs.min.js +4 -4
  26. package/dist/exceljs.min.js.map +1 -1
  27. package/index.d.ts +36 -3
  28. package/lib/doc/cell.js +37 -12
  29. package/lib/doc/data-validations.js +83 -1
  30. package/lib/stream/xlsx/workbook-reader.js +6 -1
  31. package/lib/stream/xlsx/workbook-writer.js +19 -0
  32. package/lib/stream/xlsx/worksheet-reader.js +1 -1
  33. package/lib/stream/xlsx/worksheet-writer.js +71 -1
  34. package/lib/xlsx/rel-type.js +1 -0
  35. package/lib/xlsx/xform/sheet/data-validations-xform.js +14 -3
  36. package/package.json +1 -1
@@ -11,6 +11,7 @@ const Column = require('../../doc/column');
11
11
  const SheetRelsWriter = require('./sheet-rels-writer');
12
12
  const SheetCommentsWriter = require('./sheet-comments-writer');
13
13
  const DataValidations = require('../../doc/data-validations');
14
+ const Image = require('../../doc/image');
14
15
  const xmlBuffer = new StringBuf();
15
16
 
16
17
  // ============================================================================================
@@ -236,6 +237,7 @@ class WorksheetWriter {
236
237
  this._writePageSetup();
237
238
  this._writeHeaderFooter();
238
239
  this._writeRowBreaks();
240
+ this._writeDrawing(); // must be after rowBreaks and before legacyDrawing
239
241
 
240
242
  // Legacy Data tag for comments
241
243
  this._writeLegacyData();
@@ -449,10 +451,35 @@ class WorksheetWriter {
449
451
 
450
452
  // =========================================================================
451
453
 
452
- addBackgroundImage(imageId) {
454
+ _validateImageId(imageId) {
453
455
  if (imageId === undefined || imageId === null || !this._workbook.getImage(imageId)) {
454
456
  throw new Error(`Image with id ${imageId} not found. Add it with workbook.addImage() first`);
455
457
  }
458
+ }
459
+ addImage(imageId, range) {
460
+ if (this.committed) {
461
+ throw new Error('Cannot add an image to a committed worksheet');
462
+ }
463
+ this._validateImageId(imageId);
464
+ Image.validateRange(range);
465
+ // Anchors look up column widths and row heights to convert fractional positions.
466
+ // Only look at what already exists: getRow() would create (and later write) empty rows.
467
+ const lookup = {
468
+ properties: this.properties,
469
+ getColumn: c => this._columns && this._columns[c - 1],
470
+ getRow: r => this.findRow(r)
471
+ };
472
+ this._media.push(new Image(lookup, {
473
+ type: 'image',
474
+ imageId,
475
+ range
476
+ }));
477
+ }
478
+ getImages() {
479
+ return this._media.filter(m => m.type === 'image');
480
+ }
481
+ addBackgroundImage(imageId) {
482
+ this._validateImageId(imageId);
456
483
  this._background = {
457
484
  imageId
458
485
  };
@@ -634,6 +661,65 @@ class WorksheetWriter {
634
661
  }));
635
662
  }
636
663
  }
664
+ _writeDrawing() {
665
+ const images = this.getImages();
666
+ if (!images.length) {
667
+ return;
668
+ }
669
+ const name = `drawing${this.id}`;
670
+ const rId = this._sheetRelsWriter.addRelationship({
671
+ Target: `../drawings/${name}.xml`,
672
+ Type: RelType.Drawing
673
+ });
674
+ const drawing = {
675
+ rId,
676
+ name,
677
+ anchors: [],
678
+ rels: []
679
+ };
680
+ const nextRid = () => `rId${drawing.rels.length + 1}`;
681
+ const imageRIds = {};
682
+ images.forEach(image => {
683
+ const {
684
+ imageId,
685
+ range,
686
+ hyperlinks
687
+ } = image.model;
688
+ let imageRId = imageRIds[imageId];
689
+ if (!imageRId) {
690
+ imageRId = imageRIds[imageId] = nextRid();
691
+ drawing.rels.push({
692
+ Id: imageRId,
693
+ Type: RelType.Image,
694
+ Target: `../media/${this._workbook.getImage(imageId).name}`
695
+ });
696
+ }
697
+ const anchor = {
698
+ picture: {
699
+ rId: imageRId
700
+ },
701
+ range
702
+ };
703
+ if (hyperlinks && hyperlinks.hyperlink) {
704
+ const hyperlinkRId = nextRid();
705
+ anchor.picture.hyperlinks = {
706
+ tooltip: hyperlinks.tooltip,
707
+ rId: hyperlinkRId
708
+ };
709
+ drawing.rels.push({
710
+ Id: hyperlinkRId,
711
+ Type: RelType.Hyperlink,
712
+ Target: hyperlinks.hyperlink,
713
+ TargetMode: 'External'
714
+ });
715
+ }
716
+ drawing.anchors.push(anchor);
717
+ });
718
+ this._workbook.drawings.push(drawing);
719
+ xmlBuffer.reset();
720
+ xmlBuffer.addText(`<drawing r:id="${rId}"/>`);
721
+ this.stream.write(xmlBuffer);
722
+ }
637
723
  _writeLegacyData() {
638
724
  if (this.hasComments) {
639
725
  xmlBuffer.reset();
@@ -1 +1 @@
1
- {"version":3,"file":"worksheet-writer.js","names":["_","require","RelType","colCache","Encryptor","Dimensions","StringBuf","Row","Column","SheetRelsWriter","SheetCommentsWriter","DataValidations","xmlBuffer","ListXform","DataValidationsXform","SheetPropertiesXform","SheetFormatPropertiesXform","ColXform","RowXform","HyperlinkXform","SheetViewXform","SheetProtectionXform","PageMarginsXform","PageSetupXform","AutoFilterXform","PictureXform","ConditionalFormattingsXform","HeaderFooterXform","RowBreaksXform","xform","dataValidations","sheetProperties","sheetFormatProperties","columns","tag","length","childXform","row","hyperlinks","sheetViews","sheetProtection","pageMargins","pageSeteup","autoFilter","picture","conditionalFormattings","headerFooter","rowBreaks","WorksheetWriter","constructor","options","id","name","state","_rows","_columns","_keys","_merges","add","_sheetRelsWriter","_sheetCommentsWriter","_dimensions","_rowZero","committed","_formulae","_siFormulae","conditionalFormatting","properties","Object","assign","defaultRowHeight","dyDescent","outlineLevelCol","outlineLevelRow","differentFirst","differentOddEven","oddHeader","oddFooter","evenHeader","evenFooter","firstHeader","firstFooter","pageSetup","margins","left","right","top","bottom","header","footer","orientation","horizontalDpi","verticalDpi","fitToPage","fitToWidth","fitToHeight","scale","pageOrder","blackAndWhite","draft","cellComments","errors","paperSize","undefined","showRowColHeaders","showGridLines","horizontalCentered","verticalCentered","colBreaks","useSharedStrings","_workbook","workbook","hasComments","_views","views","_media","_writeOpenWorksheet","startedData","stream","_stream","_openStream","pause","destroy","Error","commit","forEach","cRow","_writeRow","_writeOpenSheetData","_writeCloseSheetData","_writeSheetProtection","_writeAutoFilter","_writeMergeCells","_writeConditionalFormatting","_writeDataValidations","_writeHyperlinks","_writePageMargins","_writePageSetup","_writeHeaderFooter","_writeRowBreaks","_writeLegacyData","_writeBackground","_writeCloseWorksheet","end","dimensions","value","_headerRowCount","reduce","pv","cv","headerCount","headers","Math","max","count","defn","column","push","getColumnKey","key","setColumnKey","deleteColumnKey","eachColumnKey","f","each","getColumn","c","col","l2n","n","_nextRow","eachRow","iteratee","includeEmpty","i","getRow","hasValues","number","_commitRow","found","shift","lastRow","findRow","rowNumber","index","addRow","values","findCell","r","address","getAddress","getCell","getCellEx","mergeCells","cells","merge","intersects","master","j","addConditionalFormatting","cf","removeConditionalFormatting","filter","splice","Function","addBackgroundImage","imageId","getImage","_background","getBackgroundImageId","protect","password","Promise","resolve","sheet","spinCount","Number","isFinite","round","algorithmName","saltValue","randomBytes","toString","hashValue","convertPasswordToHash","unprotect","_write","text","reset","addText","write","_writeSheetProperties","xmlBuf","sheetPropertiesModel","outlineProperties","tabColor","toXml","_writeSheetFormatProperties","sheetFormatPropertiesModel","defaultColWidth","_writeColumns","cols","toModel","prepare","styles","height","model","sharedStrings","hyperlinksProxy","merges","formulae","siFormulae","comments","addComments","_hyperlinks","image","pictureId","addMedia","Target","Type","Image","rId","vmlRelId","_writeDimensions","module","exports"],"sources":["../../../../lib/stream/xlsx/worksheet-writer.js"],"sourcesContent":["const _ = require('../../utils/under-dash');\n\nconst RelType = require('../../xlsx/rel-type');\n\nconst colCache = require('../../utils/col-cache');\nconst Encryptor = require('../../utils/encryptor');\nconst Dimensions = require('../../doc/range');\nconst StringBuf = require('../../utils/string-buf');\n\nconst Row = require('../../doc/row');\nconst Column = require('../../doc/column');\n\nconst SheetRelsWriter = require('./sheet-rels-writer');\nconst SheetCommentsWriter = require('./sheet-comments-writer');\nconst DataValidations = require('../../doc/data-validations');\n\nconst xmlBuffer = new StringBuf();\n\n// ============================================================================================\n// Xforms\nconst ListXform = require('../../xlsx/xform/list-xform');\nconst DataValidationsXform = require('../../xlsx/xform/sheet/data-validations-xform');\nconst SheetPropertiesXform = require('../../xlsx/xform/sheet/sheet-properties-xform');\nconst SheetFormatPropertiesXform = require('../../xlsx/xform/sheet/sheet-format-properties-xform');\nconst ColXform = require('../../xlsx/xform/sheet/col-xform');\nconst RowXform = require('../../xlsx/xform/sheet/row-xform');\nconst HyperlinkXform = require('../../xlsx/xform/sheet/hyperlink-xform');\nconst SheetViewXform = require('../../xlsx/xform/sheet/sheet-view-xform');\nconst SheetProtectionXform = require('../../xlsx/xform/sheet/sheet-protection-xform');\nconst PageMarginsXform = require('../../xlsx/xform/sheet/page-margins-xform');\nconst PageSetupXform = require('../../xlsx/xform/sheet/page-setup-xform');\nconst AutoFilterXform = require('../../xlsx/xform/sheet/auto-filter-xform');\nconst PictureXform = require('../../xlsx/xform/sheet/picture-xform');\nconst ConditionalFormattingsXform = require('../../xlsx/xform/sheet/cf/conditional-formattings-xform');\nconst HeaderFooterXform = require('../../xlsx/xform/sheet/header-footer-xform');\nconst RowBreaksXform = require('../../xlsx/xform/sheet/row-breaks-xform');\n\n// since prepare and render are functional, we can use singletons\nconst xform = {\n dataValidations: new DataValidationsXform(),\n sheetProperties: new SheetPropertiesXform(),\n sheetFormatProperties: new SheetFormatPropertiesXform(),\n columns: new ListXform({tag: 'cols', length: false, childXform: new ColXform()}),\n row: new RowXform(),\n hyperlinks: new ListXform({tag: 'hyperlinks', length: false, childXform: new HyperlinkXform()}),\n sheetViews: new ListXform({tag: 'sheetViews', length: false, childXform: new SheetViewXform()}),\n sheetProtection: new SheetProtectionXform(),\n pageMargins: new PageMarginsXform(),\n pageSeteup: new PageSetupXform(),\n autoFilter: new AutoFilterXform(),\n picture: new PictureXform(),\n conditionalFormattings: new ConditionalFormattingsXform(),\n headerFooter: new HeaderFooterXform(),\n rowBreaks: new RowBreaksXform(),\n};\n\n// ============================================================================================\n\nclass WorksheetWriter {\n constructor(options) {\n // in a workbook, each sheet will have a number\n this.id = options.id;\n\n // and a name\n this.name = options.name || `Sheet${this.id}`;\n\n // add a state\n this.state = options.state || 'visible';\n\n // rows are stored here while they need to be worked on.\n // when they are committed, they will be deleted.\n this._rows = [];\n\n // column definitions\n this._columns = null;\n\n // column keys (addRow convenience): key ==> this._columns index\n this._keys = {};\n\n // keep a record of all row and column pageBreaks\n this._merges = [];\n this._merges.add = function() {}; // ignore cell instruction\n\n // keep record of all hyperlinks\n this._sheetRelsWriter = new SheetRelsWriter(options);\n\n this._sheetCommentsWriter = new SheetCommentsWriter(this, this._sheetRelsWriter, options);\n\n // keep a record of dimensions\n this._dimensions = new Dimensions();\n\n // first uncommitted row\n this._rowZero = 1;\n\n // committed flag\n this.committed = false;\n\n // for data validations\n this.dataValidations = new DataValidations();\n\n // for sharing formulae\n this._formulae = {};\n this._siFormulae = 0;\n\n // keep a record of conditionalFormattings\n this.conditionalFormatting = [];\n\n // keep a record of all row and column pageBreaks\n this.rowBreaks = [];\n\n // for 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 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 // 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 horizontalCentered: false,\n verticalCentered: false,\n rowBreaks: null,\n colBreaks: null,\n },\n options.pageSetup\n );\n\n // using shared strings creates a smaller xlsx file but may use more memory\n this.useSharedStrings = options.useSharedStrings || false;\n\n this._workbook = options.workbook;\n\n this.hasComments = false;\n\n // views\n this._views = options.views || [];\n\n // auto filter\n this.autoFilter = options.autoFilter || null;\n\n this._media = [];\n\n // worksheet protection\n this.sheetProtection = null;\n\n // start writing to stream now\n this._writeOpenWorksheet();\n\n this.startedData = false;\n }\n\n get workbook() {\n return this._workbook;\n }\n\n get stream() {\n if (!this._stream) {\n // eslint-disable-next-line no-underscore-dangle\n this._stream = this._workbook._openStream(`/xl/worksheets/sheet${this.id}.xml`);\n\n // pause stream to prevent 'data' events\n this._stream.pause();\n }\n return this._stream;\n }\n\n // destroy - not a valid operation for a streaming writer\n // even though some streamers might be able to, it's a bad idea.\n destroy() {\n throw new Error('Invalid Operation: destroy');\n }\n\n commit() {\n if (this.committed) {\n return;\n }\n // commit all rows\n this._rows.forEach(cRow => {\n if (cRow) {\n // write the row to the stream\n this._writeRow(cRow);\n }\n });\n\n // we _cannot_ accept new rows from now on\n this._rows = null;\n\n if (!this.startedData) {\n this._writeOpenSheetData();\n }\n this._writeCloseSheetData();\n // Note: element order must follow CT_Worksheet (see worksheet-xform.js)\n this._writeSheetProtection(); // must be after sheetData and before autoFilter\n this._writeAutoFilter();\n this._writeMergeCells();\n\n // for some reason, Excel can't handle dimensions at the bottom of the file\n // this._writeDimensions();\n\n this._writeConditionalFormatting(); // must be before dataValidations\n this._writeDataValidations();\n this._writeHyperlinks();\n this._writePageMargins();\n this._writePageSetup();\n this._writeHeaderFooter();\n this._writeRowBreaks();\n\n // Legacy Data tag for comments\n this._writeLegacyData();\n this._writeBackground(); // must be after legacyDrawing\n\n this._writeCloseWorksheet();\n // signal end of stream to workbook\n this.stream.end();\n\n this._sheetCommentsWriter.commit();\n // also commit the hyperlinks if any\n this._sheetRelsWriter.commit();\n\n this.committed = true;\n }\n\n // return the current dimensions of the writer\n get dimensions() {\n return this._dimensions;\n }\n\n get views() {\n return this._views;\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, it and any gaps before it\n // are created.\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 // =========================================================================\n // Rows\n get _nextRow() {\n return this._rowZero + this._rows.length;\n }\n\n // iterate over every uncommitted 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._nextRow;\n for (let i = this._rowZero; i < n; i++) {\n iteratee(this.getRow(i), i);\n }\n } else {\n this._rows.forEach(row => {\n if (row.hasValues) {\n iteratee(row, row.number);\n }\n });\n }\n }\n\n _commitRow(cRow) {\n // since rows must be written in order, we commit all rows up till and including cRow\n let found = false;\n while (this._rows.length && !found) {\n const row = this._rows.shift();\n this._rowZero++;\n if (row) {\n this._writeRow(row);\n found = row.number === cRow.number;\n this._rowZero = row.number + 1;\n }\n }\n }\n\n get lastRow() {\n // returns last uncommitted row\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(rowNumber) {\n const index = rowNumber - this._rowZero;\n return this._rows[index];\n }\n\n getRow(rowNumber) {\n const index = rowNumber - this._rowZero;\n\n // may fail if rows have been comitted\n if (index < 0) {\n throw new Error('Out of bounds: this row has been committed');\n }\n let row = this._rows[index];\n if (!row) {\n this._rows[index] = row = new Row(this, rowNumber);\n }\n return row;\n }\n\n addRow(value) {\n const row = new Row(this, this._nextRow);\n this._rows[row.number - this._rowZero] = row;\n row.values = value;\n return row;\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.findRow(address.row);\n return row ? row.findCell(address.column) : 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 mergeCells(...cells) {\n // may fail if rows have been comitted\n const dimensions = new Dimensions(cells);\n\n // check cells aren't already merged\n this._merges.forEach(merge => {\n if (merge.intersects(dimensions)) {\n throw new Error('Cannot merge already merged cells');\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 if (i > dimensions.top || j > dimensions.left) {\n this.getCell(i, j).merge(master);\n }\n }\n }\n\n // index merge\n this._merges.push(dimensions);\n }\n\n // ===========================================================================\n // Conditional Formatting\n addConditionalFormatting(cf) {\n this.conditionalFormatting.push(cf);\n }\n\n removeConditionalFormatting(filter) {\n if (typeof filter === 'number') {\n this.conditionalFormatting.splice(filter, 1);\n } else if (filter instanceof Function) {\n this.conditionalFormatting = this.conditionalFormatting.filter(filter);\n } else {\n this.conditionalFormatting = [];\n }\n }\n\n // =========================================================================\n\n addBackgroundImage(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 this._background = {\n imageId,\n };\n }\n\n getBackgroundImageId() {\n return this._background && this._background.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\n _write(text) {\n xmlBuffer.reset();\n xmlBuffer.addText(text);\n this.stream.write(xmlBuffer);\n }\n\n _writeSheetProperties(xmlBuf, properties, pageSetup) {\n const sheetPropertiesModel = {\n outlineProperties: properties && properties.outlineProperties,\n tabColor: properties && properties.tabColor,\n pageSetup:\n pageSetup && pageSetup.fitToPage\n ? {\n fitToPage: pageSetup.fitToPage,\n }\n : undefined,\n };\n\n xmlBuf.addText(xform.sheetProperties.toXml(sheetPropertiesModel));\n }\n\n _writeSheetFormatProperties(xmlBuf, properties) {\n const sheetFormatPropertiesModel = properties\n ? {\n defaultRowHeight: properties.defaultRowHeight,\n dyDescent: properties.dyDescent,\n outlineLevelCol: properties.outlineLevelCol,\n outlineLevelRow: properties.outlineLevelRow,\n }\n : undefined;\n if (properties.defaultColWidth) {\n sheetFormatPropertiesModel.defaultColWidth = properties.defaultColWidth;\n }\n\n xmlBuf.addText(xform.sheetFormatProperties.toXml(sheetFormatPropertiesModel));\n }\n\n _writeOpenWorksheet() {\n xmlBuffer.reset();\n\n xmlBuffer.addText('<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>');\n xmlBuffer.addText(\n '<worksheet xmlns=\"http://schemas.openxmlformats.org/spreadsheetml/2006/main\"' +\n ' xmlns:r=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships\"' +\n ' xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\"' +\n ' mc:Ignorable=\"x14ac\"' +\n ' xmlns:x14ac=\"http://schemas.microsoft.com/office/spreadsheetml/2009/9/ac\">'\n );\n\n this._writeSheetProperties(xmlBuffer, this.properties, this.pageSetup);\n\n xmlBuffer.addText(xform.sheetViews.toXml(this.views));\n\n this._writeSheetFormatProperties(xmlBuffer, this.properties);\n\n this.stream.write(xmlBuffer);\n }\n\n _writeColumns() {\n const cols = Column.toModel(this.columns);\n if (cols) {\n xform.columns.prepare(cols, {styles: this._workbook.styles});\n this.stream.write(xform.columns.toXml(cols));\n }\n }\n\n _writeOpenSheetData() {\n this._write('<sheetData>');\n }\n\n _writeRow(row) {\n if (!this.startedData) {\n this._writeColumns();\n this._writeOpenSheetData();\n this.startedData = true;\n }\n\n if (row.hasValues || row.height) {\n const {model} = row;\n const options = {\n styles: this._workbook.styles,\n sharedStrings: this.useSharedStrings ? this._workbook.sharedStrings : undefined,\n hyperlinks: this._sheetRelsWriter.hyperlinksProxy,\n merges: this._merges,\n formulae: this._formulae,\n siFormulae: this._siFormulae,\n comments: [],\n };\n xform.row.prepare(model, options);\n this.stream.write(xform.row.toXml(model));\n\n if (options.comments.length) {\n this.hasComments = true;\n this._sheetCommentsWriter.addComments(options.comments);\n }\n }\n }\n\n _writeCloseSheetData() {\n this._write('</sheetData>');\n }\n\n _writeMergeCells() {\n if (this._merges.length) {\n xmlBuffer.reset();\n xmlBuffer.addText(`<mergeCells count=\"${this._merges.length}\">`);\n this._merges.forEach(merge => {\n xmlBuffer.addText(`<mergeCell ref=\"${merge}\"/>`);\n });\n xmlBuffer.addText('</mergeCells>');\n\n this.stream.write(xmlBuffer);\n }\n }\n\n _writeHyperlinks() {\n // eslint-disable-next-line no-underscore-dangle\n this.stream.write(xform.hyperlinks.toXml(this._sheetRelsWriter._hyperlinks));\n }\n\n _writeConditionalFormatting() {\n const options = {\n styles: this._workbook.styles,\n };\n xform.conditionalFormattings.prepare(this.conditionalFormatting, options);\n this.stream.write(xform.conditionalFormattings.toXml(this.conditionalFormatting));\n }\n\n _writeRowBreaks() {\n this.stream.write(xform.rowBreaks.toXml(this.rowBreaks));\n }\n\n _writeDataValidations() {\n this.stream.write(xform.dataValidations.toXml(this.dataValidations.model));\n }\n\n _writeSheetProtection() {\n this.stream.write(xform.sheetProtection.toXml(this.sheetProtection));\n }\n\n _writePageMargins() {\n this.stream.write(xform.pageMargins.toXml(this.pageSetup.margins));\n }\n\n _writePageSetup() {\n this.stream.write(xform.pageSeteup.toXml(this.pageSetup));\n }\n\n _writeHeaderFooter() {\n this.stream.write(xform.headerFooter.toXml(this.headerFooter));\n }\n\n _writeAutoFilter() {\n this.stream.write(xform.autoFilter.toXml(this.autoFilter));\n }\n\n _writeBackground() {\n if (this._background) {\n if (this._background.imageId !== undefined) {\n const image = this._workbook.getImage(this._background.imageId);\n const pictureId = this._sheetRelsWriter.addMedia({\n Target: `../media/${image.name}`,\n Type: RelType.Image,\n });\n\n this._background = {\n ...this._background,\n rId: pictureId,\n };\n }\n this.stream.write(xform.picture.toXml({rId: this._background.rId}));\n }\n }\n\n _writeLegacyData() {\n if (this.hasComments) {\n xmlBuffer.reset();\n xmlBuffer.addText(`<legacyDrawing r:id=\"${this._sheetCommentsWriter.vmlRelId}\"/>`);\n this.stream.write(xmlBuffer);\n }\n }\n\n _writeDimensions() {\n // for some reason, Excel can't handle dimensions at the bottom of the file\n // and we don't know the dimensions until the commit, so don't write them.\n // this._write('<dimension ref=\"' + this._dimensions + '\"/>');\n }\n\n _writeCloseWorksheet() {\n this._write('</worksheet>');\n }\n}\n\nmodule.exports = WorksheetWriter;\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"worksheet-writer.js","names":["_","require","RelType","colCache","Encryptor","Dimensions","StringBuf","Row","Column","SheetRelsWriter","SheetCommentsWriter","DataValidations","Image","xmlBuffer","ListXform","DataValidationsXform","SheetPropertiesXform","SheetFormatPropertiesXform","ColXform","RowXform","HyperlinkXform","SheetViewXform","SheetProtectionXform","PageMarginsXform","PageSetupXform","AutoFilterXform","PictureXform","ConditionalFormattingsXform","HeaderFooterXform","RowBreaksXform","xform","dataValidations","sheetProperties","sheetFormatProperties","columns","tag","length","childXform","row","hyperlinks","sheetViews","sheetProtection","pageMargins","pageSeteup","autoFilter","picture","conditionalFormattings","headerFooter","rowBreaks","WorksheetWriter","constructor","options","id","name","state","_rows","_columns","_keys","_merges","add","_sheetRelsWriter","_sheetCommentsWriter","_dimensions","_rowZero","committed","_formulae","_siFormulae","conditionalFormatting","properties","Object","assign","defaultRowHeight","dyDescent","outlineLevelCol","outlineLevelRow","differentFirst","differentOddEven","oddHeader","oddFooter","evenHeader","evenFooter","firstHeader","firstFooter","pageSetup","margins","left","right","top","bottom","header","footer","orientation","horizontalDpi","verticalDpi","fitToPage","fitToWidth","fitToHeight","scale","pageOrder","blackAndWhite","draft","cellComments","errors","paperSize","undefined","showRowColHeaders","showGridLines","horizontalCentered","verticalCentered","colBreaks","useSharedStrings","_workbook","workbook","hasComments","_views","views","_media","_writeOpenWorksheet","startedData","stream","_stream","_openStream","pause","destroy","Error","commit","forEach","cRow","_writeRow","_writeOpenSheetData","_writeCloseSheetData","_writeSheetProtection","_writeAutoFilter","_writeMergeCells","_writeConditionalFormatting","_writeDataValidations","_writeHyperlinks","_writePageMargins","_writePageSetup","_writeHeaderFooter","_writeRowBreaks","_writeDrawing","_writeLegacyData","_writeBackground","_writeCloseWorksheet","end","dimensions","value","_headerRowCount","reduce","pv","cv","headerCount","headers","Math","max","count","defn","column","push","getColumnKey","key","setColumnKey","deleteColumnKey","eachColumnKey","f","each","getColumn","c","col","l2n","n","_nextRow","eachRow","iteratee","includeEmpty","i","getRow","hasValues","number","_commitRow","found","shift","lastRow","findRow","rowNumber","index","addRow","values","findCell","r","address","getAddress","getCell","getCellEx","mergeCells","cells","merge","intersects","master","j","addConditionalFormatting","cf","removeConditionalFormatting","filter","splice","Function","_validateImageId","imageId","getImage","addImage","range","validateRange","lookup","type","getImages","m","addBackgroundImage","_background","getBackgroundImageId","protect","password","Promise","resolve","sheet","spinCount","Number","isFinite","round","algorithmName","saltValue","randomBytes","toString","hashValue","convertPasswordToHash","unprotect","_write","text","reset","addText","write","_writeSheetProperties","xmlBuf","sheetPropertiesModel","outlineProperties","tabColor","toXml","_writeSheetFormatProperties","sheetFormatPropertiesModel","defaultColWidth","_writeColumns","cols","toModel","prepare","styles","height","model","sharedStrings","hyperlinksProxy","merges","formulae","siFormulae","comments","addComments","_hyperlinks","image","pictureId","addMedia","Target","Type","rId","images","addRelationship","Drawing","drawing","anchors","rels","nextRid","imageRIds","imageRId","Id","anchor","hyperlink","hyperlinkRId","tooltip","Hyperlink","TargetMode","drawings","vmlRelId","_writeDimensions","module","exports"],"sources":["../../../../lib/stream/xlsx/worksheet-writer.js"],"sourcesContent":["const _ = require('../../utils/under-dash');\n\nconst RelType = require('../../xlsx/rel-type');\n\nconst colCache = require('../../utils/col-cache');\nconst Encryptor = require('../../utils/encryptor');\nconst Dimensions = require('../../doc/range');\nconst StringBuf = require('../../utils/string-buf');\n\nconst Row = require('../../doc/row');\nconst Column = require('../../doc/column');\n\nconst SheetRelsWriter = require('./sheet-rels-writer');\nconst SheetCommentsWriter = require('./sheet-comments-writer');\nconst DataValidations = require('../../doc/data-validations');\nconst Image = require('../../doc/image');\n\nconst xmlBuffer = new StringBuf();\n\n// ============================================================================================\n// Xforms\nconst ListXform = require('../../xlsx/xform/list-xform');\nconst DataValidationsXform = require('../../xlsx/xform/sheet/data-validations-xform');\nconst SheetPropertiesXform = require('../../xlsx/xform/sheet/sheet-properties-xform');\nconst SheetFormatPropertiesXform = require('../../xlsx/xform/sheet/sheet-format-properties-xform');\nconst ColXform = require('../../xlsx/xform/sheet/col-xform');\nconst RowXform = require('../../xlsx/xform/sheet/row-xform');\nconst HyperlinkXform = require('../../xlsx/xform/sheet/hyperlink-xform');\nconst SheetViewXform = require('../../xlsx/xform/sheet/sheet-view-xform');\nconst SheetProtectionXform = require('../../xlsx/xform/sheet/sheet-protection-xform');\nconst PageMarginsXform = require('../../xlsx/xform/sheet/page-margins-xform');\nconst PageSetupXform = require('../../xlsx/xform/sheet/page-setup-xform');\nconst AutoFilterXform = require('../../xlsx/xform/sheet/auto-filter-xform');\nconst PictureXform = require('../../xlsx/xform/sheet/picture-xform');\nconst ConditionalFormattingsXform = require('../../xlsx/xform/sheet/cf/conditional-formattings-xform');\nconst HeaderFooterXform = require('../../xlsx/xform/sheet/header-footer-xform');\nconst RowBreaksXform = require('../../xlsx/xform/sheet/row-breaks-xform');\n\n// since prepare and render are functional, we can use singletons\nconst xform = {\n dataValidations: new DataValidationsXform(),\n sheetProperties: new SheetPropertiesXform(),\n sheetFormatProperties: new SheetFormatPropertiesXform(),\n columns: new ListXform({tag: 'cols', length: false, childXform: new ColXform()}),\n row: new RowXform(),\n hyperlinks: new ListXform({tag: 'hyperlinks', length: false, childXform: new HyperlinkXform()}),\n sheetViews: new ListXform({tag: 'sheetViews', length: false, childXform: new SheetViewXform()}),\n sheetProtection: new SheetProtectionXform(),\n pageMargins: new PageMarginsXform(),\n pageSeteup: new PageSetupXform(),\n autoFilter: new AutoFilterXform(),\n picture: new PictureXform(),\n conditionalFormattings: new ConditionalFormattingsXform(),\n headerFooter: new HeaderFooterXform(),\n rowBreaks: new RowBreaksXform(),\n};\n\n// ============================================================================================\n\nclass WorksheetWriter {\n constructor(options) {\n // in a workbook, each sheet will have a number\n this.id = options.id;\n\n // and a name\n this.name = options.name || `Sheet${this.id}`;\n\n // add a state\n this.state = options.state || 'visible';\n\n // rows are stored here while they need to be worked on.\n // when they are committed, they will be deleted.\n this._rows = [];\n\n // column definitions\n this._columns = null;\n\n // column keys (addRow convenience): key ==> this._columns index\n this._keys = {};\n\n // keep a record of all row and column pageBreaks\n this._merges = [];\n this._merges.add = function() {}; // ignore cell instruction\n\n // keep record of all hyperlinks\n this._sheetRelsWriter = new SheetRelsWriter(options);\n\n this._sheetCommentsWriter = new SheetCommentsWriter(this, this._sheetRelsWriter, options);\n\n // keep a record of dimensions\n this._dimensions = new Dimensions();\n\n // first uncommitted row\n this._rowZero = 1;\n\n // committed flag\n this.committed = false;\n\n // for data validations\n this.dataValidations = new DataValidations();\n\n // for sharing formulae\n this._formulae = {};\n this._siFormulae = 0;\n\n // keep a record of conditionalFormattings\n this.conditionalFormatting = [];\n\n // keep a record of all row and column pageBreaks\n this.rowBreaks = [];\n\n // for 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 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 // 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 horizontalCentered: false,\n verticalCentered: false,\n rowBreaks: null,\n colBreaks: null,\n },\n options.pageSetup\n );\n\n // using shared strings creates a smaller xlsx file but may use more memory\n this.useSharedStrings = options.useSharedStrings || false;\n\n this._workbook = options.workbook;\n\n this.hasComments = false;\n\n // views\n this._views = options.views || [];\n\n // auto filter\n this.autoFilter = options.autoFilter || null;\n\n this._media = [];\n\n // worksheet protection\n this.sheetProtection = null;\n\n // start writing to stream now\n this._writeOpenWorksheet();\n\n this.startedData = false;\n }\n\n get workbook() {\n return this._workbook;\n }\n\n get stream() {\n if (!this._stream) {\n // eslint-disable-next-line no-underscore-dangle\n this._stream = this._workbook._openStream(`/xl/worksheets/sheet${this.id}.xml`);\n\n // pause stream to prevent 'data' events\n this._stream.pause();\n }\n return this._stream;\n }\n\n // destroy - not a valid operation for a streaming writer\n // even though some streamers might be able to, it's a bad idea.\n destroy() {\n throw new Error('Invalid Operation: destroy');\n }\n\n commit() {\n if (this.committed) {\n return;\n }\n // commit all rows\n this._rows.forEach(cRow => {\n if (cRow) {\n // write the row to the stream\n this._writeRow(cRow);\n }\n });\n\n // we _cannot_ accept new rows from now on\n this._rows = null;\n\n if (!this.startedData) {\n this._writeOpenSheetData();\n }\n this._writeCloseSheetData();\n // Note: element order must follow CT_Worksheet (see worksheet-xform.js)\n this._writeSheetProtection(); // must be after sheetData and before autoFilter\n this._writeAutoFilter();\n this._writeMergeCells();\n\n // for some reason, Excel can't handle dimensions at the bottom of the file\n // this._writeDimensions();\n\n this._writeConditionalFormatting(); // must be before dataValidations\n this._writeDataValidations();\n this._writeHyperlinks();\n this._writePageMargins();\n this._writePageSetup();\n this._writeHeaderFooter();\n this._writeRowBreaks();\n this._writeDrawing(); // must be after rowBreaks and before legacyDrawing\n\n // Legacy Data tag for comments\n this._writeLegacyData();\n this._writeBackground(); // must be after legacyDrawing\n\n this._writeCloseWorksheet();\n // signal end of stream to workbook\n this.stream.end();\n\n this._sheetCommentsWriter.commit();\n // also commit the hyperlinks if any\n this._sheetRelsWriter.commit();\n\n this.committed = true;\n }\n\n // return the current dimensions of the writer\n get dimensions() {\n return this._dimensions;\n }\n\n get views() {\n return this._views;\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, it and any gaps before it\n // are created.\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 // =========================================================================\n // Rows\n get _nextRow() {\n return this._rowZero + this._rows.length;\n }\n\n // iterate over every uncommitted 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._nextRow;\n for (let i = this._rowZero; i < n; i++) {\n iteratee(this.getRow(i), i);\n }\n } else {\n this._rows.forEach(row => {\n if (row.hasValues) {\n iteratee(row, row.number);\n }\n });\n }\n }\n\n _commitRow(cRow) {\n // since rows must be written in order, we commit all rows up till and including cRow\n let found = false;\n while (this._rows.length && !found) {\n const row = this._rows.shift();\n this._rowZero++;\n if (row) {\n this._writeRow(row);\n found = row.number === cRow.number;\n this._rowZero = row.number + 1;\n }\n }\n }\n\n get lastRow() {\n // returns last uncommitted row\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(rowNumber) {\n const index = rowNumber - this._rowZero;\n return this._rows[index];\n }\n\n getRow(rowNumber) {\n const index = rowNumber - this._rowZero;\n\n // may fail if rows have been comitted\n if (index < 0) {\n throw new Error('Out of bounds: this row has been committed');\n }\n let row = this._rows[index];\n if (!row) {\n this._rows[index] = row = new Row(this, rowNumber);\n }\n return row;\n }\n\n addRow(value) {\n const row = new Row(this, this._nextRow);\n this._rows[row.number - this._rowZero] = row;\n row.values = value;\n return row;\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.findRow(address.row);\n return row ? row.findCell(address.column) : 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 mergeCells(...cells) {\n // may fail if rows have been comitted\n const dimensions = new Dimensions(cells);\n\n // check cells aren't already merged\n this._merges.forEach(merge => {\n if (merge.intersects(dimensions)) {\n throw new Error('Cannot merge already merged cells');\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 if (i > dimensions.top || j > dimensions.left) {\n this.getCell(i, j).merge(master);\n }\n }\n }\n\n // index merge\n this._merges.push(dimensions);\n }\n\n // ===========================================================================\n // Conditional Formatting\n addConditionalFormatting(cf) {\n this.conditionalFormatting.push(cf);\n }\n\n removeConditionalFormatting(filter) {\n if (typeof filter === 'number') {\n this.conditionalFormatting.splice(filter, 1);\n } else if (filter instanceof Function) {\n this.conditionalFormatting = this.conditionalFormatting.filter(filter);\n } else {\n this.conditionalFormatting = [];\n }\n }\n\n // =========================================================================\n\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 if (this.committed) {\n throw new Error('Cannot add an image to a committed worksheet');\n }\n this._validateImageId(imageId);\n Image.validateRange(range);\n // Anchors look up column widths and row heights to convert fractional positions.\n // Only look at what already exists: getRow() would create (and later write) empty rows.\n const lookup = {\n properties: this.properties,\n getColumn: c => this._columns && this._columns[c - 1],\n getRow: r => this.findRow(r),\n };\n this._media.push(new Image(lookup, {type: 'image', imageId, range}));\n }\n\n getImages() {\n return this._media.filter(m => m.type === 'image');\n }\n\n addBackgroundImage(imageId) {\n this._validateImageId(imageId);\n this._background = {\n imageId,\n };\n }\n\n getBackgroundImageId() {\n return this._background && this._background.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\n _write(text) {\n xmlBuffer.reset();\n xmlBuffer.addText(text);\n this.stream.write(xmlBuffer);\n }\n\n _writeSheetProperties(xmlBuf, properties, pageSetup) {\n const sheetPropertiesModel = {\n outlineProperties: properties && properties.outlineProperties,\n tabColor: properties && properties.tabColor,\n pageSetup:\n pageSetup && pageSetup.fitToPage\n ? {\n fitToPage: pageSetup.fitToPage,\n }\n : undefined,\n };\n\n xmlBuf.addText(xform.sheetProperties.toXml(sheetPropertiesModel));\n }\n\n _writeSheetFormatProperties(xmlBuf, properties) {\n const sheetFormatPropertiesModel = properties\n ? {\n defaultRowHeight: properties.defaultRowHeight,\n dyDescent: properties.dyDescent,\n outlineLevelCol: properties.outlineLevelCol,\n outlineLevelRow: properties.outlineLevelRow,\n }\n : undefined;\n if (properties.defaultColWidth) {\n sheetFormatPropertiesModel.defaultColWidth = properties.defaultColWidth;\n }\n\n xmlBuf.addText(xform.sheetFormatProperties.toXml(sheetFormatPropertiesModel));\n }\n\n _writeOpenWorksheet() {\n xmlBuffer.reset();\n\n xmlBuffer.addText('<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>');\n xmlBuffer.addText(\n '<worksheet xmlns=\"http://schemas.openxmlformats.org/spreadsheetml/2006/main\"' +\n ' xmlns:r=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships\"' +\n ' xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\"' +\n ' mc:Ignorable=\"x14ac\"' +\n ' xmlns:x14ac=\"http://schemas.microsoft.com/office/spreadsheetml/2009/9/ac\">'\n );\n\n this._writeSheetProperties(xmlBuffer, this.properties, this.pageSetup);\n\n xmlBuffer.addText(xform.sheetViews.toXml(this.views));\n\n this._writeSheetFormatProperties(xmlBuffer, this.properties);\n\n this.stream.write(xmlBuffer);\n }\n\n _writeColumns() {\n const cols = Column.toModel(this.columns);\n if (cols) {\n xform.columns.prepare(cols, {styles: this._workbook.styles});\n this.stream.write(xform.columns.toXml(cols));\n }\n }\n\n _writeOpenSheetData() {\n this._write('<sheetData>');\n }\n\n _writeRow(row) {\n if (!this.startedData) {\n this._writeColumns();\n this._writeOpenSheetData();\n this.startedData = true;\n }\n\n if (row.hasValues || row.height) {\n const {model} = row;\n const options = {\n styles: this._workbook.styles,\n sharedStrings: this.useSharedStrings ? this._workbook.sharedStrings : undefined,\n hyperlinks: this._sheetRelsWriter.hyperlinksProxy,\n merges: this._merges,\n formulae: this._formulae,\n siFormulae: this._siFormulae,\n comments: [],\n };\n xform.row.prepare(model, options);\n this.stream.write(xform.row.toXml(model));\n\n if (options.comments.length) {\n this.hasComments = true;\n this._sheetCommentsWriter.addComments(options.comments);\n }\n }\n }\n\n _writeCloseSheetData() {\n this._write('</sheetData>');\n }\n\n _writeMergeCells() {\n if (this._merges.length) {\n xmlBuffer.reset();\n xmlBuffer.addText(`<mergeCells count=\"${this._merges.length}\">`);\n this._merges.forEach(merge => {\n xmlBuffer.addText(`<mergeCell ref=\"${merge}\"/>`);\n });\n xmlBuffer.addText('</mergeCells>');\n\n this.stream.write(xmlBuffer);\n }\n }\n\n _writeHyperlinks() {\n // eslint-disable-next-line no-underscore-dangle\n this.stream.write(xform.hyperlinks.toXml(this._sheetRelsWriter._hyperlinks));\n }\n\n _writeConditionalFormatting() {\n const options = {\n styles: this._workbook.styles,\n };\n xform.conditionalFormattings.prepare(this.conditionalFormatting, options);\n this.stream.write(xform.conditionalFormattings.toXml(this.conditionalFormatting));\n }\n\n _writeRowBreaks() {\n this.stream.write(xform.rowBreaks.toXml(this.rowBreaks));\n }\n\n _writeDataValidations() {\n this.stream.write(xform.dataValidations.toXml(this.dataValidations.model));\n }\n\n _writeSheetProtection() {\n this.stream.write(xform.sheetProtection.toXml(this.sheetProtection));\n }\n\n _writePageMargins() {\n this.stream.write(xform.pageMargins.toXml(this.pageSetup.margins));\n }\n\n _writePageSetup() {\n this.stream.write(xform.pageSeteup.toXml(this.pageSetup));\n }\n\n _writeHeaderFooter() {\n this.stream.write(xform.headerFooter.toXml(this.headerFooter));\n }\n\n _writeAutoFilter() {\n this.stream.write(xform.autoFilter.toXml(this.autoFilter));\n }\n\n _writeBackground() {\n if (this._background) {\n if (this._background.imageId !== undefined) {\n const image = this._workbook.getImage(this._background.imageId);\n const pictureId = this._sheetRelsWriter.addMedia({\n Target: `../media/${image.name}`,\n Type: RelType.Image,\n });\n\n this._background = {\n ...this._background,\n rId: pictureId,\n };\n }\n this.stream.write(xform.picture.toXml({rId: this._background.rId}));\n }\n }\n\n _writeDrawing() {\n const images = this.getImages();\n if (!images.length) {\n return;\n }\n const name = `drawing${this.id}`;\n const rId = this._sheetRelsWriter.addRelationship({\n Target: `../drawings/${name}.xml`,\n Type: RelType.Drawing,\n });\n const drawing = {rId, name, anchors: [], rels: []};\n const nextRid = () => `rId${drawing.rels.length + 1}`;\n const imageRIds = {};\n images.forEach(image => {\n const {imageId, range, hyperlinks} = image.model;\n let imageRId = imageRIds[imageId];\n if (!imageRId) {\n imageRId = imageRIds[imageId] = nextRid();\n drawing.rels.push({\n Id: imageRId,\n Type: RelType.Image,\n Target: `../media/${this._workbook.getImage(imageId).name}`,\n });\n }\n const anchor = {picture: {rId: imageRId}, range};\n if (hyperlinks && hyperlinks.hyperlink) {\n const hyperlinkRId = nextRid();\n anchor.picture.hyperlinks = {tooltip: hyperlinks.tooltip, rId: hyperlinkRId};\n drawing.rels.push({\n Id: hyperlinkRId,\n Type: RelType.Hyperlink,\n Target: hyperlinks.hyperlink,\n TargetMode: 'External',\n });\n }\n drawing.anchors.push(anchor);\n });\n this._workbook.drawings.push(drawing);\n\n xmlBuffer.reset();\n xmlBuffer.addText(`<drawing r:id=\"${rId}\"/>`);\n this.stream.write(xmlBuffer);\n }\n\n _writeLegacyData() {\n if (this.hasComments) {\n xmlBuffer.reset();\n xmlBuffer.addText(`<legacyDrawing r:id=\"${this._sheetCommentsWriter.vmlRelId}\"/>`);\n this.stream.write(xmlBuffer);\n }\n }\n\n _writeDimensions() {\n // for some reason, Excel can't handle dimensions at the bottom of the file\n // and we don't know the dimensions until the commit, so don't write them.\n // this._write('<dimension ref=\"' + this._dimensions + '\"/>');\n }\n\n _writeCloseWorksheet() {\n this._write('</worksheet>');\n }\n}\n\nmodule.exports = WorksheetWriter;\n"],"mappings":"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","ignoreList":[]}
@@ -12,6 +12,7 @@ module.exports = {
12
12
  CoreProperties: 'http://schemas.openxmlformats.org/package/2006/relationships/metadata/core-properties',
13
13
  ExtenderProperties: 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/extended-properties',
14
14
  Comments: 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/comments',
15
+ Drawing: 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/drawing',
15
16
  VmlDrawing: 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/vmlDrawing',
16
17
  Table: 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/table',
17
18
  PivotCacheDefinition: 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/pivotCacheDefinition',
@@ -1 +1 @@
1
- {"version":3,"file":"rel-type.js","names":["module","exports","OfficeDocument","Worksheet","CalcChain","SharedStrings","Styles","Theme","Hyperlink","Image","CoreProperties","ExtenderProperties","Comments","VmlDrawing","Table","PivotCacheDefinition","PivotCacheRecords","PivotTable"],"sources":["../../../lib/xlsx/rel-type.js"],"sourcesContent":["'use strict';\n\nmodule.exports = {\n OfficeDocument: 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument',\n Worksheet: 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/worksheet',\n CalcChain: 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/calcChain',\n SharedStrings: 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/sharedStrings',\n Styles: 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/styles',\n Theme: 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/theme',\n Hyperlink: 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/hyperlink',\n Image: 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/image',\n CoreProperties: 'http://schemas.openxmlformats.org/package/2006/relationships/metadata/core-properties',\n ExtenderProperties: 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/extended-properties',\n Comments: 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/comments',\n VmlDrawing: 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/vmlDrawing',\n Table: 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/table',\n PivotCacheDefinition: 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/pivotCacheDefinition',\n PivotCacheRecords: 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/pivotCacheRecords',\n PivotTable: 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/pivotTable',\n};\n"],"mappings":"AAAA,YAAY;;AAEZA,MAAM,CAACC,OAAO,GAAG;EACfC,cAAc,EAAE,oFAAoF;EACpGC,SAAS,EAAE,+EAA+E;EAC1FC,SAAS,EAAE,+EAA+E;EAC1FC,aAAa,EAAE,mFAAmF;EAClGC,MAAM,EAAE,4EAA4E;EACpFC,KAAK,EAAE,2EAA2E;EAClFC,SAAS,EAAE,+EAA+E;EAC1FC,KAAK,EAAE,2EAA2E;EAClFC,cAAc,EAAE,uFAAuF;EACvGC,kBAAkB,EAAE,yFAAyF;EAC7GC,QAAQ,EAAE,8EAA8E;EACxFC,UAAU,EAAE,gFAAgF;EAC5FC,KAAK,EAAE,2EAA2E;EAClFC,oBAAoB,EAAE,0FAA0F;EAChHC,iBAAiB,EAAE,uFAAuF;EAC1GC,UAAU,EAAE;AACd,CAAC","ignoreList":[]}
1
+ {"version":3,"file":"rel-type.js","names":["module","exports","OfficeDocument","Worksheet","CalcChain","SharedStrings","Styles","Theme","Hyperlink","Image","CoreProperties","ExtenderProperties","Comments","Drawing","VmlDrawing","Table","PivotCacheDefinition","PivotCacheRecords","PivotTable"],"sources":["../../../lib/xlsx/rel-type.js"],"sourcesContent":["'use strict';\n\nmodule.exports = {\n OfficeDocument: 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument',\n Worksheet: 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/worksheet',\n CalcChain: 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/calcChain',\n SharedStrings: 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/sharedStrings',\n Styles: 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/styles',\n Theme: 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/theme',\n Hyperlink: 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/hyperlink',\n Image: 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/image',\n CoreProperties: 'http://schemas.openxmlformats.org/package/2006/relationships/metadata/core-properties',\n ExtenderProperties: 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/extended-properties',\n Comments: 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/comments',\n Drawing: 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/drawing',\n VmlDrawing: 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/vmlDrawing',\n Table: 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/table',\n PivotCacheDefinition: 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/pivotCacheDefinition',\n PivotCacheRecords: 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/pivotCacheRecords',\n PivotTable: 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/pivotTable',\n};\n"],"mappings":"AAAA,YAAY;;AAEZA,MAAM,CAACC,OAAO,GAAG;EACfC,cAAc,EAAE,oFAAoF;EACpGC,SAAS,EAAE,+EAA+E;EAC1FC,SAAS,EAAE,+EAA+E;EAC1FC,aAAa,EAAE,mFAAmF;EAClGC,MAAM,EAAE,4EAA4E;EACpFC,KAAK,EAAE,2EAA2E;EAClFC,SAAS,EAAE,+EAA+E;EAC1FC,KAAK,EAAE,2EAA2E;EAClFC,cAAc,EAAE,uFAAuF;EACvGC,kBAAkB,EAAE,yFAAyF;EAC7GC,QAAQ,EAAE,8EAA8E;EACxFC,OAAO,EAAE,6EAA6E;EACtFC,UAAU,EAAE,gFAAgF;EAC5FC,KAAK,EAAE,2EAA2E;EAClFC,oBAAoB,EAAE,0FAA0F;EAChHC,iBAAiB,EAAE,uFAAuF;EAC1GC,UAAU,EAAE;AACd,CAAC","ignoreList":[]}
@@ -5,6 +5,9 @@ const utils = require('../../../utils/utils');
5
5
  const colCache = require('../../../utils/col-cache');
6
6
  const BaseXform = require('../base-xform');
7
7
  const Range = require('../../../doc/range');
8
+
9
+ // sqref ranges with more cells than this are kept as a single range-keyed model entry
10
+ const MAX_EXPANDED_RANGE_CELLS = 1000;
8
11
  function assign(definedName, attributes, name, defaultValue) {
9
12
  const value = attributes[name];
10
13
  if (value !== undefined) {
@@ -204,12 +207,20 @@ class DataValidationsXform extends BaseXform {
204
207
  }
205
208
  // The four known cases: 1. E4:L9 N4:U9 2.E4 L9 3. N4:U9 4. E4
206
209
  const list = this._address.split(/\s+/g) || [];
210
+ // Large ranges (e.g. a whole column 'A2:A1048576') are kept as one range-keyed entry
211
+ // instead of being expanded into one entry per cell, which could take minutes and
212
+ // gigabytes (exceljs#1842). DataValidations.find() resolves them. Small ranges are
213
+ // still expanded so the model keeps its per-cell shape and lookups stay O(1).
207
214
  list.forEach(addr => {
208
215
  if (addr.includes(':')) {
209
216
  const range = new Range(addr);
210
- range.forEachAddress(address => {
211
- this.model[address] = this._dataValidation;
212
- });
217
+ if (range.count > MAX_EXPANDED_RANGE_CELLS) {
218
+ this.model[range.range] = this._dataValidation;
219
+ } else {
220
+ range.forEachAddress(address => {
221
+ this.model[address] = this._dataValidation;
222
+ });
223
+ }
213
224
  } else {
214
225
  this.model[addr] = this._dataValidation;
215
226
  }
@@ -1 +1 @@
1
- {"version":3,"file":"data-validations-xform.js","names":["_","require","utils","colCache","BaseXform","Range","assign","definedName","attributes","name","defaultValue","value","undefined","assignBool","parseBoolean","optimiseDataValidations","model","dvList","map","dataValidation","address","marked","sort","a","b","strcmp","dvMap","keyBy","matchCol","addr","height","col","i","otherAddress","encodeAddress","row","isEqual","dv","decodeEx","dimensions","sqref","width","j","bottom","right","filter","Boolean","DataValidationsXform","tag","render","xmlStream","optimizedModel","length","openNode","count","forEach","type","addAttribute","operator","allowBlank","showInputMessage","promptTitle","prompt","showErrorMessage","errorStyle","errorTitle","error","formulae","formula","index","writeText","dateToExcel","Date","closeNode","parseOpen","node","_address","_dataValidation","_formula","parseText","text","push","parseClose","list","split","includes","range","forEachAddress","join","parseInt","parseFloat","excelToDate","module","exports"],"sources":["../../../../../lib/xlsx/xform/sheet/data-validations-xform.js"],"sourcesContent":["const _ = require('../../../utils/under-dash');\nconst utils = require('../../../utils/utils');\nconst colCache = require('../../../utils/col-cache');\nconst BaseXform = require('../base-xform');\nconst Range = require('../../../doc/range');\n\nfunction assign(definedName, attributes, name, defaultValue) {\n const value = attributes[name];\n if (value !== undefined) {\n definedName[name] = value;\n } else if (defaultValue !== undefined) {\n definedName[name] = defaultValue;\n }\n}\n\nfunction assignBool(definedName, attributes, name, defaultValue) {\n const value = attributes[name];\n if (value !== undefined) {\n definedName[name] = utils.parseBoolean(value);\n } else if (defaultValue !== undefined) {\n definedName[name] = defaultValue;\n }\n}\n\nfunction optimiseDataValidations(model) {\n // Squeeze alike data validations together into rectangular ranges\n // to reduce file size and speed up Excel load time\n const dvList = _.map(model, (dataValidation, address) => ({\n address,\n dataValidation,\n marked: false,\n })).sort((a, b) => _.strcmp(a.address, b.address));\n const dvMap = _.keyBy(dvList, 'address');\n const matchCol = (addr, height, col) => {\n for (let i = 0; i < height; i++) {\n const otherAddress = colCache.encodeAddress(addr.row + i, col);\n if (!model[otherAddress] || !_.isEqual(model[addr.address], model[otherAddress])) {\n return false;\n }\n }\n return true;\n };\n return dvList\n .map(dv => {\n if (!dv.marked) {\n const addr = colCache.decodeEx(dv.address);\n if (addr.dimensions) {\n dvMap[addr.dimensions].marked = true;\n return {\n ...dv.dataValidation,\n sqref: dv.address,\n };\n }\n\n // iterate downwards - finding matching cells\n let height = 1;\n let otherAddress = colCache.encodeAddress(addr.row + height, addr.col);\n while (model[otherAddress] && _.isEqual(dv.dataValidation, model[otherAddress])) {\n height++;\n otherAddress = colCache.encodeAddress(addr.row + height, addr.col);\n }\n\n // iterate rightwards...\n\n let width = 1;\n while (matchCol(addr, height, addr.col + width)) {\n width++;\n }\n\n // mark all included addresses\n for (let i = 0; i < height; i++) {\n for (let j = 0; j < width; j++) {\n otherAddress = colCache.encodeAddress(addr.row + i, addr.col + j);\n dvMap[otherAddress].marked = true;\n }\n }\n\n if (height > 1 || width > 1) {\n const bottom = addr.row + (height - 1);\n const right = addr.col + (width - 1);\n return {\n ...dv.dataValidation,\n sqref: `${dv.address}:${colCache.encodeAddress(bottom, right)}`,\n };\n }\n return {\n ...dv.dataValidation,\n sqref: dv.address,\n };\n }\n return null;\n })\n .filter(Boolean);\n}\n\nclass DataValidationsXform extends BaseXform {\n get tag() {\n return 'dataValidations';\n }\n\n render(xmlStream, model) {\n const optimizedModel = optimiseDataValidations(model);\n if (optimizedModel.length) {\n xmlStream.openNode('dataValidations', {count: optimizedModel.length});\n\n optimizedModel.forEach(value => {\n xmlStream.openNode('dataValidation');\n\n if (value.type !== 'any') {\n xmlStream.addAttribute('type', value.type);\n\n if (value.operator && value.type !== 'list' && value.operator !== 'between') {\n xmlStream.addAttribute('operator', value.operator);\n }\n if (value.allowBlank) {\n xmlStream.addAttribute('allowBlank', '1');\n }\n }\n if (value.showInputMessage) {\n xmlStream.addAttribute('showInputMessage', '1');\n }\n if (value.promptTitle) {\n xmlStream.addAttribute('promptTitle', value.promptTitle);\n }\n if (value.prompt) {\n xmlStream.addAttribute('prompt', value.prompt);\n }\n if (value.showErrorMessage) {\n xmlStream.addAttribute('showErrorMessage', '1');\n }\n if (value.errorStyle) {\n xmlStream.addAttribute('errorStyle', value.errorStyle);\n }\n if (value.errorTitle) {\n xmlStream.addAttribute('errorTitle', value.errorTitle);\n }\n if (value.error) {\n xmlStream.addAttribute('error', value.error);\n }\n xmlStream.addAttribute('sqref', value.sqref);\n (value.formulae || []).forEach((formula, index) => {\n xmlStream.openNode(`formula${index + 1}`);\n if (value.type === 'date') {\n xmlStream.writeText(utils.dateToExcel(new Date(formula)));\n } else {\n xmlStream.writeText(formula);\n }\n xmlStream.closeNode();\n });\n xmlStream.closeNode();\n });\n xmlStream.closeNode();\n }\n }\n\n parseOpen(node) {\n switch (node.name) {\n case 'dataValidations':\n this.model = {};\n return true;\n\n case 'dataValidation': {\n this._address = node.attributes.sqref;\n const dataValidation = {type: node.attributes.type || 'any', formulae: []};\n\n if (node.attributes.type) {\n assignBool(dataValidation, node.attributes, 'allowBlank');\n }\n assignBool(dataValidation, node.attributes, 'showInputMessage');\n assignBool(dataValidation, node.attributes, 'showErrorMessage');\n\n switch (dataValidation.type) {\n case 'any':\n case 'list':\n case 'custom':\n break;\n default:\n assign(dataValidation, node.attributes, 'operator', 'between');\n break;\n }\n assign(dataValidation, node.attributes, 'promptTitle');\n assign(dataValidation, node.attributes, 'prompt');\n assign(dataValidation, node.attributes, 'errorStyle');\n assign(dataValidation, node.attributes, 'errorTitle');\n assign(dataValidation, node.attributes, 'error');\n\n this._dataValidation = dataValidation;\n return true;\n }\n\n case 'formula1':\n case 'formula2':\n this._formula = [];\n return true;\n\n default:\n return false;\n }\n }\n\n parseText(text) {\n if (this._formula) {\n this._formula.push(text);\n }\n }\n\n parseClose(name) {\n switch (name) {\n case 'dataValidations':\n return false;\n case 'dataValidation': {\n if (!this._dataValidation.formulae || !this._dataValidation.formulae.length) {\n delete this._dataValidation.formulae;\n delete this._dataValidation.operator;\n }\n // The four known cases: 1. E4:L9 N4:U9 2.E4 L9 3. N4:U9 4. E4\n const list = this._address.split(/\\s+/g) || [];\n list.forEach(addr => {\n if (addr.includes(':')) {\n const range = new Range(addr);\n range.forEachAddress(address => {\n this.model[address] = this._dataValidation;\n });\n } else {\n this.model[addr] = this._dataValidation;\n }\n });\n return true;\n }\n case 'formula1':\n case 'formula2': {\n let formula = this._formula.join('');\n switch (this._dataValidation.type) {\n case 'whole':\n case 'textLength':\n formula = parseInt(formula, 10);\n break;\n case 'decimal':\n formula = parseFloat(formula);\n break;\n case 'date':\n formula = utils.excelToDate(parseFloat(formula));\n break;\n default:\n break;\n }\n this._dataValidation.formulae.push(formula);\n this._formula = undefined;\n return true;\n }\n default:\n return true;\n }\n }\n}\n\nmodule.exports = DataValidationsXform;\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"data-validations-xform.js","names":["_","require","utils","colCache","BaseXform","Range","MAX_EXPANDED_RANGE_CELLS","assign","definedName","attributes","name","defaultValue","value","undefined","assignBool","parseBoolean","optimiseDataValidations","model","dvList","map","dataValidation","address","marked","sort","a","b","strcmp","dvMap","keyBy","matchCol","addr","height","col","i","otherAddress","encodeAddress","row","isEqual","dv","decodeEx","dimensions","sqref","width","j","bottom","right","filter","Boolean","DataValidationsXform","tag","render","xmlStream","optimizedModel","length","openNode","count","forEach","type","addAttribute","operator","allowBlank","showInputMessage","promptTitle","prompt","showErrorMessage","errorStyle","errorTitle","error","formulae","formula","index","writeText","dateToExcel","Date","closeNode","parseOpen","node","_address","_dataValidation","_formula","parseText","text","push","parseClose","list","split","includes","range","forEachAddress","join","parseInt","parseFloat","excelToDate","module","exports"],"sources":["../../../../../lib/xlsx/xform/sheet/data-validations-xform.js"],"sourcesContent":["const _ = require('../../../utils/under-dash');\nconst utils = require('../../../utils/utils');\nconst colCache = require('../../../utils/col-cache');\nconst BaseXform = require('../base-xform');\nconst Range = require('../../../doc/range');\n\n// sqref ranges with more cells than this are kept as a single range-keyed model entry\nconst MAX_EXPANDED_RANGE_CELLS = 1000;\n\nfunction assign(definedName, attributes, name, defaultValue) {\n const value = attributes[name];\n if (value !== undefined) {\n definedName[name] = value;\n } else if (defaultValue !== undefined) {\n definedName[name] = defaultValue;\n }\n}\n\nfunction assignBool(definedName, attributes, name, defaultValue) {\n const value = attributes[name];\n if (value !== undefined) {\n definedName[name] = utils.parseBoolean(value);\n } else if (defaultValue !== undefined) {\n definedName[name] = defaultValue;\n }\n}\n\nfunction optimiseDataValidations(model) {\n // Squeeze alike data validations together into rectangular ranges\n // to reduce file size and speed up Excel load time\n const dvList = _.map(model, (dataValidation, address) => ({\n address,\n dataValidation,\n marked: false,\n })).sort((a, b) => _.strcmp(a.address, b.address));\n const dvMap = _.keyBy(dvList, 'address');\n const matchCol = (addr, height, col) => {\n for (let i = 0; i < height; i++) {\n const otherAddress = colCache.encodeAddress(addr.row + i, col);\n if (!model[otherAddress] || !_.isEqual(model[addr.address], model[otherAddress])) {\n return false;\n }\n }\n return true;\n };\n return dvList\n .map(dv => {\n if (!dv.marked) {\n const addr = colCache.decodeEx(dv.address);\n if (addr.dimensions) {\n dvMap[addr.dimensions].marked = true;\n return {\n ...dv.dataValidation,\n sqref: dv.address,\n };\n }\n\n // iterate downwards - finding matching cells\n let height = 1;\n let otherAddress = colCache.encodeAddress(addr.row + height, addr.col);\n while (model[otherAddress] && _.isEqual(dv.dataValidation, model[otherAddress])) {\n height++;\n otherAddress = colCache.encodeAddress(addr.row + height, addr.col);\n }\n\n // iterate rightwards...\n\n let width = 1;\n while (matchCol(addr, height, addr.col + width)) {\n width++;\n }\n\n // mark all included addresses\n for (let i = 0; i < height; i++) {\n for (let j = 0; j < width; j++) {\n otherAddress = colCache.encodeAddress(addr.row + i, addr.col + j);\n dvMap[otherAddress].marked = true;\n }\n }\n\n if (height > 1 || width > 1) {\n const bottom = addr.row + (height - 1);\n const right = addr.col + (width - 1);\n return {\n ...dv.dataValidation,\n sqref: `${dv.address}:${colCache.encodeAddress(bottom, right)}`,\n };\n }\n return {\n ...dv.dataValidation,\n sqref: dv.address,\n };\n }\n return null;\n })\n .filter(Boolean);\n}\n\nclass DataValidationsXform extends BaseXform {\n get tag() {\n return 'dataValidations';\n }\n\n render(xmlStream, model) {\n const optimizedModel = optimiseDataValidations(model);\n if (optimizedModel.length) {\n xmlStream.openNode('dataValidations', {count: optimizedModel.length});\n\n optimizedModel.forEach(value => {\n xmlStream.openNode('dataValidation');\n\n if (value.type !== 'any') {\n xmlStream.addAttribute('type', value.type);\n\n if (value.operator && value.type !== 'list' && value.operator !== 'between') {\n xmlStream.addAttribute('operator', value.operator);\n }\n if (value.allowBlank) {\n xmlStream.addAttribute('allowBlank', '1');\n }\n }\n if (value.showInputMessage) {\n xmlStream.addAttribute('showInputMessage', '1');\n }\n if (value.promptTitle) {\n xmlStream.addAttribute('promptTitle', value.promptTitle);\n }\n if (value.prompt) {\n xmlStream.addAttribute('prompt', value.prompt);\n }\n if (value.showErrorMessage) {\n xmlStream.addAttribute('showErrorMessage', '1');\n }\n if (value.errorStyle) {\n xmlStream.addAttribute('errorStyle', value.errorStyle);\n }\n if (value.errorTitle) {\n xmlStream.addAttribute('errorTitle', value.errorTitle);\n }\n if (value.error) {\n xmlStream.addAttribute('error', value.error);\n }\n xmlStream.addAttribute('sqref', value.sqref);\n (value.formulae || []).forEach((formula, index) => {\n xmlStream.openNode(`formula${index + 1}`);\n if (value.type === 'date') {\n xmlStream.writeText(utils.dateToExcel(new Date(formula)));\n } else {\n xmlStream.writeText(formula);\n }\n xmlStream.closeNode();\n });\n xmlStream.closeNode();\n });\n xmlStream.closeNode();\n }\n }\n\n parseOpen(node) {\n switch (node.name) {\n case 'dataValidations':\n this.model = {};\n return true;\n\n case 'dataValidation': {\n this._address = node.attributes.sqref;\n const dataValidation = {type: node.attributes.type || 'any', formulae: []};\n\n if (node.attributes.type) {\n assignBool(dataValidation, node.attributes, 'allowBlank');\n }\n assignBool(dataValidation, node.attributes, 'showInputMessage');\n assignBool(dataValidation, node.attributes, 'showErrorMessage');\n\n switch (dataValidation.type) {\n case 'any':\n case 'list':\n case 'custom':\n break;\n default:\n assign(dataValidation, node.attributes, 'operator', 'between');\n break;\n }\n assign(dataValidation, node.attributes, 'promptTitle');\n assign(dataValidation, node.attributes, 'prompt');\n assign(dataValidation, node.attributes, 'errorStyle');\n assign(dataValidation, node.attributes, 'errorTitle');\n assign(dataValidation, node.attributes, 'error');\n\n this._dataValidation = dataValidation;\n return true;\n }\n\n case 'formula1':\n case 'formula2':\n this._formula = [];\n return true;\n\n default:\n return false;\n }\n }\n\n parseText(text) {\n if (this._formula) {\n this._formula.push(text);\n }\n }\n\n parseClose(name) {\n switch (name) {\n case 'dataValidations':\n return false;\n case 'dataValidation': {\n if (!this._dataValidation.formulae || !this._dataValidation.formulae.length) {\n delete this._dataValidation.formulae;\n delete this._dataValidation.operator;\n }\n // The four known cases: 1. E4:L9 N4:U9 2.E4 L9 3. N4:U9 4. E4\n const list = this._address.split(/\\s+/g) || [];\n // Large ranges (e.g. a whole column 'A2:A1048576') are kept as one range-keyed entry\n // instead of being expanded into one entry per cell, which could take minutes and\n // gigabytes (exceljs#1842). DataValidations.find() resolves them. Small ranges are\n // still expanded so the model keeps its per-cell shape and lookups stay O(1).\n list.forEach(addr => {\n if (addr.includes(':')) {\n const range = new Range(addr);\n if (range.count > MAX_EXPANDED_RANGE_CELLS) {\n this.model[range.range] = this._dataValidation;\n } else {\n range.forEachAddress(address => {\n this.model[address] = this._dataValidation;\n });\n }\n } else {\n this.model[addr] = this._dataValidation;\n }\n });\n return true;\n }\n case 'formula1':\n case 'formula2': {\n let formula = this._formula.join('');\n switch (this._dataValidation.type) {\n case 'whole':\n case 'textLength':\n formula = parseInt(formula, 10);\n break;\n case 'decimal':\n formula = parseFloat(formula);\n break;\n case 'date':\n formula = utils.excelToDate(parseFloat(formula));\n break;\n default:\n break;\n }\n this._dataValidation.formulae.push(formula);\n this._formula = undefined;\n return true;\n }\n default:\n return true;\n }\n }\n}\n\nmodule.exports = DataValidationsXform;\n"],"mappings":"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","ignoreList":[]}