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
@@ -1,18 +1,111 @@
1
1
  "use strict";
2
2
 
3
+ const colCache = require('../utils/col-cache');
4
+ function isRange(address) {
5
+ return typeof address === 'string' && address.includes(':');
6
+ }
3
7
  class DataValidations {
4
8
  constructor(model) {
5
9
  this.model = model || {};
10
+ // Range-keyed entries (e.g. 'A2:A1048576', kept intact when a file is loaded) are tracked
11
+ // separately so per-cell add/find stay O(1) when there are none (exceljs#1842).
12
+ this._ranges = new Map();
13
+ Object.keys(this.model).forEach(key => {
14
+ if (isRange(key)) {
15
+ this._addRange(key);
16
+ }
17
+ });
6
18
  }
7
19
  add(address, validation) {
20
+ if (isRange(address)) {
21
+ this._addRange(address);
22
+ } else {
23
+ this._splitRangeAt(address);
24
+ }
8
25
  return this.model[address] = validation;
9
26
  }
10
27
  find(address) {
11
- return this.model[address];
28
+ const validation = this.model[address];
29
+ if (validation !== undefined || isRange(address) || !this._ranges.size) {
30
+ return validation;
31
+ }
32
+ // fall back to range-keyed entries that contain the address
33
+ const key = this._findRangeKey(address);
34
+ return key ? this.model[key] : undefined;
12
35
  }
13
36
  remove(address) {
37
+ if (isRange(address)) {
38
+ this._ranges.delete(address);
39
+ } else {
40
+ this._splitRangeAt(address);
41
+ }
14
42
  this.model[address] = undefined;
15
43
  }
44
+ _addRange(key) {
45
+ if (!this._ranges.has(key)) {
46
+ this._ranges.set(key, colCache.decodeEx(key));
47
+ }
48
+ }
49
+ _findRangeKey(address) {
50
+ if (!this._ranges.size) {
51
+ return undefined;
52
+ }
53
+ const {
54
+ row,
55
+ col
56
+ } = colCache.decodeAddress(address);
57
+ for (const [key, {
58
+ top,
59
+ left,
60
+ bottom,
61
+ right
62
+ }] of this._ranges) {
63
+ if (this.model[key] && row >= top && row <= bottom && col >= left && col <= right) {
64
+ return key;
65
+ }
66
+ }
67
+ return undefined;
68
+ }
69
+
70
+ // If a single cell lies inside a range-keyed entry, replace that entry with up to four
71
+ // rectangles covering the rest of the range, so the cell can get its own validation
72
+ // (or none) without overlapping sqrefs.
73
+ _splitRangeAt(address) {
74
+ const key = this._findRangeKey(address);
75
+ if (!key) {
76
+ return;
77
+ }
78
+ const validation = this.model[key];
79
+ const {
80
+ row,
81
+ col
82
+ } = colCache.decodeAddress(address);
83
+ const {
84
+ top,
85
+ left,
86
+ bottom,
87
+ right
88
+ } = this._ranges.get(key);
89
+ delete this.model[key];
90
+ this._ranges.delete(key);
91
+ const addRect = (t, l, b, r) => {
92
+ if (t > b || l > r) {
93
+ return;
94
+ }
95
+ const tl = colCache.encodeAddress(t, l);
96
+ if (t === b && l === r) {
97
+ this.model[tl] = validation;
98
+ } else {
99
+ const rangeKey = `${tl}:${colCache.encodeAddress(b, r)}`;
100
+ this.model[rangeKey] = validation;
101
+ this._addRange(rangeKey);
102
+ }
103
+ };
104
+ addRect(top, left, row - 1, right); // rows above
105
+ addRect(row + 1, left, bottom, right); // rows below
106
+ addRect(row, left, row, col - 1); // left of the cell
107
+ addRect(row, col + 1, row, right); // right of the cell
108
+ }
16
109
  }
17
110
  module.exports = DataValidations;
18
111
  //# sourceMappingURL=data-validations.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"data-validations.js","names":["DataValidations","constructor","model","add","address","validation","find","remove","undefined","module","exports"],"sources":["../../../lib/doc/data-validations.js"],"sourcesContent":["class DataValidations {\n constructor(model) {\n this.model = model || {};\n }\n\n add(address, validation) {\n return (this.model[address] = validation);\n }\n\n find(address) {\n return this.model[address];\n }\n\n remove(address) {\n this.model[address] = undefined;\n }\n}\n\nmodule.exports = DataValidations;\n"],"mappings":";;AAAA,MAAMA,eAAe,CAAC;EACpBC,WAAWA,CAACC,KAAK,EAAE;IACjB,IAAI,CAACA,KAAK,GAAGA,KAAK,IAAI,CAAC,CAAC;EAC1B;EAEAC,GAAGA,CAACC,OAAO,EAAEC,UAAU,EAAE;IACvB,OAAQ,IAAI,CAACH,KAAK,CAACE,OAAO,CAAC,GAAGC,UAAU;EAC1C;EAEAC,IAAIA,CAACF,OAAO,EAAE;IACZ,OAAO,IAAI,CAACF,KAAK,CAACE,OAAO,CAAC;EAC5B;EAEAG,MAAMA,CAACH,OAAO,EAAE;IACd,IAAI,CAACF,KAAK,CAACE,OAAO,CAAC,GAAGI,SAAS;EACjC;AACF;AAEAC,MAAM,CAACC,OAAO,GAAGV,eAAe","ignoreList":[]}
1
+ {"version":3,"file":"data-validations.js","names":["colCache","require","isRange","address","includes","DataValidations","constructor","model","_ranges","Map","Object","keys","forEach","key","_addRange","add","validation","_splitRangeAt","find","undefined","size","_findRangeKey","remove","delete","has","set","decodeEx","row","col","decodeAddress","top","left","bottom","right","get","addRect","t","l","b","r","tl","encodeAddress","rangeKey","module","exports"],"sources":["../../../lib/doc/data-validations.js"],"sourcesContent":["const colCache = require('../utils/col-cache');\n\nfunction isRange(address) {\n return typeof address === 'string' && address.includes(':');\n}\n\nclass DataValidations {\n constructor(model) {\n this.model = model || {};\n // Range-keyed entries (e.g. 'A2:A1048576', kept intact when a file is loaded) are tracked\n // separately so per-cell add/find stay O(1) when there are none (exceljs#1842).\n this._ranges = new Map();\n Object.keys(this.model).forEach(key => {\n if (isRange(key)) {\n this._addRange(key);\n }\n });\n }\n\n add(address, validation) {\n if (isRange(address)) {\n this._addRange(address);\n } else {\n this._splitRangeAt(address);\n }\n return (this.model[address] = validation);\n }\n\n find(address) {\n const validation = this.model[address];\n if (validation !== undefined || isRange(address) || !this._ranges.size) {\n return validation;\n }\n // fall back to range-keyed entries that contain the address\n const key = this._findRangeKey(address);\n return key ? this.model[key] : undefined;\n }\n\n remove(address) {\n if (isRange(address)) {\n this._ranges.delete(address);\n } else {\n this._splitRangeAt(address);\n }\n this.model[address] = undefined;\n }\n\n _addRange(key) {\n if (!this._ranges.has(key)) {\n this._ranges.set(key, colCache.decodeEx(key));\n }\n }\n\n _findRangeKey(address) {\n if (!this._ranges.size) {\n return undefined;\n }\n const {row, col} = colCache.decodeAddress(address);\n for (const [key, {top, left, bottom, right}] of this._ranges) {\n if (this.model[key] && row >= top && row <= bottom && col >= left && col <= right) {\n return key;\n }\n }\n return undefined;\n }\n\n // If a single cell lies inside a range-keyed entry, replace that entry with up to four\n // rectangles covering the rest of the range, so the cell can get its own validation\n // (or none) without overlapping sqrefs.\n _splitRangeAt(address) {\n const key = this._findRangeKey(address);\n if (!key) {\n return;\n }\n const validation = this.model[key];\n const {row, col} = colCache.decodeAddress(address);\n const {top, left, bottom, right} = this._ranges.get(key);\n delete this.model[key];\n this._ranges.delete(key);\n\n const addRect = (t, l, b, r) => {\n if (t > b || l > r) {\n return;\n }\n const tl = colCache.encodeAddress(t, l);\n if (t === b && l === r) {\n this.model[tl] = validation;\n } else {\n const rangeKey = `${tl}:${colCache.encodeAddress(b, r)}`;\n this.model[rangeKey] = validation;\n this._addRange(rangeKey);\n }\n };\n addRect(top, left, row - 1, right); // rows above\n addRect(row + 1, left, bottom, right); // rows below\n addRect(row, left, row, col - 1); // left of the cell\n addRect(row, col + 1, row, right); // right of the cell\n }\n}\n\nmodule.exports = DataValidations;\n"],"mappings":"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","ignoreList":[]}
@@ -111,7 +111,7 @@ class WorkbookReader extends EventEmitter {
111
111
  if (entry.path.match(/xl\/worksheets\/sheet\d+[.]xml/)) {
112
112
  match = entry.path.match(/xl\/worksheets\/sheet(\d+)[.]xml/);
113
113
  sheetNo = match[1];
114
- if (this.sharedStrings && this.workbookRels) {
114
+ if (this.sharedStrings && this.workbookRels && (this.options.styles !== 'cache' || this.stylesParsed)) {
115
115
  yield* this._parseWorksheet(iterateStream(entry), sheetNo);
116
116
  } else {
117
117
  // create temp file for each worksheet
@@ -331,6 +331,7 @@ class WorkbookReader extends EventEmitter {
331
331
  if (this.options.styles === 'cache') {
332
332
  this.styles = new StyleManager();
333
333
  await this.styles.parseStream(iterateStream(entry));
334
+ this.stylesParsed = true;
334
335
  }
335
336
  }
336
337
  *_parseWorksheet(iterator, sheetNo) {
@@ -1 +1 @@
1
- {"version":3,"file":"workbook-reader.js","names":["fs","require","EventEmitter","PassThrough","Readable","nodeStream","unzip","tmp","iterateStream","parseSax","StyleManager","WorkbookXform","RelationshipsXform","WorksheetReader","HyperlinkReader","setGracefulCleanup","WorkbookReader","constructor","input","options","worksheets","sharedStrings","hyperlinks","styles","entries","init","_getStream","createReadStream","Error","read","eventType","value","parse","emit","error","Symbol","asyncIterator","stream","zip","Parse","forceStream","pipe","waitingWorkSheets","entry","match","sheetNo","path","_parseRels","_parseWorkbook","_parseSharedStrings","_parseStyles","workbookRels","_parseWorksheet","Promise","resolve","reject","file","err","fd","tempFileCleanupCallback","push","cleanedUp","tempStream","createWriteStream","on","_parseHyperlinks","autodrain","waitingWorkSheet","fileStream","_emitEntry","payload","xform","parseStream","type","workbook","properties","map","workbookPr","model","text","richText","index","font","inRun","plainText","events","node","name","bold","charset","parseInt","attributes","color","rgb","argb","val","theme","family","italic","outline","length","size","underline","vertAlign","iterator","id","worksheetReader","matchingRel","find","rel","Target","matchingSheet","sheets","sheet","rId","Id","state","hyperlinksReader","Options","module","exports"],"sources":["../../../../lib/stream/xlsx/workbook-reader.js"],"sourcesContent":["const fs = require('fs');\nconst {EventEmitter} = require('events');\nconst {PassThrough, Readable} = require('readable-stream');\nconst nodeStream = require('stream');\nconst unzip = require('unzipper');\nconst tmp = require('tmp');\nconst iterateStream = require('../../utils/iterate-stream');\nconst parseSax = require('../../utils/parse-sax');\n\nconst StyleManager = require('../../xlsx/xform/style/styles-xform');\nconst WorkbookXform = require('../../xlsx/xform/book/workbook-xform');\nconst RelationshipsXform = require('../../xlsx/xform/core/relationships-xform');\n\nconst WorksheetReader = require('./worksheet-reader');\nconst HyperlinkReader = require('./hyperlink-reader');\n\ntmp.setGracefulCleanup();\n\nclass WorkbookReader extends EventEmitter {\n constructor(input, options = {}) {\n super();\n\n this.input = input;\n\n this.options = {\n worksheets: 'emit',\n sharedStrings: 'cache',\n hyperlinks: 'ignore',\n styles: 'ignore',\n entries: 'ignore',\n ...options,\n };\n\n this.styles = new StyleManager();\n this.styles.init();\n }\n\n _getStream(input) {\n if (input instanceof nodeStream.Readable || input instanceof Readable) {\n return input;\n }\n if (typeof input === 'string') {\n return fs.createReadStream(input);\n }\n throw new Error(`Could not recognise input: ${input}`);\n }\n\n async read(input, options) {\n try {\n for await (const {eventType, value} of this.parse(input, options)) {\n switch (eventType) {\n case 'shared-strings':\n this.emit(eventType, value);\n break;\n case 'worksheet':\n this.emit(eventType, value);\n await value.read();\n break;\n case 'hyperlinks':\n this.emit(eventType, value);\n break;\n }\n }\n this.emit('end');\n this.emit('finished');\n } catch (error) {\n this.emit('error', error);\n }\n }\n\n async *[Symbol.asyncIterator]() {\n for await (const {eventType, value} of this.parse()) {\n if (eventType === 'worksheet') {\n yield value;\n }\n }\n }\n\n async *parse(input, options) {\n if (options) this.options = options;\n const stream = (this.stream = this._getStream(input || this.input));\n const zip = unzip.Parse({forceStream: true});\n stream.pipe(zip);\n\n // worksheets, deferred for parsing after shared strings reading\n const waitingWorkSheets = [];\n\n try {\n for await (const entry of iterateStream(zip)) {\n let match;\n let sheetNo;\n switch (entry.path) {\n case '_rels/.rels':\n break;\n case 'xl/_rels/workbook.xml.rels':\n await this._parseRels(entry);\n break;\n case 'xl/workbook.xml':\n await this._parseWorkbook(entry);\n break;\n case 'xl/sharedStrings.xml':\n yield* this._parseSharedStrings(entry);\n break;\n case 'xl/styles.xml':\n await this._parseStyles(entry);\n break;\n default:\n if (entry.path.match(/xl\\/worksheets\\/sheet\\d+[.]xml/)) {\n match = entry.path.match(/xl\\/worksheets\\/sheet(\\d+)[.]xml/);\n sheetNo = match[1];\n if (this.sharedStrings && this.workbookRels) {\n yield* this._parseWorksheet(iterateStream(entry), sheetNo);\n } else {\n // create temp file for each worksheet\n await new Promise((resolve, reject) => {\n tmp.file((err, path, fd, tempFileCleanupCallback) => {\n if (err) {\n return reject(err);\n }\n waitingWorkSheets.push({sheetNo, path, tempFileCleanupCallback, cleanedUp: false});\n\n const tempStream = fs.createWriteStream(path);\n tempStream.on('error', reject);\n entry.pipe(tempStream);\n return tempStream.on('finish', () => {\n return resolve();\n });\n });\n });\n }\n } else if (entry.path.match(/xl\\/worksheets\\/_rels\\/sheet\\d+[.]xml.rels/)) {\n match = entry.path.match(/xl\\/worksheets\\/_rels\\/sheet(\\d+)[.]xml.rels/);\n sheetNo = match[1];\n yield* this._parseHyperlinks(iterateStream(entry), sheetNo);\n }\n break;\n }\n entry.autodrain();\n }\n\n for (const waitingWorkSheet of waitingWorkSheets) {\n let fileStream = fs.createReadStream(waitingWorkSheet.path);\n // TODO: Remove once node v8 is deprecated\n // Detect and upgrade old fileStreams\n if (!fileStream[Symbol.asyncIterator]) {\n fileStream = fileStream.pipe(new PassThrough());\n }\n yield* this._parseWorksheet(fileStream, waitingWorkSheet.sheetNo);\n waitingWorkSheet.tempFileCleanupCallback();\n waitingWorkSheet.cleanedUp = true;\n }\n } finally {\n for (const waitingWorkSheet of waitingWorkSheets) {\n if (!waitingWorkSheet.cleanedUp) {\n waitingWorkSheet.tempFileCleanupCallback();\n waitingWorkSheet.cleanedUp = true;\n }\n }\n }\n }\n\n _emitEntry(payload) {\n if (this.options.entries === 'emit') {\n this.emit('entry', payload);\n }\n }\n\n async _parseRels(entry) {\n const xform = new RelationshipsXform();\n this.workbookRels = await xform.parseStream(iterateStream(entry));\n }\n\n async _parseWorkbook(entry) {\n this._emitEntry({type: 'workbook'});\n\n const workbook = new WorkbookXform();\n await workbook.parseStream(iterateStream(entry));\n\n this.properties = workbook.map.workbookPr;\n this.model = workbook.model;\n }\n\n async *_parseSharedStrings(entry) {\n this._emitEntry({type: 'shared-strings'});\n switch (this.options.sharedStrings) {\n case 'cache':\n this.sharedStrings = [];\n break;\n case 'emit':\n break;\n default:\n return;\n }\n\n let text = null;\n let richText = [];\n let index = 0;\n let font = null;\n let inRun = false;\n let plainText = null;\n for await (const events of parseSax(iterateStream(entry))) {\n for (const {eventType, value} of events) {\n if (eventType === 'opentag') {\n const node = value;\n switch (node.name) {\n case 'b':\n font = font || {};\n font.bold = true;\n break;\n case 'charset':\n font = font || {};\n font.charset = parseInt(node.attributes.charset, 10);\n break;\n case 'color':\n font = font || {};\n font.color = {};\n if (node.attributes.rgb) {\n font.color.argb = node.attributes.argb;\n }\n if (node.attributes.val) {\n font.color.argb = node.attributes.val;\n }\n if (node.attributes.theme) {\n font.color.theme = node.attributes.theme;\n }\n break;\n case 'family':\n font = font || {};\n font.family = parseInt(node.attributes.val, 10);\n break;\n case 'i':\n font = font || {};\n font.italic = true;\n break;\n case 'outline':\n font = font || {};\n font.outline = true;\n break;\n case 'r':\n // some writers emit a plain <t> before the <r> runs; keep it as the first run\n if (!richText.length && plainText) {\n richText.push({font: null, text: plainText});\n }\n inRun = true;\n text = null;\n break;\n case 'rFont':\n font = font || {};\n font.name = node.value;\n break;\n case 'si':\n font = null;\n richText = [];\n text = null;\n inRun = false;\n plainText = null;\n break;\n case 'sz':\n font = font || {};\n font.size = parseInt(node.attributes.val, 10);\n break;\n case 'strike':\n break;\n case 't':\n text = null;\n break;\n case 'u':\n font = font || {};\n font.underline = true;\n break;\n case 'vertAlign':\n font = font || {};\n font.vertAlign = node.attributes.val;\n break;\n }\n } else if (eventType === 'text') {\n text = text ? text + value : value;\n } else if (eventType === 'closetag') {\n const node = value;\n switch (node.name) {\n case 't':\n // ignore <t> inside <r> and <rPh>, which are handled separately\n if (!inRun && plainText === null) {\n plainText = text;\n }\n break;\n case 'r':\n inRun = false;\n richText.push({\n font,\n text,\n });\n\n font = null;\n text = null;\n break;\n case 'si':\n if (this.options.sharedStrings === 'cache') {\n this.sharedStrings.push(richText.length ? {richText} : text);\n } else if (this.options.sharedStrings === 'emit') {\n yield {index: index++, text: richText.length ? {richText} : text};\n }\n\n richText = [];\n font = null;\n text = null;\n break;\n }\n }\n }\n }\n }\n\n async _parseStyles(entry) {\n this._emitEntry({type: 'styles'});\n if (this.options.styles === 'cache') {\n this.styles = new StyleManager();\n await this.styles.parseStream(iterateStream(entry));\n }\n }\n\n *_parseWorksheet(iterator, sheetNo) {\n this._emitEntry({type: 'worksheet', id: sheetNo});\n const worksheetReader = new WorksheetReader({\n workbook: this,\n id: sheetNo,\n iterator,\n options: this.options,\n });\n\n const matchingRel = (this.workbookRels || []).find(rel => rel.Target === `worksheets/sheet${sheetNo}.xml`);\n const matchingSheet = matchingRel && (this.model.sheets || []).find(sheet => sheet.rId === matchingRel.Id);\n if (matchingSheet) {\n worksheetReader.id = matchingSheet.id;\n worksheetReader.name = matchingSheet.name;\n worksheetReader.state = matchingSheet.state;\n }\n if (this.options.worksheets === 'emit') {\n yield {eventType: 'worksheet', value: worksheetReader};\n }\n }\n\n *_parseHyperlinks(iterator, sheetNo) {\n this._emitEntry({type: 'hyperlinks', id: sheetNo});\n const hyperlinksReader = new HyperlinkReader({\n workbook: this,\n id: sheetNo,\n iterator,\n options: this.options,\n });\n if (this.options.hyperlinks === 'emit') {\n yield {eventType: 'hyperlinks', value: hyperlinksReader};\n }\n }\n}\n\n// for reference - these are the valid values for options\nWorkbookReader.Options = {\n worksheets: ['emit', 'ignore'],\n sharedStrings: ['cache', 'emit', 'ignore'],\n hyperlinks: ['cache', 'emit', 'ignore'],\n styles: ['cache', 'ignore'],\n entries: ['emit', 'ignore'],\n};\n\nmodule.exports = WorkbookReader;\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"workbook-reader.js","names":["fs","require","EventEmitter","PassThrough","Readable","nodeStream","unzip","tmp","iterateStream","parseSax","StyleManager","WorkbookXform","RelationshipsXform","WorksheetReader","HyperlinkReader","setGracefulCleanup","WorkbookReader","constructor","input","options","worksheets","sharedStrings","hyperlinks","styles","entries","init","_getStream","createReadStream","Error","read","eventType","value","parse","emit","error","Symbol","asyncIterator","stream","zip","Parse","forceStream","pipe","waitingWorkSheets","entry","match","sheetNo","path","_parseRels","_parseWorkbook","_parseSharedStrings","_parseStyles","workbookRels","stylesParsed","_parseWorksheet","Promise","resolve","reject","file","err","fd","tempFileCleanupCallback","push","cleanedUp","tempStream","createWriteStream","on","_parseHyperlinks","autodrain","waitingWorkSheet","fileStream","_emitEntry","payload","xform","parseStream","type","workbook","properties","map","workbookPr","model","text","richText","index","font","inRun","plainText","events","node","name","bold","charset","parseInt","attributes","color","rgb","argb","val","theme","family","italic","outline","length","size","underline","vertAlign","iterator","id","worksheetReader","matchingRel","find","rel","Target","matchingSheet","sheets","sheet","rId","Id","state","hyperlinksReader","Options","module","exports"],"sources":["../../../../lib/stream/xlsx/workbook-reader.js"],"sourcesContent":["const fs = require('fs');\nconst {EventEmitter} = require('events');\nconst {PassThrough, Readable} = require('readable-stream');\nconst nodeStream = require('stream');\nconst unzip = require('unzipper');\nconst tmp = require('tmp');\nconst iterateStream = require('../../utils/iterate-stream');\nconst parseSax = require('../../utils/parse-sax');\n\nconst StyleManager = require('../../xlsx/xform/style/styles-xform');\nconst WorkbookXform = require('../../xlsx/xform/book/workbook-xform');\nconst RelationshipsXform = require('../../xlsx/xform/core/relationships-xform');\n\nconst WorksheetReader = require('./worksheet-reader');\nconst HyperlinkReader = require('./hyperlink-reader');\n\ntmp.setGracefulCleanup();\n\nclass WorkbookReader extends EventEmitter {\n constructor(input, options = {}) {\n super();\n\n this.input = input;\n\n this.options = {\n worksheets: 'emit',\n sharedStrings: 'cache',\n hyperlinks: 'ignore',\n styles: 'ignore',\n entries: 'ignore',\n ...options,\n };\n\n this.styles = new StyleManager();\n this.styles.init();\n }\n\n _getStream(input) {\n if (input instanceof nodeStream.Readable || input instanceof Readable) {\n return input;\n }\n if (typeof input === 'string') {\n return fs.createReadStream(input);\n }\n throw new Error(`Could not recognise input: ${input}`);\n }\n\n async read(input, options) {\n try {\n for await (const {eventType, value} of this.parse(input, options)) {\n switch (eventType) {\n case 'shared-strings':\n this.emit(eventType, value);\n break;\n case 'worksheet':\n this.emit(eventType, value);\n await value.read();\n break;\n case 'hyperlinks':\n this.emit(eventType, value);\n break;\n }\n }\n this.emit('end');\n this.emit('finished');\n } catch (error) {\n this.emit('error', error);\n }\n }\n\n async *[Symbol.asyncIterator]() {\n for await (const {eventType, value} of this.parse()) {\n if (eventType === 'worksheet') {\n yield value;\n }\n }\n }\n\n async *parse(input, options) {\n if (options) this.options = options;\n const stream = (this.stream = this._getStream(input || this.input));\n const zip = unzip.Parse({forceStream: true});\n stream.pipe(zip);\n\n // worksheets, deferred for parsing after shared strings reading\n const waitingWorkSheets = [];\n\n try {\n for await (const entry of iterateStream(zip)) {\n let match;\n let sheetNo;\n switch (entry.path) {\n case '_rels/.rels':\n break;\n case 'xl/_rels/workbook.xml.rels':\n await this._parseRels(entry);\n break;\n case 'xl/workbook.xml':\n await this._parseWorkbook(entry);\n break;\n case 'xl/sharedStrings.xml':\n yield* this._parseSharedStrings(entry);\n break;\n case 'xl/styles.xml':\n await this._parseStyles(entry);\n break;\n default:\n if (entry.path.match(/xl\\/worksheets\\/sheet\\d+[.]xml/)) {\n match = entry.path.match(/xl\\/worksheets\\/sheet(\\d+)[.]xml/);\n sheetNo = match[1];\n if (\n this.sharedStrings &&\n this.workbookRels &&\n (this.options.styles !== 'cache' || this.stylesParsed)\n ) {\n yield* this._parseWorksheet(iterateStream(entry), sheetNo);\n } else {\n // create temp file for each worksheet\n await new Promise((resolve, reject) => {\n tmp.file((err, path, fd, tempFileCleanupCallback) => {\n if (err) {\n return reject(err);\n }\n waitingWorkSheets.push({sheetNo, path, tempFileCleanupCallback, cleanedUp: false});\n\n const tempStream = fs.createWriteStream(path);\n tempStream.on('error', reject);\n entry.pipe(tempStream);\n return tempStream.on('finish', () => {\n return resolve();\n });\n });\n });\n }\n } else if (entry.path.match(/xl\\/worksheets\\/_rels\\/sheet\\d+[.]xml.rels/)) {\n match = entry.path.match(/xl\\/worksheets\\/_rels\\/sheet(\\d+)[.]xml.rels/);\n sheetNo = match[1];\n yield* this._parseHyperlinks(iterateStream(entry), sheetNo);\n }\n break;\n }\n entry.autodrain();\n }\n\n for (const waitingWorkSheet of waitingWorkSheets) {\n let fileStream = fs.createReadStream(waitingWorkSheet.path);\n // TODO: Remove once node v8 is deprecated\n // Detect and upgrade old fileStreams\n if (!fileStream[Symbol.asyncIterator]) {\n fileStream = fileStream.pipe(new PassThrough());\n }\n yield* this._parseWorksheet(fileStream, waitingWorkSheet.sheetNo);\n waitingWorkSheet.tempFileCleanupCallback();\n waitingWorkSheet.cleanedUp = true;\n }\n } finally {\n for (const waitingWorkSheet of waitingWorkSheets) {\n if (!waitingWorkSheet.cleanedUp) {\n waitingWorkSheet.tempFileCleanupCallback();\n waitingWorkSheet.cleanedUp = true;\n }\n }\n }\n }\n\n _emitEntry(payload) {\n if (this.options.entries === 'emit') {\n this.emit('entry', payload);\n }\n }\n\n async _parseRels(entry) {\n const xform = new RelationshipsXform();\n this.workbookRels = await xform.parseStream(iterateStream(entry));\n }\n\n async _parseWorkbook(entry) {\n this._emitEntry({type: 'workbook'});\n\n const workbook = new WorkbookXform();\n await workbook.parseStream(iterateStream(entry));\n\n this.properties = workbook.map.workbookPr;\n this.model = workbook.model;\n }\n\n async *_parseSharedStrings(entry) {\n this._emitEntry({type: 'shared-strings'});\n switch (this.options.sharedStrings) {\n case 'cache':\n this.sharedStrings = [];\n break;\n case 'emit':\n break;\n default:\n return;\n }\n\n let text = null;\n let richText = [];\n let index = 0;\n let font = null;\n let inRun = false;\n let plainText = null;\n for await (const events of parseSax(iterateStream(entry))) {\n for (const {eventType, value} of events) {\n if (eventType === 'opentag') {\n const node = value;\n switch (node.name) {\n case 'b':\n font = font || {};\n font.bold = true;\n break;\n case 'charset':\n font = font || {};\n font.charset = parseInt(node.attributes.charset, 10);\n break;\n case 'color':\n font = font || {};\n font.color = {};\n if (node.attributes.rgb) {\n font.color.argb = node.attributes.argb;\n }\n if (node.attributes.val) {\n font.color.argb = node.attributes.val;\n }\n if (node.attributes.theme) {\n font.color.theme = node.attributes.theme;\n }\n break;\n case 'family':\n font = font || {};\n font.family = parseInt(node.attributes.val, 10);\n break;\n case 'i':\n font = font || {};\n font.italic = true;\n break;\n case 'outline':\n font = font || {};\n font.outline = true;\n break;\n case 'r':\n // some writers emit a plain <t> before the <r> runs; keep it as the first run\n if (!richText.length && plainText) {\n richText.push({font: null, text: plainText});\n }\n inRun = true;\n text = null;\n break;\n case 'rFont':\n font = font || {};\n font.name = node.value;\n break;\n case 'si':\n font = null;\n richText = [];\n text = null;\n inRun = false;\n plainText = null;\n break;\n case 'sz':\n font = font || {};\n font.size = parseInt(node.attributes.val, 10);\n break;\n case 'strike':\n break;\n case 't':\n text = null;\n break;\n case 'u':\n font = font || {};\n font.underline = true;\n break;\n case 'vertAlign':\n font = font || {};\n font.vertAlign = node.attributes.val;\n break;\n }\n } else if (eventType === 'text') {\n text = text ? text + value : value;\n } else if (eventType === 'closetag') {\n const node = value;\n switch (node.name) {\n case 't':\n // ignore <t> inside <r> and <rPh>, which are handled separately\n if (!inRun && plainText === null) {\n plainText = text;\n }\n break;\n case 'r':\n inRun = false;\n richText.push({\n font,\n text,\n });\n\n font = null;\n text = null;\n break;\n case 'si':\n if (this.options.sharedStrings === 'cache') {\n this.sharedStrings.push(richText.length ? {richText} : text);\n } else if (this.options.sharedStrings === 'emit') {\n yield {index: index++, text: richText.length ? {richText} : text};\n }\n\n richText = [];\n font = null;\n text = null;\n break;\n }\n }\n }\n }\n }\n\n async _parseStyles(entry) {\n this._emitEntry({type: 'styles'});\n if (this.options.styles === 'cache') {\n this.styles = new StyleManager();\n await this.styles.parseStream(iterateStream(entry));\n this.stylesParsed = true;\n }\n }\n\n *_parseWorksheet(iterator, sheetNo) {\n this._emitEntry({type: 'worksheet', id: sheetNo});\n const worksheetReader = new WorksheetReader({\n workbook: this,\n id: sheetNo,\n iterator,\n options: this.options,\n });\n\n const matchingRel = (this.workbookRels || []).find(rel => rel.Target === `worksheets/sheet${sheetNo}.xml`);\n const matchingSheet = matchingRel && (this.model.sheets || []).find(sheet => sheet.rId === matchingRel.Id);\n if (matchingSheet) {\n worksheetReader.id = matchingSheet.id;\n worksheetReader.name = matchingSheet.name;\n worksheetReader.state = matchingSheet.state;\n }\n if (this.options.worksheets === 'emit') {\n yield {eventType: 'worksheet', value: worksheetReader};\n }\n }\n\n *_parseHyperlinks(iterator, sheetNo) {\n this._emitEntry({type: 'hyperlinks', id: sheetNo});\n const hyperlinksReader = new HyperlinkReader({\n workbook: this,\n id: sheetNo,\n iterator,\n options: this.options,\n });\n if (this.options.hyperlinks === 'emit') {\n yield {eventType: 'hyperlinks', value: hyperlinksReader};\n }\n }\n}\n\n// for reference - these are the valid values for options\nWorkbookReader.Options = {\n worksheets: ['emit', 'ignore'],\n sharedStrings: ['cache', 'emit', 'ignore'],\n hyperlinks: ['cache', 'emit', 'ignore'],\n styles: ['cache', 'ignore'],\n entries: ['emit', 'ignore'],\n};\n\nmodule.exports = WorkbookReader;\n"],"mappings":"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","ignoreList":[]}
@@ -13,6 +13,7 @@ const ContentTypesXform = require('../../xlsx/xform/core/content-types-xform');
13
13
  const AppXform = require('../../xlsx/xform/core/app-xform');
14
14
  const WorkbookXform = require('../../xlsx/xform/book/workbook-xform');
15
15
  const SharedStringsXform = require('../../xlsx/xform/strings/shared-strings-xform');
16
+ const DrawingXform = require('../../xlsx/xform/drawing/drawing-xform');
16
17
  const WorksheetWriter = require('./worksheet-writer');
17
18
  const theme1Xml = require('../../xlsx/xml/theme1.js');
18
19
  class WorkbookWriter {
@@ -37,6 +38,7 @@ class WorkbookWriter {
37
38
  this.views = [];
38
39
  this.zipOptions = options.zip;
39
40
  this.media = [];
41
+ this.drawings = [];
40
42
  this.commentRefs = [];
41
43
  this.zip = Archiver('zip', this.zipOptions);
42
44
  if (options.stream) {
@@ -91,6 +93,7 @@ class WorkbookWriter {
91
93
  await this.promise;
92
94
  await this.addMedia();
93
95
  await this._commitWorksheets();
96
+ await this.addDrawings();
94
97
  await Promise.all([this.addContentTypes(), this.addApp(), this.addCore(), this.addSharedStrings(), this.addStyles(), this.addWorkbookRels()]);
95
98
  await this.addWorkbook();
96
99
  return this._finalize();
@@ -203,7 +206,8 @@ class WorkbookWriter {
203
206
  worksheets: this._worksheets.filter(Boolean),
204
207
  sharedStrings: this.sharedStrings,
205
208
  commentRefs: this.commentRefs,
206
- media: this.media
209
+ media: this.media,
210
+ drawings: this.drawings
207
211
  };
208
212
  const xform = new ContentTypesXform();
209
213
  const xml = xform.toXml(model);
@@ -239,6 +243,22 @@ class WorkbookWriter {
239
243
  throw new Error('Unsupported media');
240
244
  }));
241
245
  }
246
+ addDrawings() {
247
+ return new Promise(resolve => {
248
+ const drawingXform = new DrawingXform();
249
+ const relsXform = new RelationshipsXform();
250
+ this.drawings.forEach(drawing => {
251
+ drawingXform.prepare(drawing, {});
252
+ this.zip.append(drawingXform.toXml(drawing), {
253
+ name: `xl/drawings/${drawing.name}.xml`
254
+ });
255
+ this.zip.append(relsXform.toXml(drawing.rels), {
256
+ name: `xl/drawings/_rels/${drawing.name}.xml.rels`
257
+ });
258
+ });
259
+ resolve();
260
+ });
261
+ }
242
262
  addApp() {
243
263
  return new Promise(resolve => {
244
264
  const model = {
@@ -1 +1 @@
1
- {"version":3,"file":"workbook-writer.js","names":["fs","require","Archiver","StreamBuf","RelType","StylesXform","SharedStrings","DefinedNames","CoreXform","RelationshipsXform","ContentTypesXform","AppXform","WorkbookXform","SharedStringsXform","WorksheetWriter","theme1Xml","WorkbookWriter","constructor","options","created","Date","modified","creator","lastModifiedBy","lastPrinted","useSharedStrings","sharedStrings","styles","useStyles","Mock","_definedNames","_worksheets","views","zipOptions","zip","media","commentRefs","stream","filename","createWriteStream","pipe","promise","Promise","all","addThemes","addOfficeRels","definedNames","_openStream","path","bufSize","batch","append","name","on","emit","_commitWorksheets","commitWorksheet","worksheet","committed","resolve","commit","promises","map","length","addMedia","addContentTypes","addApp","addCore","addSharedStrings","addStyles","addWorkbookRels","addWorkbook","_finalize","nextId","i","addImage","image","id","medium","Object","assign","type","extension","push","getImage","addWorksheet","undefined","tabColor","console","trace","properties","workbook","state","pageSetup","autoFilter","headerFooter","getWorksheet","find","xml","xform","toXml","Id","Type","OfficeDocument","Target","CoreProperties","ExtenderProperties","model","worksheets","filter","Boolean","file","buffer","base64","dataimg64","content","substring","indexOf","Error","coreXform","count","sharedStringsXform","relationships","Styles","Theme","forEach","rId","Worksheet","calcProperties","prepare","reject","finalize","module","exports"],"sources":["../../../../lib/stream/xlsx/workbook-writer.js"],"sourcesContent":["const fs = require('fs');\nconst Archiver = require('archiver');\n\nconst StreamBuf = require('../../utils/stream-buf');\n\nconst RelType = require('../../xlsx/rel-type');\nconst StylesXform = require('../../xlsx/xform/style/styles-xform');\nconst SharedStrings = require('../../utils/shared-strings');\nconst DefinedNames = require('../../doc/defined-names');\n\nconst CoreXform = require('../../xlsx/xform/core/core-xform');\nconst RelationshipsXform = require('../../xlsx/xform/core/relationships-xform');\nconst ContentTypesXform = require('../../xlsx/xform/core/content-types-xform');\nconst AppXform = require('../../xlsx/xform/core/app-xform');\nconst WorkbookXform = require('../../xlsx/xform/book/workbook-xform');\nconst SharedStringsXform = require('../../xlsx/xform/strings/shared-strings-xform');\n\nconst WorksheetWriter = require('./worksheet-writer');\n\nconst theme1Xml = require('../../xlsx/xml/theme1.js');\n\nclass WorkbookWriter {\n constructor(options) {\n options = options || {};\n\n this.created = options.created || new Date();\n this.modified = options.modified || this.created;\n this.creator = options.creator || 'ExcelJS';\n this.lastModifiedBy = options.lastModifiedBy || 'ExcelJS';\n this.lastPrinted = options.lastPrinted;\n\n // using shared strings creates a smaller xlsx file but may use more memory\n this.useSharedStrings = options.useSharedStrings || false;\n this.sharedStrings = new SharedStrings();\n\n // style manager\n this.styles = options.useStyles ? new StylesXform(true) : new StylesXform.Mock(true);\n\n // defined names\n this._definedNames = new DefinedNames();\n\n this._worksheets = [];\n this.views = [];\n\n this.zipOptions = options.zip;\n\n this.media = [];\n this.commentRefs = [];\n\n this.zip = Archiver('zip', this.zipOptions);\n if (options.stream) {\n this.stream = options.stream;\n } else if (options.filename) {\n this.stream = fs.createWriteStream(options.filename);\n } else {\n this.stream = new StreamBuf();\n }\n this.zip.pipe(this.stream);\n\n // these bits can be added right now\n this.promise = Promise.all([this.addThemes(), this.addOfficeRels()]);\n }\n\n get definedNames() {\n return this._definedNames;\n }\n\n _openStream(path) {\n const stream = new StreamBuf({bufSize: 65536, batch: true});\n this.zip.append(stream, {name: path});\n stream.on('finish', () => {\n stream.emit('zipped');\n });\n return stream;\n }\n\n _commitWorksheets() {\n const commitWorksheet = function(worksheet) {\n if (!worksheet.committed) {\n return new Promise(resolve => {\n worksheet.stream.on('zipped', () => {\n resolve();\n });\n worksheet.commit();\n });\n }\n return Promise.resolve();\n };\n // if there are any uncommitted worksheets, commit them now and wait\n const promises = this._worksheets.map(commitWorksheet);\n if (promises.length) {\n return Promise.all(promises);\n }\n return Promise.resolve();\n }\n\n async commit() {\n // commit all worksheets, then add suplimentary files\n await this.promise;\n await this.addMedia();\n await this._commitWorksheets();\n await Promise.all([\n this.addContentTypes(),\n this.addApp(),\n this.addCore(),\n this.addSharedStrings(),\n this.addStyles(),\n this.addWorkbookRels(),\n ]);\n await this.addWorkbook();\n return this._finalize();\n }\n\n get nextId() {\n // find the next unique spot to add worksheet\n let i;\n for (i = 1; i < this._worksheets.length; i++) {\n if (!this._worksheets[i]) {\n return i;\n }\n }\n return this._worksheets.length || 1;\n }\n\n addImage(image) {\n const id = this.media.length;\n const medium = Object.assign({}, image, {type: 'image', name: `image${id}.${image.extension}`});\n this.media.push(medium);\n return id;\n }\n\n getImage(id) {\n return this.media[id];\n }\n\n addWorksheet(name, options) {\n // it's possible to add a worksheet with different than default\n // shared string handling\n // in fact, it's even possible to switch it mid-sheet\n options = options || {};\n const useSharedStrings =\n options.useSharedStrings !== undefined ? options.useSharedStrings : this.useSharedStrings;\n\n if (options.tabColor) {\n // eslint-disable-next-line no-console\n console.trace('tabColor option has moved to { properties: tabColor: {...} }');\n options.properties = Object.assign(\n {\n tabColor: options.tabColor,\n },\n options.properties\n );\n }\n\n const id = this.nextId;\n name = name || `sheet${id}`;\n\n const worksheet = new WorksheetWriter({\n id,\n name,\n workbook: this,\n useSharedStrings,\n properties: options.properties,\n state: options.state,\n pageSetup: options.pageSetup,\n views: options.views,\n autoFilter: options.autoFilter,\n headerFooter: options.headerFooter,\n });\n\n this._worksheets[id] = worksheet;\n return worksheet;\n }\n\n getWorksheet(id) {\n if (id === undefined) {\n return this._worksheets.find(() => true);\n }\n if (typeof id === 'number') {\n return this._worksheets[id];\n }\n if (typeof id === 'string') {\n return this._worksheets.find(worksheet => worksheet && worksheet.name === id);\n }\n return undefined;\n }\n\n addStyles() {\n return new Promise(resolve => {\n this.zip.append(this.styles.xml, {name: 'xl/styles.xml'});\n resolve();\n });\n }\n\n addThemes() {\n return new Promise(resolve => {\n this.zip.append(theme1Xml, {name: 'xl/theme/theme1.xml'});\n resolve();\n });\n }\n\n addOfficeRels() {\n return new Promise(resolve => {\n const xform = new RelationshipsXform();\n const xml = xform.toXml([\n {Id: 'rId1', Type: RelType.OfficeDocument, Target: 'xl/workbook.xml'},\n {Id: 'rId2', Type: RelType.CoreProperties, Target: 'docProps/core.xml'},\n {Id: 'rId3', Type: RelType.ExtenderProperties, Target: 'docProps/app.xml'},\n ]);\n this.zip.append(xml, {name: '/_rels/.rels'});\n resolve();\n });\n }\n\n addContentTypes() {\n return new Promise(resolve => {\n const model = {\n worksheets: this._worksheets.filter(Boolean),\n sharedStrings: this.sharedStrings,\n commentRefs: this.commentRefs,\n media: this.media,\n };\n const xform = new ContentTypesXform();\n const xml = xform.toXml(model);\n this.zip.append(xml, {name: '[Content_Types].xml'});\n resolve();\n });\n }\n\n addMedia() {\n return Promise.all(\n this.media.map(medium => {\n if (medium.type === 'image') {\n const filename = `xl/media/${medium.name}`;\n if (medium.filename) {\n return this.zip.file(medium.filename, {name: filename});\n }\n if (medium.buffer) {\n return this.zip.append(medium.buffer, {name: filename});\n }\n if (medium.base64) {\n const dataimg64 = medium.base64;\n const content = dataimg64.substring(dataimg64.indexOf(',') + 1);\n return this.zip.append(content, {name: filename, base64: true});\n }\n }\n throw new Error('Unsupported media');\n })\n );\n }\n\n addApp() {\n return new Promise(resolve => {\n const model = {\n worksheets: this._worksheets.filter(Boolean),\n };\n const xform = new AppXform();\n const xml = xform.toXml(model);\n this.zip.append(xml, {name: 'docProps/app.xml'});\n resolve();\n });\n }\n\n addCore() {\n return new Promise(resolve => {\n const coreXform = new CoreXform();\n const xml = coreXform.toXml(this);\n this.zip.append(xml, {name: 'docProps/core.xml'});\n resolve();\n });\n }\n\n addSharedStrings() {\n if (this.sharedStrings.count) {\n return new Promise(resolve => {\n const sharedStringsXform = new SharedStringsXform();\n const xml = sharedStringsXform.toXml(this.sharedStrings);\n this.zip.append(xml, {name: '/xl/sharedStrings.xml'});\n resolve();\n });\n }\n return Promise.resolve();\n }\n\n addWorkbookRels() {\n let count = 1;\n const relationships = [\n {Id: `rId${count++}`, Type: RelType.Styles, Target: 'styles.xml'},\n {Id: `rId${count++}`, Type: RelType.Theme, Target: 'theme/theme1.xml'},\n ];\n if (this.sharedStrings.count) {\n relationships.push({\n Id: `rId${count++}`,\n Type: RelType.SharedStrings,\n Target: 'sharedStrings.xml',\n });\n }\n this._worksheets.forEach(worksheet => {\n if (worksheet) {\n worksheet.rId = `rId${count++}`;\n relationships.push({\n Id: worksheet.rId,\n Type: RelType.Worksheet,\n Target: `worksheets/sheet${worksheet.id}.xml`,\n });\n }\n });\n return new Promise(resolve => {\n const xform = new RelationshipsXform();\n const xml = xform.toXml(relationships);\n this.zip.append(xml, {name: '/xl/_rels/workbook.xml.rels'});\n resolve();\n });\n }\n\n addWorkbook() {\n const {zip} = this;\n const model = {\n worksheets: this._worksheets.filter(Boolean),\n definedNames: this._definedNames.model,\n views: this.views,\n properties: {},\n calcProperties: {},\n };\n\n return new Promise(resolve => {\n const xform = new WorkbookXform();\n xform.prepare(model);\n zip.append(xform.toXml(model), {name: '/xl/workbook.xml'});\n resolve();\n });\n }\n\n _finalize() {\n return new Promise((resolve, reject) => {\n this.stream.on('error', reject);\n this.stream.on('finish', () => {\n resolve(this);\n });\n this.zip.on('error', reject);\n\n this.zip.finalize();\n });\n }\n}\n\nmodule.exports = WorkbookWriter;\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"workbook-writer.js","names":["fs","require","Archiver","StreamBuf","RelType","StylesXform","SharedStrings","DefinedNames","CoreXform","RelationshipsXform","ContentTypesXform","AppXform","WorkbookXform","SharedStringsXform","DrawingXform","WorksheetWriter","theme1Xml","WorkbookWriter","constructor","options","created","Date","modified","creator","lastModifiedBy","lastPrinted","useSharedStrings","sharedStrings","styles","useStyles","Mock","_definedNames","_worksheets","views","zipOptions","zip","media","drawings","commentRefs","stream","filename","createWriteStream","pipe","promise","Promise","all","addThemes","addOfficeRels","definedNames","_openStream","path","bufSize","batch","append","name","on","emit","_commitWorksheets","commitWorksheet","worksheet","committed","resolve","commit","promises","map","length","addMedia","addDrawings","addContentTypes","addApp","addCore","addSharedStrings","addStyles","addWorkbookRels","addWorkbook","_finalize","nextId","i","addImage","image","id","medium","Object","assign","type","extension","push","getImage","addWorksheet","undefined","tabColor","console","trace","properties","workbook","state","pageSetup","autoFilter","headerFooter","getWorksheet","find","xml","xform","toXml","Id","Type","OfficeDocument","Target","CoreProperties","ExtenderProperties","model","worksheets","filter","Boolean","file","buffer","base64","dataimg64","content","substring","indexOf","Error","drawingXform","relsXform","forEach","drawing","prepare","rels","coreXform","count","sharedStringsXform","relationships","Styles","Theme","rId","Worksheet","calcProperties","reject","finalize","module","exports"],"sources":["../../../../lib/stream/xlsx/workbook-writer.js"],"sourcesContent":["const fs = require('fs');\nconst Archiver = require('archiver');\n\nconst StreamBuf = require('../../utils/stream-buf');\n\nconst RelType = require('../../xlsx/rel-type');\nconst StylesXform = require('../../xlsx/xform/style/styles-xform');\nconst SharedStrings = require('../../utils/shared-strings');\nconst DefinedNames = require('../../doc/defined-names');\n\nconst CoreXform = require('../../xlsx/xform/core/core-xform');\nconst RelationshipsXform = require('../../xlsx/xform/core/relationships-xform');\nconst ContentTypesXform = require('../../xlsx/xform/core/content-types-xform');\nconst AppXform = require('../../xlsx/xform/core/app-xform');\nconst WorkbookXform = require('../../xlsx/xform/book/workbook-xform');\nconst SharedStringsXform = require('../../xlsx/xform/strings/shared-strings-xform');\nconst DrawingXform = require('../../xlsx/xform/drawing/drawing-xform');\n\nconst WorksheetWriter = require('./worksheet-writer');\n\nconst theme1Xml = require('../../xlsx/xml/theme1.js');\n\nclass WorkbookWriter {\n constructor(options) {\n options = options || {};\n\n this.created = options.created || new Date();\n this.modified = options.modified || this.created;\n this.creator = options.creator || 'ExcelJS';\n this.lastModifiedBy = options.lastModifiedBy || 'ExcelJS';\n this.lastPrinted = options.lastPrinted;\n\n // using shared strings creates a smaller xlsx file but may use more memory\n this.useSharedStrings = options.useSharedStrings || false;\n this.sharedStrings = new SharedStrings();\n\n // style manager\n this.styles = options.useStyles ? new StylesXform(true) : new StylesXform.Mock(true);\n\n // defined names\n this._definedNames = new DefinedNames();\n\n this._worksheets = [];\n this.views = [];\n\n this.zipOptions = options.zip;\n\n this.media = [];\n this.drawings = [];\n this.commentRefs = [];\n\n this.zip = Archiver('zip', this.zipOptions);\n if (options.stream) {\n this.stream = options.stream;\n } else if (options.filename) {\n this.stream = fs.createWriteStream(options.filename);\n } else {\n this.stream = new StreamBuf();\n }\n this.zip.pipe(this.stream);\n\n // these bits can be added right now\n this.promise = Promise.all([this.addThemes(), this.addOfficeRels()]);\n }\n\n get definedNames() {\n return this._definedNames;\n }\n\n _openStream(path) {\n const stream = new StreamBuf({bufSize: 65536, batch: true});\n this.zip.append(stream, {name: path});\n stream.on('finish', () => {\n stream.emit('zipped');\n });\n return stream;\n }\n\n _commitWorksheets() {\n const commitWorksheet = function(worksheet) {\n if (!worksheet.committed) {\n return new Promise(resolve => {\n worksheet.stream.on('zipped', () => {\n resolve();\n });\n worksheet.commit();\n });\n }\n return Promise.resolve();\n };\n // if there are any uncommitted worksheets, commit them now and wait\n const promises = this._worksheets.map(commitWorksheet);\n if (promises.length) {\n return Promise.all(promises);\n }\n return Promise.resolve();\n }\n\n async commit() {\n // commit all worksheets, then add suplimentary files\n await this.promise;\n await this.addMedia();\n await this._commitWorksheets();\n await this.addDrawings();\n await Promise.all([\n this.addContentTypes(),\n this.addApp(),\n this.addCore(),\n this.addSharedStrings(),\n this.addStyles(),\n this.addWorkbookRels(),\n ]);\n await this.addWorkbook();\n return this._finalize();\n }\n\n get nextId() {\n // find the next unique spot to add worksheet\n let i;\n for (i = 1; i < this._worksheets.length; i++) {\n if (!this._worksheets[i]) {\n return i;\n }\n }\n return this._worksheets.length || 1;\n }\n\n addImage(image) {\n const id = this.media.length;\n const medium = Object.assign({}, image, {type: 'image', name: `image${id}.${image.extension}`});\n this.media.push(medium);\n return id;\n }\n\n getImage(id) {\n return this.media[id];\n }\n\n addWorksheet(name, options) {\n // it's possible to add a worksheet with different than default\n // shared string handling\n // in fact, it's even possible to switch it mid-sheet\n options = options || {};\n const useSharedStrings =\n options.useSharedStrings !== undefined ? options.useSharedStrings : this.useSharedStrings;\n\n if (options.tabColor) {\n // eslint-disable-next-line no-console\n console.trace('tabColor option has moved to { properties: tabColor: {...} }');\n options.properties = Object.assign(\n {\n tabColor: options.tabColor,\n },\n options.properties\n );\n }\n\n const id = this.nextId;\n name = name || `sheet${id}`;\n\n const worksheet = new WorksheetWriter({\n id,\n name,\n workbook: this,\n useSharedStrings,\n properties: options.properties,\n state: options.state,\n pageSetup: options.pageSetup,\n views: options.views,\n autoFilter: options.autoFilter,\n headerFooter: options.headerFooter,\n });\n\n this._worksheets[id] = worksheet;\n return worksheet;\n }\n\n getWorksheet(id) {\n if (id === undefined) {\n return this._worksheets.find(() => true);\n }\n if (typeof id === 'number') {\n return this._worksheets[id];\n }\n if (typeof id === 'string') {\n return this._worksheets.find(worksheet => worksheet && worksheet.name === id);\n }\n return undefined;\n }\n\n addStyles() {\n return new Promise(resolve => {\n this.zip.append(this.styles.xml, {name: 'xl/styles.xml'});\n resolve();\n });\n }\n\n addThemes() {\n return new Promise(resolve => {\n this.zip.append(theme1Xml, {name: 'xl/theme/theme1.xml'});\n resolve();\n });\n }\n\n addOfficeRels() {\n return new Promise(resolve => {\n const xform = new RelationshipsXform();\n const xml = xform.toXml([\n {Id: 'rId1', Type: RelType.OfficeDocument, Target: 'xl/workbook.xml'},\n {Id: 'rId2', Type: RelType.CoreProperties, Target: 'docProps/core.xml'},\n {Id: 'rId3', Type: RelType.ExtenderProperties, Target: 'docProps/app.xml'},\n ]);\n this.zip.append(xml, {name: '/_rels/.rels'});\n resolve();\n });\n }\n\n addContentTypes() {\n return new Promise(resolve => {\n const model = {\n worksheets: this._worksheets.filter(Boolean),\n sharedStrings: this.sharedStrings,\n commentRefs: this.commentRefs,\n media: this.media,\n drawings: this.drawings,\n };\n const xform = new ContentTypesXform();\n const xml = xform.toXml(model);\n this.zip.append(xml, {name: '[Content_Types].xml'});\n resolve();\n });\n }\n\n addMedia() {\n return Promise.all(\n this.media.map(medium => {\n if (medium.type === 'image') {\n const filename = `xl/media/${medium.name}`;\n if (medium.filename) {\n return this.zip.file(medium.filename, {name: filename});\n }\n if (medium.buffer) {\n return this.zip.append(medium.buffer, {name: filename});\n }\n if (medium.base64) {\n const dataimg64 = medium.base64;\n const content = dataimg64.substring(dataimg64.indexOf(',') + 1);\n return this.zip.append(content, {name: filename, base64: true});\n }\n }\n throw new Error('Unsupported media');\n })\n );\n }\n\n addDrawings() {\n return new Promise(resolve => {\n const drawingXform = new DrawingXform();\n const relsXform = new RelationshipsXform();\n this.drawings.forEach(drawing => {\n drawingXform.prepare(drawing, {});\n this.zip.append(drawingXform.toXml(drawing), {name: `xl/drawings/${drawing.name}.xml`});\n this.zip.append(relsXform.toXml(drawing.rels), {\n name: `xl/drawings/_rels/${drawing.name}.xml.rels`,\n });\n });\n resolve();\n });\n }\n\n addApp() {\n return new Promise(resolve => {\n const model = {\n worksheets: this._worksheets.filter(Boolean),\n };\n const xform = new AppXform();\n const xml = xform.toXml(model);\n this.zip.append(xml, {name: 'docProps/app.xml'});\n resolve();\n });\n }\n\n addCore() {\n return new Promise(resolve => {\n const coreXform = new CoreXform();\n const xml = coreXform.toXml(this);\n this.zip.append(xml, {name: 'docProps/core.xml'});\n resolve();\n });\n }\n\n addSharedStrings() {\n if (this.sharedStrings.count) {\n return new Promise(resolve => {\n const sharedStringsXform = new SharedStringsXform();\n const xml = sharedStringsXform.toXml(this.sharedStrings);\n this.zip.append(xml, {name: '/xl/sharedStrings.xml'});\n resolve();\n });\n }\n return Promise.resolve();\n }\n\n addWorkbookRels() {\n let count = 1;\n const relationships = [\n {Id: `rId${count++}`, Type: RelType.Styles, Target: 'styles.xml'},\n {Id: `rId${count++}`, Type: RelType.Theme, Target: 'theme/theme1.xml'},\n ];\n if (this.sharedStrings.count) {\n relationships.push({\n Id: `rId${count++}`,\n Type: RelType.SharedStrings,\n Target: 'sharedStrings.xml',\n });\n }\n this._worksheets.forEach(worksheet => {\n if (worksheet) {\n worksheet.rId = `rId${count++}`;\n relationships.push({\n Id: worksheet.rId,\n Type: RelType.Worksheet,\n Target: `worksheets/sheet${worksheet.id}.xml`,\n });\n }\n });\n return new Promise(resolve => {\n const xform = new RelationshipsXform();\n const xml = xform.toXml(relationships);\n this.zip.append(xml, {name: '/xl/_rels/workbook.xml.rels'});\n resolve();\n });\n }\n\n addWorkbook() {\n const {zip} = this;\n const model = {\n worksheets: this._worksheets.filter(Boolean),\n definedNames: this._definedNames.model,\n views: this.views,\n properties: {},\n calcProperties: {},\n };\n\n return new Promise(resolve => {\n const xform = new WorkbookXform();\n xform.prepare(model);\n zip.append(xform.toXml(model), {name: '/xl/workbook.xml'});\n resolve();\n });\n }\n\n _finalize() {\n return new Promise((resolve, reject) => {\n this.stream.on('error', reject);\n this.stream.on('finish', () => {\n resolve(this);\n });\n this.zip.on('error', reject);\n\n this.zip.finalize();\n });\n }\n}\n\nmodule.exports = WorkbookWriter;\n"],"mappings":"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","ignoreList":[]}
@@ -305,7 +305,7 @@ class WorksheetReader extends EventEmitter {
305
305
  if (c.s) {
306
306
  const style = styles.getStyleModel(c.s);
307
307
  if (style) {
308
- cell.style = style;
308
+ cell._setSharedStyle(style);
309
309
  }
310
310
  }
311
311
  if (c.f) {
@@ -1 +1 @@
1
- {"version":3,"file":"worksheet-reader.js","names":["EventEmitter","require","parseSax","_","utils","colCache","Dimensions","Row","Column","WorksheetReader","constructor","workbook","id","iterator","options","name","_columns","_keys","_dimensions","destroy","Error","dimensions","columns","getColumn","c","col","l2n","length","n","push","getColumnKey","key","setColumnKey","value","deleteColumnKey","eachColumnKey","f","each","read","events","parse","eventType","emit","error","Symbol","asyncIterator","emitSheet","emitHyperlinks","hyperlinks","worksheets","sharedStrings","styles","properties","inCols","inRows","inHyperlinks","cols","row","current","worksheetEvents","node","min","parseInt","attributes","max","width","parseFloat","styleId","style","r","ht","height","s","getStyleModel","ref","t","text","v","hyperlink","rId","fromModel","expandRow","address","decodeAddress","cell","getCell","cellValue","formula","result","xmlDecode","index","sharedString","isDateFmt","numFmt","excelToDate","model","date1904","undefined","module","exports"],"sources":["../../../../lib/stream/xlsx/worksheet-reader.js"],"sourcesContent":["const {EventEmitter} = require('events');\nconst parseSax = require('../../utils/parse-sax');\n\nconst _ = require('../../utils/under-dash');\nconst utils = require('../../utils/utils');\nconst colCache = require('../../utils/col-cache');\nconst Dimensions = require('../../doc/range');\n\nconst Row = require('../../doc/row');\nconst Column = require('../../doc/column');\n\nclass WorksheetReader extends EventEmitter {\n constructor({workbook, id, iterator, options}) {\n super();\n\n this.workbook = workbook;\n this.id = id;\n this.iterator = iterator;\n this.options = options || {};\n\n // and a name\n this.name = `Sheet${this.id}`;\n\n // column definitions\n this._columns = null;\n this._keys = {};\n\n // keep a record of dimensions\n this._dimensions = new Dimensions();\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 // return the current dimensions of the writer\n get dimensions() {\n return this._dimensions;\n }\n\n // =========================================================================\n // Columns\n\n // get the current columns array.\n get columns() {\n return this._columns;\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) {\n return col;\n }\n\n // otherise, 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 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 async read() {\n try {\n for await (const events of this.parse()) {\n for (const {eventType, value} of events) {\n this.emit(eventType, value);\n }\n }\n this.emit('finished');\n } catch (error) {\n this.emit('error', error);\n }\n }\n\n async *[Symbol.asyncIterator]() {\n for await (const events of this.parse()) {\n for (const {eventType, value} of events) {\n if (eventType === 'row') {\n yield value;\n }\n }\n }\n }\n\n async *parse() {\n const {iterator, options} = this;\n let emitSheet = false;\n let emitHyperlinks = false;\n let hyperlinks = null;\n switch (options.worksheets) {\n case 'emit':\n emitSheet = true;\n break;\n case 'prep':\n break;\n default:\n break;\n }\n switch (options.hyperlinks) {\n case 'emit':\n emitHyperlinks = true;\n break;\n case 'cache':\n this.hyperlinks = hyperlinks = {};\n break;\n default:\n break;\n }\n if (!emitSheet && !emitHyperlinks && !hyperlinks) {\n return;\n }\n\n // references\n const {sharedStrings, styles, properties} = this.workbook;\n\n // xml position\n let inCols = false;\n let inRows = false;\n let inHyperlinks = false;\n\n // parse state\n let cols = null;\n let row = null;\n let c = null;\n let current = null;\n for await (const events of parseSax(iterator)) {\n const worksheetEvents = [];\n for (const {eventType, value} of events) {\n if (eventType === 'opentag') {\n const node = value;\n if (emitSheet) {\n switch (node.name) {\n case 'cols':\n inCols = true;\n cols = [];\n break;\n case 'sheetData':\n inRows = true;\n break;\n\n case 'col':\n if (inCols) {\n cols.push({\n min: parseInt(node.attributes.min, 10),\n max: parseInt(node.attributes.max, 10),\n width: parseFloat(node.attributes.width),\n styleId: parseInt(node.attributes.style || '0', 10),\n });\n }\n break;\n\n case 'row':\n if (inRows) {\n const r = parseInt(node.attributes.r, 10);\n row = new Row(this, r);\n if (node.attributes.ht) {\n row.height = parseFloat(node.attributes.ht);\n }\n if (node.attributes.s) {\n const styleId = parseInt(node.attributes.s, 10);\n const style = styles.getStyleModel(styleId);\n if (style) {\n row.style = style;\n }\n }\n }\n break;\n case 'c':\n if (row) {\n c = {\n ref: node.attributes.r,\n s: parseInt(node.attributes.s, 10),\n t: node.attributes.t,\n };\n }\n break;\n case 'f':\n if (c) {\n current = c.f = {text: ''};\n }\n break;\n case 'v':\n if (c) {\n current = c.v = {text: ''};\n }\n break;\n case 'is':\n case 't':\n if (c) {\n current = c.v = {text: ''};\n }\n break;\n case 'mergeCell':\n break;\n default:\n break;\n }\n }\n\n // =================================================================\n //\n if (emitHyperlinks || hyperlinks) {\n switch (node.name) {\n case 'hyperlinks':\n inHyperlinks = true;\n break;\n case 'hyperlink':\n if (inHyperlinks) {\n const hyperlink = {\n ref: node.attributes.ref,\n rId: node.attributes['r:id'],\n };\n if (emitHyperlinks) {\n worksheetEvents.push({eventType: 'hyperlink', value: hyperlink});\n } else {\n hyperlinks[hyperlink.ref] = hyperlink;\n }\n }\n break;\n default:\n break;\n }\n }\n } else if (eventType === 'text') {\n // only text data is for sheet values\n if (emitSheet) {\n if (current) {\n current.text += value;\n }\n }\n } else if (eventType === 'closetag') {\n const node = value;\n if (emitSheet) {\n switch (node.name) {\n case 'cols':\n inCols = false;\n this._columns = Column.fromModel(cols);\n break;\n case 'sheetData':\n inRows = false;\n break;\n\n case 'row':\n this._dimensions.expandRow(row);\n worksheetEvents.push({eventType: 'row', value: row});\n row = null;\n break;\n\n case 'c':\n if (row && c) {\n const address = colCache.decodeAddress(c.ref);\n const cell = row.getCell(address.col);\n if (c.s) {\n const style = styles.getStyleModel(c.s);\n if (style) {\n cell.style = style;\n }\n }\n\n if (c.f) {\n const cellValue = {\n formula: c.f.text,\n };\n if (c.v) {\n if (c.t === 'str') {\n cellValue.result = utils.xmlDecode(c.v.text);\n } else {\n cellValue.result = parseFloat(c.v.text);\n }\n }\n cell.value = cellValue;\n } else if (c.v) {\n switch (c.t) {\n case 's': {\n const index = parseInt(c.v.text, 10);\n if (sharedStrings) {\n cell.value = sharedStrings[index];\n } else {\n cell.value = {\n sharedString: index,\n };\n }\n break;\n }\n\n case 'inlineStr':\n case 'str':\n cell.value = utils.xmlDecode(c.v.text);\n break;\n\n case 'e':\n cell.value = {error: c.v.text};\n break;\n\n case 'b':\n cell.value = parseInt(c.v.text, 10) !== 0;\n break;\n\n default:\n if (utils.isDateFmt(cell.numFmt)) {\n cell.value = utils.excelToDate(\n parseFloat(c.v.text),\n properties.model && properties.model.date1904\n );\n } else {\n cell.value = parseFloat(c.v.text);\n }\n break;\n }\n }\n if (hyperlinks) {\n const hyperlink = hyperlinks[c.ref];\n if (hyperlink) {\n cell.text = cell.value;\n cell.value = undefined;\n cell.hyperlink = hyperlink;\n }\n }\n c = null;\n }\n break;\n default:\n break;\n }\n }\n if (emitHyperlinks || hyperlinks) {\n switch (node.name) {\n case 'hyperlinks':\n inHyperlinks = false;\n break;\n default:\n break;\n }\n }\n }\n }\n if (worksheetEvents.length > 0) {\n yield worksheetEvents;\n }\n }\n }\n}\n\nmodule.exports = WorksheetReader;\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"worksheet-reader.js","names":["EventEmitter","require","parseSax","_","utils","colCache","Dimensions","Row","Column","WorksheetReader","constructor","workbook","id","iterator","options","name","_columns","_keys","_dimensions","destroy","Error","dimensions","columns","getColumn","c","col","l2n","length","n","push","getColumnKey","key","setColumnKey","value","deleteColumnKey","eachColumnKey","f","each","read","events","parse","eventType","emit","error","Symbol","asyncIterator","emitSheet","emitHyperlinks","hyperlinks","worksheets","sharedStrings","styles","properties","inCols","inRows","inHyperlinks","cols","row","current","worksheetEvents","node","min","parseInt","attributes","max","width","parseFloat","styleId","style","r","ht","height","s","getStyleModel","ref","t","text","v","hyperlink","rId","fromModel","expandRow","address","decodeAddress","cell","getCell","_setSharedStyle","cellValue","formula","result","xmlDecode","index","sharedString","isDateFmt","numFmt","excelToDate","model","date1904","undefined","module","exports"],"sources":["../../../../lib/stream/xlsx/worksheet-reader.js"],"sourcesContent":["const {EventEmitter} = require('events');\nconst parseSax = require('../../utils/parse-sax');\n\nconst _ = require('../../utils/under-dash');\nconst utils = require('../../utils/utils');\nconst colCache = require('../../utils/col-cache');\nconst Dimensions = require('../../doc/range');\n\nconst Row = require('../../doc/row');\nconst Column = require('../../doc/column');\n\nclass WorksheetReader extends EventEmitter {\n constructor({workbook, id, iterator, options}) {\n super();\n\n this.workbook = workbook;\n this.id = id;\n this.iterator = iterator;\n this.options = options || {};\n\n // and a name\n this.name = `Sheet${this.id}`;\n\n // column definitions\n this._columns = null;\n this._keys = {};\n\n // keep a record of dimensions\n this._dimensions = new Dimensions();\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 // return the current dimensions of the writer\n get dimensions() {\n return this._dimensions;\n }\n\n // =========================================================================\n // Columns\n\n // get the current columns array.\n get columns() {\n return this._columns;\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) {\n return col;\n }\n\n // otherise, 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 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 async read() {\n try {\n for await (const events of this.parse()) {\n for (const {eventType, value} of events) {\n this.emit(eventType, value);\n }\n }\n this.emit('finished');\n } catch (error) {\n this.emit('error', error);\n }\n }\n\n async *[Symbol.asyncIterator]() {\n for await (const events of this.parse()) {\n for (const {eventType, value} of events) {\n if (eventType === 'row') {\n yield value;\n }\n }\n }\n }\n\n async *parse() {\n const {iterator, options} = this;\n let emitSheet = false;\n let emitHyperlinks = false;\n let hyperlinks = null;\n switch (options.worksheets) {\n case 'emit':\n emitSheet = true;\n break;\n case 'prep':\n break;\n default:\n break;\n }\n switch (options.hyperlinks) {\n case 'emit':\n emitHyperlinks = true;\n break;\n case 'cache':\n this.hyperlinks = hyperlinks = {};\n break;\n default:\n break;\n }\n if (!emitSheet && !emitHyperlinks && !hyperlinks) {\n return;\n }\n\n // references\n const {sharedStrings, styles, properties} = this.workbook;\n\n // xml position\n let inCols = false;\n let inRows = false;\n let inHyperlinks = false;\n\n // parse state\n let cols = null;\n let row = null;\n let c = null;\n let current = null;\n for await (const events of parseSax(iterator)) {\n const worksheetEvents = [];\n for (const {eventType, value} of events) {\n if (eventType === 'opentag') {\n const node = value;\n if (emitSheet) {\n switch (node.name) {\n case 'cols':\n inCols = true;\n cols = [];\n break;\n case 'sheetData':\n inRows = true;\n break;\n\n case 'col':\n if (inCols) {\n cols.push({\n min: parseInt(node.attributes.min, 10),\n max: parseInt(node.attributes.max, 10),\n width: parseFloat(node.attributes.width),\n styleId: parseInt(node.attributes.style || '0', 10),\n });\n }\n break;\n\n case 'row':\n if (inRows) {\n const r = parseInt(node.attributes.r, 10);\n row = new Row(this, r);\n if (node.attributes.ht) {\n row.height = parseFloat(node.attributes.ht);\n }\n if (node.attributes.s) {\n const styleId = parseInt(node.attributes.s, 10);\n const style = styles.getStyleModel(styleId);\n if (style) {\n row.style = style;\n }\n }\n }\n break;\n case 'c':\n if (row) {\n c = {\n ref: node.attributes.r,\n s: parseInt(node.attributes.s, 10),\n t: node.attributes.t,\n };\n }\n break;\n case 'f':\n if (c) {\n current = c.f = {text: ''};\n }\n break;\n case 'v':\n if (c) {\n current = c.v = {text: ''};\n }\n break;\n case 'is':\n case 't':\n if (c) {\n current = c.v = {text: ''};\n }\n break;\n case 'mergeCell':\n break;\n default:\n break;\n }\n }\n\n // =================================================================\n //\n if (emitHyperlinks || hyperlinks) {\n switch (node.name) {\n case 'hyperlinks':\n inHyperlinks = true;\n break;\n case 'hyperlink':\n if (inHyperlinks) {\n const hyperlink = {\n ref: node.attributes.ref,\n rId: node.attributes['r:id'],\n };\n if (emitHyperlinks) {\n worksheetEvents.push({eventType: 'hyperlink', value: hyperlink});\n } else {\n hyperlinks[hyperlink.ref] = hyperlink;\n }\n }\n break;\n default:\n break;\n }\n }\n } else if (eventType === 'text') {\n // only text data is for sheet values\n if (emitSheet) {\n if (current) {\n current.text += value;\n }\n }\n } else if (eventType === 'closetag') {\n const node = value;\n if (emitSheet) {\n switch (node.name) {\n case 'cols':\n inCols = false;\n this._columns = Column.fromModel(cols);\n break;\n case 'sheetData':\n inRows = false;\n break;\n\n case 'row':\n this._dimensions.expandRow(row);\n worksheetEvents.push({eventType: 'row', value: row});\n row = null;\n break;\n\n case 'c':\n if (row && c) {\n const address = colCache.decodeAddress(c.ref);\n const cell = row.getCell(address.col);\n if (c.s) {\n const style = styles.getStyleModel(c.s);\n if (style) {\n cell._setSharedStyle(style);\n }\n }\n\n if (c.f) {\n const cellValue = {\n formula: c.f.text,\n };\n if (c.v) {\n if (c.t === 'str') {\n cellValue.result = utils.xmlDecode(c.v.text);\n } else {\n cellValue.result = parseFloat(c.v.text);\n }\n }\n cell.value = cellValue;\n } else if (c.v) {\n switch (c.t) {\n case 's': {\n const index = parseInt(c.v.text, 10);\n if (sharedStrings) {\n cell.value = sharedStrings[index];\n } else {\n cell.value = {\n sharedString: index,\n };\n }\n break;\n }\n\n case 'inlineStr':\n case 'str':\n cell.value = utils.xmlDecode(c.v.text);\n break;\n\n case 'e':\n cell.value = {error: c.v.text};\n break;\n\n case 'b':\n cell.value = parseInt(c.v.text, 10) !== 0;\n break;\n\n default:\n if (utils.isDateFmt(cell.numFmt)) {\n cell.value = utils.excelToDate(\n parseFloat(c.v.text),\n properties.model && properties.model.date1904\n );\n } else {\n cell.value = parseFloat(c.v.text);\n }\n break;\n }\n }\n if (hyperlinks) {\n const hyperlink = hyperlinks[c.ref];\n if (hyperlink) {\n cell.text = cell.value;\n cell.value = undefined;\n cell.hyperlink = hyperlink;\n }\n }\n c = null;\n }\n break;\n default:\n break;\n }\n }\n if (emitHyperlinks || hyperlinks) {\n switch (node.name) {\n case 'hyperlinks':\n inHyperlinks = false;\n break;\n default:\n break;\n }\n }\n }\n }\n if (worksheetEvents.length > 0) {\n yield worksheetEvents;\n }\n }\n }\n}\n\nmodule.exports = WorksheetReader;\n"],"mappings":"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","ignoreList":[]}