exceljs-lts 4.5.1 → 4.5.3

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/dist/es5/doc/table.js +89 -2
  2. package/dist/es5/doc/table.js.map +1 -1
  3. package/dist/es5/doc/worksheet.js +12 -6
  4. package/dist/es5/doc/worksheet.js.map +1 -1
  5. package/dist/es5/stream/xlsx/workbook-reader.js +69 -62
  6. package/dist/es5/stream/xlsx/workbook-reader.js.map +1 -1
  7. package/dist/es5/xlsx/xform/book/workbook-xform.js +34 -9
  8. package/dist/es5/xlsx/xform/book/workbook-xform.js.map +1 -1
  9. package/dist/es5/xlsx/xform/sheet/cf/cf-rule-xform.js +4 -0
  10. package/dist/es5/xlsx/xform/sheet/cf/cf-rule-xform.js.map +1 -1
  11. package/dist/es5/xlsx/xform/sheet/cf/conditional-formattings-xform.js +4 -1
  12. package/dist/es5/xlsx/xform/sheet/cf/conditional-formattings-xform.js.map +1 -1
  13. package/dist/es5/xlsx/xform/sheet/cf-ext/cf-rule-ext-xform.js +40 -2
  14. package/dist/es5/xlsx/xform/sheet/cf-ext/cf-rule-ext-xform.js.map +1 -1
  15. package/dist/es5/xlsx/xform/style/dxf-ext-xform.js +24 -0
  16. package/dist/es5/xlsx/xform/style/dxf-ext-xform.js.map +1 -0
  17. package/dist/es5/xlsx/xform/table/table-xform.js +2 -1
  18. package/dist/es5/xlsx/xform/table/table-xform.js.map +1 -1
  19. package/dist/exceljs.bare.js +621 -432
  20. package/dist/exceljs.bare.js.map +11 -9
  21. package/dist/exceljs.bare.min.js +8 -8
  22. package/dist/exceljs.bare.min.js.map +1 -1
  23. package/dist/exceljs.js +786 -597
  24. package/dist/exceljs.js.map +11 -9
  25. package/dist/exceljs.min.js +8 -8
  26. package/dist/exceljs.min.js.map +1 -1
  27. package/lib/doc/table.js +89 -2
  28. package/lib/doc/worksheet.js +15 -6
  29. package/lib/stream/xlsx/workbook-reader.js +64 -54
  30. package/lib/xlsx/xform/book/workbook-xform.js +42 -11
  31. package/lib/xlsx/xform/sheet/cf/cf-rule-xform.js +4 -0
  32. package/lib/xlsx/xform/sheet/cf/conditional-formattings-xform.js +3 -1
  33. package/lib/xlsx/xform/sheet/cf-ext/cf-rule-ext-xform.js +42 -1
  34. package/lib/xlsx/xform/style/dxf-ext-xform.js +19 -0
  35. package/lib/xlsx/xform/table/table-xform.js +2 -1
  36. package/package.json +1 -1
@@ -49,15 +49,15 @@ class WorkbookXform extends BaseXform {
49
49
  let index = 0; // sheets is sparse array - calc index manually
50
50
  model.sheets.forEach(sheet => {
51
51
  if (sheet.pageSetup && sheet.pageSetup.printArea) {
52
- sheet.pageSetup.printArea.split('&&').forEach(printArea => {
53
- const printAreaComponents = printArea.split(':');
54
- const definedName = {
52
+ // Excel allows only one Print_Area per sheet; multiple areas are comma separated ranges
53
+ const ranges = sheet.pageSetup.printArea.split('&&').filter(printArea => printArea).map(printArea => `'${sheet.name}'!${toAbsoluteRange(printArea)}`);
54
+ if (ranges.length) {
55
+ printAreas.push({
55
56
  name: '_xlnm.Print_Area',
56
- ranges: [`'${sheet.name}'!$${printAreaComponents[0]}:$${printAreaComponents[1]}`],
57
+ ranges,
57
58
  localSheetId: index
58
- };
59
- printAreas.push(definedName);
60
- });
59
+ });
60
+ }
61
61
  }
62
62
  if (sheet.pageSetup && (sheet.pageSetup.printTitlesRow || sheet.pageSetup.printTitlesColumn)) {
63
63
  const ranges = [];
@@ -183,8 +183,10 @@ class WorkbookXform extends BaseXform {
183
183
  if (!worksheet.pageSetup) {
184
184
  worksheet.pageSetup = {};
185
185
  }
186
- const range = colCache.decodeEx(definedName.ranges[0]);
187
- worksheet.pageSetup.printArea = worksheet.pageSetup.printArea ? `${worksheet.pageSetup.printArea}&&${range.dimensions}` : range.dimensions;
186
+ const printArea = definedName.ranges.map(fromDefinedNameRange).join('&&');
187
+ if (printArea) {
188
+ worksheet.pageSetup.printArea = worksheet.pageSetup.printArea ? `${worksheet.pageSetup.printArea}&&${printArea}` : printArea;
189
+ }
188
190
  }
189
191
  } else if (definedName.name === '_xlnm.Print_Titles') {
190
192
  worksheet = worksheets[definedName.localSheetId];
@@ -219,6 +221,29 @@ class WorkbookXform extends BaseXform {
219
221
  });
220
222
  }
221
223
  }
224
+
225
+ // convert a print area such as A1:B2, A:B, 1:3 or C3 into an absolute reference
226
+ // ($A$1:$B$2, $A:$B, $1:$3, $C$3)
227
+ function toAbsoluteRange(range) {
228
+ return range.split(':').map(part => {
229
+ const match = part.trim().match(/^\$?([A-Za-z]*)\$?(\d*)$/);
230
+ if (!match) {
231
+ return part;
232
+ }
233
+ const [, col, row] = match;
234
+ return `${col ? `$${col.toUpperCase()}` : ''}${row ? `$${row}` : ''}`;
235
+ }).join(':');
236
+ }
237
+
238
+ // convert a defined name range such as 'Sheet'!$A$1:$B$2 or Sheet!$A:$B into a print area
239
+ // (A1:B2, A:B)
240
+ function fromDefinedNameRange(range) {
241
+ const reference = range.match(/^(?:(?:'(?:[^']|'')*'|[^'!]*)!)?(.*)$/)[1];
242
+ if (/^\$?[A-Za-z]+\$?\d+:\$?[A-Za-z]+\$?\d+$/.test(reference)) {
243
+ return colCache.decodeEx(reference).dimensions;
244
+ }
245
+ return reference.replace(/\$/g, '');
246
+ }
222
247
  WorkbookXform.WORKBOOK_ATTRIBUTES = {
223
248
  xmlns: 'http://schemas.openxmlformats.org/spreadsheetml/2006/main',
224
249
  'xmlns:r': 'http://schemas.openxmlformats.org/officeDocument/2006/relationships',
@@ -1 +1 @@
1
- {"version":3,"file":"workbook-xform.js","names":["_","require","colCache","XmlStream","BaseXform","StaticXform","ListXform","DefinedNameXform","SheetXform","WorkbookViewXform","WorkbookPropertiesXform","WorkbookCalcPropertiesXform","WorkbookPivotCacheXform","WorkbookXform","constructor","map","fileVersion","STATIC_XFORMS","workbookPr","bookViews","tag","count","childXform","sheets","definedNames","calcPr","pivotCaches","prepare","model","worksheets","printAreas","index","forEach","sheet","pageSetup","printArea","split","printAreaComponents","definedName","name","ranges","localSheetId","push","printTitlesRow","printTitlesColumn","titlesColumns","titlesRows","length","concat","media","medium","i","type","render","xmlStream","openXml","StdDocAttributes","openNode","WORKBOOK_ATTRIBUTES","properties","views","calcProperties","pivotTables","closeNode","parseOpen","node","parser","parseText","text","parseClose","undefined","reconcile","rels","workbookRels","reduce","rel","Id","worksheet","rId","worksheetHash","Target","replace","id","state","each","range","decodeEx","dimensions","rangeString","join","dollarRegex","rowRangeRegex","rowRangeMatches","match","columnRangeRegex","columnRangeMatches","xmlns","$","appName","lastEdited","lowestEdited","rupBuild","module","exports"],"sources":["../../../../../lib/xlsx/xform/book/workbook-xform.js"],"sourcesContent":["const _ = require('../../../utils/under-dash');\n\nconst colCache = require('../../../utils/col-cache');\nconst XmlStream = require('../../../utils/xml-stream');\n\nconst BaseXform = require('../base-xform');\nconst StaticXform = require('../static-xform');\nconst ListXform = require('../list-xform');\nconst DefinedNameXform = require('./defined-name-xform');\nconst SheetXform = require('./sheet-xform');\nconst WorkbookViewXform = require('./workbook-view-xform');\nconst WorkbookPropertiesXform = require('./workbook-properties-xform');\nconst WorkbookCalcPropertiesXform = require('./workbook-calc-properties-xform');\nconst WorkbookPivotCacheXform = require('./workbook-pivot-cache-xform');\n\nclass WorkbookXform extends BaseXform {\n constructor() {\n super();\n\n this.map = {\n fileVersion: WorkbookXform.STATIC_XFORMS.fileVersion,\n workbookPr: new WorkbookPropertiesXform(),\n bookViews: new ListXform({\n tag: 'bookViews',\n count: false,\n childXform: new WorkbookViewXform(),\n }),\n sheets: new ListXform({tag: 'sheets', count: false, childXform: new SheetXform()}),\n definedNames: new ListXform({\n tag: 'definedNames',\n count: false,\n childXform: new DefinedNameXform(),\n }),\n calcPr: new WorkbookCalcPropertiesXform(),\n pivotCaches: new ListXform({\n tag: 'pivotCaches',\n count: false,\n childXform: new WorkbookPivotCacheXform(),\n }),\n };\n }\n\n prepare(model) {\n model.sheets = model.worksheets;\n\n // collate all the print areas from all of the sheets and add them to the defined names\n const printAreas = [];\n let index = 0; // sheets is sparse array - calc index manually\n model.sheets.forEach(sheet => {\n if (sheet.pageSetup && sheet.pageSetup.printArea) {\n sheet.pageSetup.printArea.split('&&').forEach(printArea => {\n const printAreaComponents = printArea.split(':');\n const definedName = {\n name: '_xlnm.Print_Area',\n ranges: [`'${sheet.name}'!$${printAreaComponents[0]}:$${printAreaComponents[1]}`],\n localSheetId: index,\n };\n printAreas.push(definedName);\n });\n }\n\n if (sheet.pageSetup && (sheet.pageSetup.printTitlesRow || sheet.pageSetup.printTitlesColumn)) {\n const ranges = [];\n\n if (sheet.pageSetup.printTitlesColumn) {\n const titlesColumns = sheet.pageSetup.printTitlesColumn.split(':');\n ranges.push(`'${sheet.name}'!$${titlesColumns[0]}:$${titlesColumns[1]}`);\n }\n\n if (sheet.pageSetup.printTitlesRow) {\n const titlesRows = sheet.pageSetup.printTitlesRow.split(':');\n ranges.push(`'${sheet.name}'!$${titlesRows[0]}:$${titlesRows[1]}`);\n }\n\n const definedName = {\n name: '_xlnm.Print_Titles',\n ranges,\n localSheetId: index,\n };\n\n printAreas.push(definedName);\n }\n index++;\n });\n if (printAreas.length) {\n model.definedNames = model.definedNames.concat(printAreas);\n }\n\n (model.media || []).forEach((medium, i) => {\n // assign name\n medium.name = medium.type + (i + 1);\n });\n }\n\n render(xmlStream, model) {\n xmlStream.openXml(XmlStream.StdDocAttributes);\n xmlStream.openNode('workbook', WorkbookXform.WORKBOOK_ATTRIBUTES);\n\n this.map.fileVersion.render(xmlStream);\n this.map.workbookPr.render(xmlStream, model.properties);\n this.map.bookViews.render(xmlStream, model.views);\n this.map.sheets.render(xmlStream, model.sheets);\n this.map.definedNames.render(xmlStream, model.definedNames);\n this.map.calcPr.render(xmlStream, model.calcProperties);\n this.map.pivotCaches.render(xmlStream, model.pivotTables);\n\n xmlStream.closeNode();\n }\n\n parseOpen(node) {\n if (this.parser) {\n this.parser.parseOpen(node);\n return true;\n }\n switch (node.name) {\n case 'workbook':\n return true;\n default:\n this.parser = this.map[node.name];\n if (this.parser) {\n this.parser.parseOpen(node);\n }\n return true;\n }\n }\n\n parseText(text) {\n if (this.parser) {\n this.parser.parseText(text);\n }\n }\n\n parseClose(name) {\n if (this.parser) {\n if (!this.parser.parseClose(name)) {\n this.parser = undefined;\n }\n return true;\n }\n switch (name) {\n case 'workbook':\n this.model = {\n sheets: this.map.sheets.model,\n properties: this.map.workbookPr.model || {},\n views: this.map.bookViews.model,\n calcProperties: {},\n };\n if (this.map.definedNames.model) {\n this.model.definedNames = this.map.definedNames.model;\n }\n\n return false;\n default:\n // not quite sure how we get here!\n return true;\n }\n }\n\n reconcile(model) {\n const rels = (model.workbookRels || []).reduce((map, rel) => {\n map[rel.Id] = rel;\n return map;\n }, {});\n\n // reconcile sheet ids, rIds and names\n const worksheets = [];\n let worksheet;\n let index = 0;\n\n (model.sheets || []).forEach(sheet => {\n const rel = rels[sheet.rId];\n if (!rel) {\n return;\n }\n // if rel.Target start with `[space]/xl/` or `/xl/` , then it will be replaced with `''` and spliced behind `xl/`,\n // otherwise it will be spliced directly behind `xl/`. i.g.\n worksheet = model.worksheetHash[`xl/${rel.Target.replace(/^(\\s|\\/xl\\/)+/, '')}`];\n // If there are \"chartsheets\" in the file, rel.Target will\n // come out as chartsheets/sheet1.xml or similar here, and\n // that won't be in model.worksheetHash.\n // As we don't have the infrastructure to support chartsheets,\n // we will ignore them for now:\n if (worksheet) {\n worksheet.name = sheet.name;\n worksheet.id = sheet.id;\n worksheet.state = sheet.state;\n worksheets[index++] = worksheet;\n }\n });\n\n // reconcile print areas\n const definedNames = [];\n _.each(model.definedNames, definedName => {\n if (definedName.name === '_xlnm.Print_Area') {\n worksheet = worksheets[definedName.localSheetId];\n if (worksheet) {\n if (!worksheet.pageSetup) {\n worksheet.pageSetup = {};\n }\n const range = colCache.decodeEx(definedName.ranges[0]);\n worksheet.pageSetup.printArea = worksheet.pageSetup.printArea\n ? `${worksheet.pageSetup.printArea}&&${range.dimensions}`\n : range.dimensions;\n }\n } else if (definedName.name === '_xlnm.Print_Titles') {\n worksheet = worksheets[definedName.localSheetId];\n if (worksheet) {\n if (!worksheet.pageSetup) {\n worksheet.pageSetup = {};\n }\n\n const rangeString = definedName.ranges.join(',');\n\n const dollarRegex = /\\$/g;\n\n const rowRangeRegex = /\\$\\d+:\\$\\d+/;\n const rowRangeMatches = rangeString.match(rowRangeRegex);\n\n if (rowRangeMatches && rowRangeMatches.length) {\n const range = rowRangeMatches[0];\n worksheet.pageSetup.printTitlesRow = range.replace(dollarRegex, '');\n }\n\n const columnRangeRegex = /\\$[A-Z]+:\\$[A-Z]+/;\n const columnRangeMatches = rangeString.match(columnRangeRegex);\n\n if (columnRangeMatches && columnRangeMatches.length) {\n const range = columnRangeMatches[0];\n worksheet.pageSetup.printTitlesColumn = range.replace(dollarRegex, '');\n }\n }\n } else {\n definedNames.push(definedName);\n }\n });\n model.definedNames = definedNames;\n\n // used by sheets to build their image models\n model.media.forEach((media, i) => {\n media.index = i;\n });\n }\n}\n\nWorkbookXform.WORKBOOK_ATTRIBUTES = {\n 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': 'x15',\n 'xmlns:x15': 'http://schemas.microsoft.com/office/spreadsheetml/2010/11/main',\n};\nWorkbookXform.STATIC_XFORMS = {\n fileVersion: new StaticXform({\n tag: 'fileVersion',\n $: {appName: 'xl', lastEdited: 5, lowestEdited: 5, rupBuild: 9303},\n }),\n};\n\nmodule.exports = WorkbookXform;\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"workbook-xform.js","names":["_","require","colCache","XmlStream","BaseXform","StaticXform","ListXform","DefinedNameXform","SheetXform","WorkbookViewXform","WorkbookPropertiesXform","WorkbookCalcPropertiesXform","WorkbookPivotCacheXform","WorkbookXform","constructor","map","fileVersion","STATIC_XFORMS","workbookPr","bookViews","tag","count","childXform","sheets","definedNames","calcPr","pivotCaches","prepare","model","worksheets","printAreas","index","forEach","sheet","pageSetup","printArea","ranges","split","filter","name","toAbsoluteRange","length","push","localSheetId","printTitlesRow","printTitlesColumn","titlesColumns","titlesRows","definedName","concat","media","medium","i","type","render","xmlStream","openXml","StdDocAttributes","openNode","WORKBOOK_ATTRIBUTES","properties","views","calcProperties","pivotTables","closeNode","parseOpen","node","parser","parseText","text","parseClose","undefined","reconcile","rels","workbookRels","reduce","rel","Id","worksheet","rId","worksheetHash","Target","replace","id","state","each","fromDefinedNameRange","join","rangeString","dollarRegex","rowRangeRegex","rowRangeMatches","match","range","columnRangeRegex","columnRangeMatches","part","trim","col","row","toUpperCase","reference","test","decodeEx","dimensions","xmlns","$","appName","lastEdited","lowestEdited","rupBuild","module","exports"],"sources":["../../../../../lib/xlsx/xform/book/workbook-xform.js"],"sourcesContent":["const _ = require('../../../utils/under-dash');\n\nconst colCache = require('../../../utils/col-cache');\nconst XmlStream = require('../../../utils/xml-stream');\n\nconst BaseXform = require('../base-xform');\nconst StaticXform = require('../static-xform');\nconst ListXform = require('../list-xform');\nconst DefinedNameXform = require('./defined-name-xform');\nconst SheetXform = require('./sheet-xform');\nconst WorkbookViewXform = require('./workbook-view-xform');\nconst WorkbookPropertiesXform = require('./workbook-properties-xform');\nconst WorkbookCalcPropertiesXform = require('./workbook-calc-properties-xform');\nconst WorkbookPivotCacheXform = require('./workbook-pivot-cache-xform');\n\nclass WorkbookXform extends BaseXform {\n constructor() {\n super();\n\n this.map = {\n fileVersion: WorkbookXform.STATIC_XFORMS.fileVersion,\n workbookPr: new WorkbookPropertiesXform(),\n bookViews: new ListXform({\n tag: 'bookViews',\n count: false,\n childXform: new WorkbookViewXform(),\n }),\n sheets: new ListXform({tag: 'sheets', count: false, childXform: new SheetXform()}),\n definedNames: new ListXform({\n tag: 'definedNames',\n count: false,\n childXform: new DefinedNameXform(),\n }),\n calcPr: new WorkbookCalcPropertiesXform(),\n pivotCaches: new ListXform({\n tag: 'pivotCaches',\n count: false,\n childXform: new WorkbookPivotCacheXform(),\n }),\n };\n }\n\n prepare(model) {\n model.sheets = model.worksheets;\n\n // collate all the print areas from all of the sheets and add them to the defined names\n const printAreas = [];\n let index = 0; // sheets is sparse array - calc index manually\n model.sheets.forEach(sheet => {\n if (sheet.pageSetup && sheet.pageSetup.printArea) {\n // Excel allows only one Print_Area per sheet; multiple areas are comma separated ranges\n const ranges = sheet.pageSetup.printArea\n .split('&&')\n .filter(printArea => printArea)\n .map(printArea => `'${sheet.name}'!${toAbsoluteRange(printArea)}`);\n if (ranges.length) {\n printAreas.push({\n name: '_xlnm.Print_Area',\n ranges,\n localSheetId: index,\n });\n }\n }\n\n if (sheet.pageSetup && (sheet.pageSetup.printTitlesRow || sheet.pageSetup.printTitlesColumn)) {\n const ranges = [];\n\n if (sheet.pageSetup.printTitlesColumn) {\n const titlesColumns = sheet.pageSetup.printTitlesColumn.split(':');\n ranges.push(`'${sheet.name}'!$${titlesColumns[0]}:$${titlesColumns[1]}`);\n }\n\n if (sheet.pageSetup.printTitlesRow) {\n const titlesRows = sheet.pageSetup.printTitlesRow.split(':');\n ranges.push(`'${sheet.name}'!$${titlesRows[0]}:$${titlesRows[1]}`);\n }\n\n const definedName = {\n name: '_xlnm.Print_Titles',\n ranges,\n localSheetId: index,\n };\n\n printAreas.push(definedName);\n }\n index++;\n });\n if (printAreas.length) {\n model.definedNames = model.definedNames.concat(printAreas);\n }\n\n (model.media || []).forEach((medium, i) => {\n // assign name\n medium.name = medium.type + (i + 1);\n });\n }\n\n render(xmlStream, model) {\n xmlStream.openXml(XmlStream.StdDocAttributes);\n xmlStream.openNode('workbook', WorkbookXform.WORKBOOK_ATTRIBUTES);\n\n this.map.fileVersion.render(xmlStream);\n this.map.workbookPr.render(xmlStream, model.properties);\n this.map.bookViews.render(xmlStream, model.views);\n this.map.sheets.render(xmlStream, model.sheets);\n this.map.definedNames.render(xmlStream, model.definedNames);\n this.map.calcPr.render(xmlStream, model.calcProperties);\n this.map.pivotCaches.render(xmlStream, model.pivotTables);\n\n xmlStream.closeNode();\n }\n\n parseOpen(node) {\n if (this.parser) {\n this.parser.parseOpen(node);\n return true;\n }\n switch (node.name) {\n case 'workbook':\n return true;\n default:\n this.parser = this.map[node.name];\n if (this.parser) {\n this.parser.parseOpen(node);\n }\n return true;\n }\n }\n\n parseText(text) {\n if (this.parser) {\n this.parser.parseText(text);\n }\n }\n\n parseClose(name) {\n if (this.parser) {\n if (!this.parser.parseClose(name)) {\n this.parser = undefined;\n }\n return true;\n }\n switch (name) {\n case 'workbook':\n this.model = {\n sheets: this.map.sheets.model,\n properties: this.map.workbookPr.model || {},\n views: this.map.bookViews.model,\n calcProperties: {},\n };\n if (this.map.definedNames.model) {\n this.model.definedNames = this.map.definedNames.model;\n }\n\n return false;\n default:\n // not quite sure how we get here!\n return true;\n }\n }\n\n reconcile(model) {\n const rels = (model.workbookRels || []).reduce((map, rel) => {\n map[rel.Id] = rel;\n return map;\n }, {});\n\n // reconcile sheet ids, rIds and names\n const worksheets = [];\n let worksheet;\n let index = 0;\n\n (model.sheets || []).forEach(sheet => {\n const rel = rels[sheet.rId];\n if (!rel) {\n return;\n }\n // if rel.Target start with `[space]/xl/` or `/xl/` , then it will be replaced with `''` and spliced behind `xl/`,\n // otherwise it will be spliced directly behind `xl/`. i.g.\n worksheet = model.worksheetHash[`xl/${rel.Target.replace(/^(\\s|\\/xl\\/)+/, '')}`];\n // If there are \"chartsheets\" in the file, rel.Target will\n // come out as chartsheets/sheet1.xml or similar here, and\n // that won't be in model.worksheetHash.\n // As we don't have the infrastructure to support chartsheets,\n // we will ignore them for now:\n if (worksheet) {\n worksheet.name = sheet.name;\n worksheet.id = sheet.id;\n worksheet.state = sheet.state;\n worksheets[index++] = worksheet;\n }\n });\n\n // reconcile print areas\n const definedNames = [];\n _.each(model.definedNames, definedName => {\n if (definedName.name === '_xlnm.Print_Area') {\n worksheet = worksheets[definedName.localSheetId];\n if (worksheet) {\n if (!worksheet.pageSetup) {\n worksheet.pageSetup = {};\n }\n const printArea = definedName.ranges.map(fromDefinedNameRange).join('&&');\n if (printArea) {\n worksheet.pageSetup.printArea = worksheet.pageSetup.printArea\n ? `${worksheet.pageSetup.printArea}&&${printArea}`\n : printArea;\n }\n }\n } else if (definedName.name === '_xlnm.Print_Titles') {\n worksheet = worksheets[definedName.localSheetId];\n if (worksheet) {\n if (!worksheet.pageSetup) {\n worksheet.pageSetup = {};\n }\n\n const rangeString = definedName.ranges.join(',');\n\n const dollarRegex = /\\$/g;\n\n const rowRangeRegex = /\\$\\d+:\\$\\d+/;\n const rowRangeMatches = rangeString.match(rowRangeRegex);\n\n if (rowRangeMatches && rowRangeMatches.length) {\n const range = rowRangeMatches[0];\n worksheet.pageSetup.printTitlesRow = range.replace(dollarRegex, '');\n }\n\n const columnRangeRegex = /\\$[A-Z]+:\\$[A-Z]+/;\n const columnRangeMatches = rangeString.match(columnRangeRegex);\n\n if (columnRangeMatches && columnRangeMatches.length) {\n const range = columnRangeMatches[0];\n worksheet.pageSetup.printTitlesColumn = range.replace(dollarRegex, '');\n }\n }\n } else {\n definedNames.push(definedName);\n }\n });\n model.definedNames = definedNames;\n\n // used by sheets to build their image models\n model.media.forEach((media, i) => {\n media.index = i;\n });\n }\n}\n\n// convert a print area such as A1:B2, A:B, 1:3 or C3 into an absolute reference\n// ($A$1:$B$2, $A:$B, $1:$3, $C$3)\nfunction toAbsoluteRange(range) {\n return range\n .split(':')\n .map(part => {\n const match = part.trim().match(/^\\$?([A-Za-z]*)\\$?(\\d*)$/);\n if (!match) {\n return part;\n }\n const [, col, row] = match;\n return `${col ? `$${col.toUpperCase()}` : ''}${row ? `$${row}` : ''}`;\n })\n .join(':');\n}\n\n// convert a defined name range such as 'Sheet'!$A$1:$B$2 or Sheet!$A:$B into a print area\n// (A1:B2, A:B)\nfunction fromDefinedNameRange(range) {\n const reference = range.match(/^(?:(?:'(?:[^']|'')*'|[^'!]*)!)?(.*)$/)[1];\n if (/^\\$?[A-Za-z]+\\$?\\d+:\\$?[A-Za-z]+\\$?\\d+$/.test(reference)) {\n return colCache.decodeEx(reference).dimensions;\n }\n return reference.replace(/\\$/g, '');\n}\n\nWorkbookXform.WORKBOOK_ATTRIBUTES = {\n 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': 'x15',\n 'xmlns:x15': 'http://schemas.microsoft.com/office/spreadsheetml/2010/11/main',\n};\nWorkbookXform.STATIC_XFORMS = {\n fileVersion: new StaticXform({\n tag: 'fileVersion',\n $: {appName: 'xl', lastEdited: 5, lowestEdited: 5, rupBuild: 9303},\n }),\n};\n\nmodule.exports = WorkbookXform;\n"],"mappings":"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","ignoreList":[]}
@@ -112,6 +112,10 @@ class CfRuleXform extends CompositeXform {
112
112
  return false;
113
113
  }
114
114
  }
115
+ if (rule.type === 'expression' && rule.x14Id) {
116
+ // read from x14:cfRule, rendered by CfRuleExtXform
117
+ return false;
118
+ }
115
119
  return true;
116
120
  }
117
121
  render(xmlStream, model) {
@@ -1 +1 @@
1
- {"version":3,"file":"cf-rule-xform.js","names":["BaseXform","require","CompositeXform","Range","DatabarXform","ExtLstRefXform","FormulaXform","ColorScaleXform","IconSetXform","extIcons","getTextFormula","model","formulae","range","ref","tl","operator","text","undefined","getTimePeriodFormula","timePeriod","opType","attributes","type","CfRuleXform","constructor","map","dataBar","databarXform","extLst","extLstRefXform","formula","formulaXform","colorScale","colorScaleXform","iconSet","iconSetXform","tag","isPrimitive","rule","custom","render","xmlStream","renderExpression","renderCellIs","renderTop10","renderAboveAverage","renderDataBar","renderColorScale","renderIconSet","renderText","renderTimePeriod","openNode","dxfId","priority","stopIfTrue","toBoolAttribute","closeNode","forEach","leafNode","percent","bottom","rank","toIntValue","aboveAverage","toStringAttribute","createNewModel","toBoolValue","onParserClose","name","parser","Object","assign","push","module","exports"],"sources":["../../../../../../lib/xlsx/xform/sheet/cf/cf-rule-xform.js"],"sourcesContent":["const BaseXform = require('../../base-xform');\nconst CompositeXform = require('../../composite-xform');\n\nconst Range = require('../../../../doc/range');\n\nconst DatabarXform = require('./databar-xform');\nconst ExtLstRefXform = require('./ext-lst-ref-xform');\nconst FormulaXform = require('./formula-xform');\nconst ColorScaleXform = require('./color-scale-xform');\nconst IconSetXform = require('./icon-set-xform');\n\nconst extIcons = {\n '3Triangles': true,\n '3Stars': true,\n '5Boxes': true,\n};\n\nconst getTextFormula = model => {\n if (model.formulae && model.formulae[0]) {\n return model.formulae[0];\n }\n\n const range = new Range(model.ref);\n const {tl} = range;\n switch (model.operator) {\n case 'containsText':\n return `NOT(ISERROR(SEARCH(\"${model.text}\",${tl})))`;\n case 'containsBlanks':\n return `LEN(TRIM(${tl}))=0`;\n case 'notContainsBlanks':\n return `LEN(TRIM(${tl}))>0`;\n case 'containsErrors':\n return `ISERROR(${tl})`;\n case 'notContainsErrors':\n return `NOT(ISERROR(${tl}))`;\n default:\n return undefined;\n }\n};\n\nconst getTimePeriodFormula = model => {\n if (model.formulae && model.formulae[0]) {\n return model.formulae[0];\n }\n\n const range = new Range(model.ref);\n const {tl} = range;\n switch (model.timePeriod) {\n case 'thisWeek':\n return `AND(TODAY()-ROUNDDOWN(${tl},0)<=WEEKDAY(TODAY())-1,ROUNDDOWN(${tl},0)-TODAY()<=7-WEEKDAY(TODAY()))`;\n case 'lastWeek':\n return `AND(TODAY()-ROUNDDOWN(${tl},0)>=(WEEKDAY(TODAY())),TODAY()-ROUNDDOWN(${tl},0)<(WEEKDAY(TODAY())+7))`;\n case 'nextWeek':\n return `AND(ROUNDDOWN(${tl},0)-TODAY()>(7-WEEKDAY(TODAY())),ROUNDDOWN(${tl},0)-TODAY()<(15-WEEKDAY(TODAY())))`;\n case 'yesterday':\n return `FLOOR(${tl},1)=TODAY()-1`;\n case 'today':\n return `FLOOR(${tl},1)=TODAY()`;\n case 'tomorrow':\n return `FLOOR(${tl},1)=TODAY()+1`;\n case 'last7Days':\n return `AND(TODAY()-FLOOR(${tl},1)<=6,FLOOR(${tl},1)<=TODAY())`;\n case 'lastMonth':\n return `AND(MONTH(${tl})=MONTH(EDATE(TODAY(),0-1)),YEAR(${tl})=YEAR(EDATE(TODAY(),0-1)))`;\n case 'thisMonth':\n return `AND(MONTH(${tl})=MONTH(TODAY()),YEAR(${tl})=YEAR(TODAY()))`;\n case 'nextMonth':\n return `AND(MONTH(${tl})=MONTH(EDATE(TODAY(),0+1)),YEAR(${tl})=YEAR(EDATE(TODAY(),0+1)))`;\n default:\n return undefined;\n }\n};\n\nconst opType = attributes => {\n const {type, operator} = attributes;\n switch (type) {\n case 'containsText':\n case 'containsBlanks':\n case 'notContainsBlanks':\n case 'containsErrors':\n case 'notContainsErrors':\n return {\n type: 'containsText',\n operator: type,\n };\n\n default:\n return {type, operator};\n }\n};\n\nclass CfRuleXform extends CompositeXform {\n constructor() {\n super();\n\n this.map = {\n dataBar: (this.databarXform = new DatabarXform()),\n extLst: (this.extLstRefXform = new ExtLstRefXform()),\n formula: (this.formulaXform = new FormulaXform()),\n colorScale: (this.colorScaleXform = new ColorScaleXform()),\n iconSet: (this.iconSetXform = new IconSetXform()),\n };\n }\n\n get tag() {\n return 'cfRule';\n }\n\n static isPrimitive(rule) {\n // is this rule primitive?\n if (rule.type === 'iconSet') {\n if (rule.custom || extIcons[rule.iconSet]) {\n return false;\n }\n }\n return true;\n }\n\n render(xmlStream, model) {\n switch (model.type) {\n case 'expression':\n this.renderExpression(xmlStream, model);\n break;\n case 'cellIs':\n this.renderCellIs(xmlStream, model);\n break;\n case 'top10':\n this.renderTop10(xmlStream, model);\n break;\n case 'aboveAverage':\n this.renderAboveAverage(xmlStream, model);\n break;\n case 'dataBar':\n this.renderDataBar(xmlStream, model);\n break;\n case 'colorScale':\n this.renderColorScale(xmlStream, model);\n break;\n case 'iconSet':\n this.renderIconSet(xmlStream, model);\n break;\n case 'containsText':\n this.renderText(xmlStream, model);\n break;\n case 'timePeriod':\n this.renderTimePeriod(xmlStream, model);\n break;\n }\n }\n\n renderExpression(xmlStream, model) {\n xmlStream.openNode(this.tag, {\n type: 'expression',\n dxfId: model.dxfId,\n priority: model.priority,\n stopIfTrue: BaseXform.toBoolAttribute(model.stopIfTrue, false),\n });\n\n this.formulaXform.render(xmlStream, model.formulae[0]);\n\n xmlStream.closeNode();\n }\n\n renderCellIs(xmlStream, model) {\n xmlStream.openNode(this.tag, {\n type: 'cellIs',\n dxfId: model.dxfId,\n priority: model.priority,\n operator: model.operator,\n stopIfTrue: BaseXform.toBoolAttribute(model.stopIfTrue, false),\n });\n\n model.formulae.forEach(formula => {\n this.formulaXform.render(xmlStream, formula);\n });\n\n xmlStream.closeNode();\n }\n\n renderTop10(xmlStream, model) {\n xmlStream.leafNode(this.tag, {\n type: 'top10',\n dxfId: model.dxfId,\n priority: model.priority,\n percent: BaseXform.toBoolAttribute(model.percent, false),\n bottom: BaseXform.toBoolAttribute(model.bottom, false),\n rank: BaseXform.toIntValue(model.rank, 10, true),\n stopIfTrue: BaseXform.toBoolAttribute(model.stopIfTrue, false),\n });\n }\n\n renderAboveAverage(xmlStream, model) {\n xmlStream.leafNode(this.tag, {\n type: 'aboveAverage',\n dxfId: model.dxfId,\n priority: model.priority,\n aboveAverage: BaseXform.toBoolAttribute(model.aboveAverage, true),\n stopIfTrue: BaseXform.toBoolAttribute(model.stopIfTrue, false),\n });\n }\n\n renderDataBar(xmlStream, model) {\n xmlStream.openNode(this.tag, {\n type: 'dataBar',\n priority: model.priority,\n });\n\n this.databarXform.render(xmlStream, model);\n this.extLstRefXform.render(xmlStream, model);\n\n xmlStream.closeNode();\n }\n\n renderColorScale(xmlStream, model) {\n xmlStream.openNode(this.tag, {\n type: 'colorScale',\n priority: model.priority,\n });\n\n this.colorScaleXform.render(xmlStream, model);\n\n xmlStream.closeNode();\n }\n\n renderIconSet(xmlStream, model) {\n // iconset is all primitive or all extLst\n if (!CfRuleXform.isPrimitive(model)) {\n return;\n }\n\n xmlStream.openNode(this.tag, {\n type: 'iconSet',\n priority: model.priority,\n });\n\n this.iconSetXform.render(xmlStream, model);\n\n xmlStream.closeNode();\n }\n\n renderText(xmlStream, model) {\n xmlStream.openNode(this.tag, {\n type: model.operator,\n dxfId: model.dxfId,\n priority: model.priority,\n operator: BaseXform.toStringAttribute(model.operator, 'containsText'),\n stopIfTrue: BaseXform.toBoolAttribute(model.stopIfTrue, false),\n });\n\n const formula = getTextFormula(model);\n if (formula) {\n this.formulaXform.render(xmlStream, formula);\n }\n\n xmlStream.closeNode();\n }\n\n renderTimePeriod(xmlStream, model) {\n xmlStream.openNode(this.tag, {\n type: 'timePeriod',\n dxfId: model.dxfId,\n priority: model.priority,\n timePeriod: model.timePeriod,\n stopIfTrue: BaseXform.toBoolAttribute(model.stopIfTrue, false),\n });\n\n const formula = getTimePeriodFormula(model);\n if (formula) {\n this.formulaXform.render(xmlStream, formula);\n }\n\n xmlStream.closeNode();\n }\n\n createNewModel({attributes}) {\n return {\n ...opType(attributes),\n dxfId: BaseXform.toIntValue(attributes.dxfId),\n priority: BaseXform.toIntValue(attributes.priority),\n timePeriod: attributes.timePeriod,\n percent: BaseXform.toBoolValue(attributes.percent),\n bottom: BaseXform.toBoolValue(attributes.bottom),\n rank: BaseXform.toIntValue(attributes.rank),\n aboveAverage: BaseXform.toBoolValue(attributes.aboveAverage),\n stopIfTrue: BaseXform.toBoolValue(attributes.stopIfTrue),\n };\n }\n\n onParserClose(name, parser) {\n switch (name) {\n case 'dataBar':\n case 'extLst':\n case 'colorScale':\n case 'iconSet':\n // merge parser model with ours\n Object.assign(this.model, parser.model);\n break;\n\n case 'formula':\n // except - formula is a string and appends to formulae\n this.model.formulae = this.model.formulae || [];\n this.model.formulae.push(parser.model);\n break;\n }\n }\n}\n\nmodule.exports = CfRuleXform;\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"cf-rule-xform.js","names":["BaseXform","require","CompositeXform","Range","DatabarXform","ExtLstRefXform","FormulaXform","ColorScaleXform","IconSetXform","extIcons","getTextFormula","model","formulae","range","ref","tl","operator","text","undefined","getTimePeriodFormula","timePeriod","opType","attributes","type","CfRuleXform","constructor","map","dataBar","databarXform","extLst","extLstRefXform","formula","formulaXform","colorScale","colorScaleXform","iconSet","iconSetXform","tag","isPrimitive","rule","custom","x14Id","render","xmlStream","renderExpression","renderCellIs","renderTop10","renderAboveAverage","renderDataBar","renderColorScale","renderIconSet","renderText","renderTimePeriod","openNode","dxfId","priority","stopIfTrue","toBoolAttribute","closeNode","forEach","leafNode","percent","bottom","rank","toIntValue","aboveAverage","toStringAttribute","createNewModel","toBoolValue","onParserClose","name","parser","Object","assign","push","module","exports"],"sources":["../../../../../../lib/xlsx/xform/sheet/cf/cf-rule-xform.js"],"sourcesContent":["const BaseXform = require('../../base-xform');\nconst CompositeXform = require('../../composite-xform');\n\nconst Range = require('../../../../doc/range');\n\nconst DatabarXform = require('./databar-xform');\nconst ExtLstRefXform = require('./ext-lst-ref-xform');\nconst FormulaXform = require('./formula-xform');\nconst ColorScaleXform = require('./color-scale-xform');\nconst IconSetXform = require('./icon-set-xform');\n\nconst extIcons = {\n '3Triangles': true,\n '3Stars': true,\n '5Boxes': true,\n};\n\nconst getTextFormula = model => {\n if (model.formulae && model.formulae[0]) {\n return model.formulae[0];\n }\n\n const range = new Range(model.ref);\n const {tl} = range;\n switch (model.operator) {\n case 'containsText':\n return `NOT(ISERROR(SEARCH(\"${model.text}\",${tl})))`;\n case 'containsBlanks':\n return `LEN(TRIM(${tl}))=0`;\n case 'notContainsBlanks':\n return `LEN(TRIM(${tl}))>0`;\n case 'containsErrors':\n return `ISERROR(${tl})`;\n case 'notContainsErrors':\n return `NOT(ISERROR(${tl}))`;\n default:\n return undefined;\n }\n};\n\nconst getTimePeriodFormula = model => {\n if (model.formulae && model.formulae[0]) {\n return model.formulae[0];\n }\n\n const range = new Range(model.ref);\n const {tl} = range;\n switch (model.timePeriod) {\n case 'thisWeek':\n return `AND(TODAY()-ROUNDDOWN(${tl},0)<=WEEKDAY(TODAY())-1,ROUNDDOWN(${tl},0)-TODAY()<=7-WEEKDAY(TODAY()))`;\n case 'lastWeek':\n return `AND(TODAY()-ROUNDDOWN(${tl},0)>=(WEEKDAY(TODAY())),TODAY()-ROUNDDOWN(${tl},0)<(WEEKDAY(TODAY())+7))`;\n case 'nextWeek':\n return `AND(ROUNDDOWN(${tl},0)-TODAY()>(7-WEEKDAY(TODAY())),ROUNDDOWN(${tl},0)-TODAY()<(15-WEEKDAY(TODAY())))`;\n case 'yesterday':\n return `FLOOR(${tl},1)=TODAY()-1`;\n case 'today':\n return `FLOOR(${tl},1)=TODAY()`;\n case 'tomorrow':\n return `FLOOR(${tl},1)=TODAY()+1`;\n case 'last7Days':\n return `AND(TODAY()-FLOOR(${tl},1)<=6,FLOOR(${tl},1)<=TODAY())`;\n case 'lastMonth':\n return `AND(MONTH(${tl})=MONTH(EDATE(TODAY(),0-1)),YEAR(${tl})=YEAR(EDATE(TODAY(),0-1)))`;\n case 'thisMonth':\n return `AND(MONTH(${tl})=MONTH(TODAY()),YEAR(${tl})=YEAR(TODAY()))`;\n case 'nextMonth':\n return `AND(MONTH(${tl})=MONTH(EDATE(TODAY(),0+1)),YEAR(${tl})=YEAR(EDATE(TODAY(),0+1)))`;\n default:\n return undefined;\n }\n};\n\nconst opType = attributes => {\n const {type, operator} = attributes;\n switch (type) {\n case 'containsText':\n case 'containsBlanks':\n case 'notContainsBlanks':\n case 'containsErrors':\n case 'notContainsErrors':\n return {\n type: 'containsText',\n operator: type,\n };\n\n default:\n return {type, operator};\n }\n};\n\nclass CfRuleXform extends CompositeXform {\n constructor() {\n super();\n\n this.map = {\n dataBar: (this.databarXform = new DatabarXform()),\n extLst: (this.extLstRefXform = new ExtLstRefXform()),\n formula: (this.formulaXform = new FormulaXform()),\n colorScale: (this.colorScaleXform = new ColorScaleXform()),\n iconSet: (this.iconSetXform = new IconSetXform()),\n };\n }\n\n get tag() {\n return 'cfRule';\n }\n\n static isPrimitive(rule) {\n // is this rule primitive?\n if (rule.type === 'iconSet') {\n if (rule.custom || extIcons[rule.iconSet]) {\n return false;\n }\n }\n if (rule.type === 'expression' && rule.x14Id) {\n // read from x14:cfRule, rendered by CfRuleExtXform\n return false;\n }\n return true;\n }\n\n render(xmlStream, model) {\n switch (model.type) {\n case 'expression':\n this.renderExpression(xmlStream, model);\n break;\n case 'cellIs':\n this.renderCellIs(xmlStream, model);\n break;\n case 'top10':\n this.renderTop10(xmlStream, model);\n break;\n case 'aboveAverage':\n this.renderAboveAverage(xmlStream, model);\n break;\n case 'dataBar':\n this.renderDataBar(xmlStream, model);\n break;\n case 'colorScale':\n this.renderColorScale(xmlStream, model);\n break;\n case 'iconSet':\n this.renderIconSet(xmlStream, model);\n break;\n case 'containsText':\n this.renderText(xmlStream, model);\n break;\n case 'timePeriod':\n this.renderTimePeriod(xmlStream, model);\n break;\n }\n }\n\n renderExpression(xmlStream, model) {\n xmlStream.openNode(this.tag, {\n type: 'expression',\n dxfId: model.dxfId,\n priority: model.priority,\n stopIfTrue: BaseXform.toBoolAttribute(model.stopIfTrue, false),\n });\n\n this.formulaXform.render(xmlStream, model.formulae[0]);\n\n xmlStream.closeNode();\n }\n\n renderCellIs(xmlStream, model) {\n xmlStream.openNode(this.tag, {\n type: 'cellIs',\n dxfId: model.dxfId,\n priority: model.priority,\n operator: model.operator,\n stopIfTrue: BaseXform.toBoolAttribute(model.stopIfTrue, false),\n });\n\n model.formulae.forEach(formula => {\n this.formulaXform.render(xmlStream, formula);\n });\n\n xmlStream.closeNode();\n }\n\n renderTop10(xmlStream, model) {\n xmlStream.leafNode(this.tag, {\n type: 'top10',\n dxfId: model.dxfId,\n priority: model.priority,\n percent: BaseXform.toBoolAttribute(model.percent, false),\n bottom: BaseXform.toBoolAttribute(model.bottom, false),\n rank: BaseXform.toIntValue(model.rank, 10, true),\n stopIfTrue: BaseXform.toBoolAttribute(model.stopIfTrue, false),\n });\n }\n\n renderAboveAverage(xmlStream, model) {\n xmlStream.leafNode(this.tag, {\n type: 'aboveAverage',\n dxfId: model.dxfId,\n priority: model.priority,\n aboveAverage: BaseXform.toBoolAttribute(model.aboveAverage, true),\n stopIfTrue: BaseXform.toBoolAttribute(model.stopIfTrue, false),\n });\n }\n\n renderDataBar(xmlStream, model) {\n xmlStream.openNode(this.tag, {\n type: 'dataBar',\n priority: model.priority,\n });\n\n this.databarXform.render(xmlStream, model);\n this.extLstRefXform.render(xmlStream, model);\n\n xmlStream.closeNode();\n }\n\n renderColorScale(xmlStream, model) {\n xmlStream.openNode(this.tag, {\n type: 'colorScale',\n priority: model.priority,\n });\n\n this.colorScaleXform.render(xmlStream, model);\n\n xmlStream.closeNode();\n }\n\n renderIconSet(xmlStream, model) {\n // iconset is all primitive or all extLst\n if (!CfRuleXform.isPrimitive(model)) {\n return;\n }\n\n xmlStream.openNode(this.tag, {\n type: 'iconSet',\n priority: model.priority,\n });\n\n this.iconSetXform.render(xmlStream, model);\n\n xmlStream.closeNode();\n }\n\n renderText(xmlStream, model) {\n xmlStream.openNode(this.tag, {\n type: model.operator,\n dxfId: model.dxfId,\n priority: model.priority,\n operator: BaseXform.toStringAttribute(model.operator, 'containsText'),\n stopIfTrue: BaseXform.toBoolAttribute(model.stopIfTrue, false),\n });\n\n const formula = getTextFormula(model);\n if (formula) {\n this.formulaXform.render(xmlStream, formula);\n }\n\n xmlStream.closeNode();\n }\n\n renderTimePeriod(xmlStream, model) {\n xmlStream.openNode(this.tag, {\n type: 'timePeriod',\n dxfId: model.dxfId,\n priority: model.priority,\n timePeriod: model.timePeriod,\n stopIfTrue: BaseXform.toBoolAttribute(model.stopIfTrue, false),\n });\n\n const formula = getTimePeriodFormula(model);\n if (formula) {\n this.formulaXform.render(xmlStream, formula);\n }\n\n xmlStream.closeNode();\n }\n\n createNewModel({attributes}) {\n return {\n ...opType(attributes),\n dxfId: BaseXform.toIntValue(attributes.dxfId),\n priority: BaseXform.toIntValue(attributes.priority),\n timePeriod: attributes.timePeriod,\n percent: BaseXform.toBoolValue(attributes.percent),\n bottom: BaseXform.toBoolValue(attributes.bottom),\n rank: BaseXform.toIntValue(attributes.rank),\n aboveAverage: BaseXform.toBoolValue(attributes.aboveAverage),\n stopIfTrue: BaseXform.toBoolValue(attributes.stopIfTrue),\n };\n }\n\n onParserClose(name, parser) {\n switch (name) {\n case 'dataBar':\n case 'extLst':\n case 'colorScale':\n case 'iconSet':\n // merge parser model with ours\n Object.assign(this.model, parser.model);\n break;\n\n case 'formula':\n // except - formula is a string and appends to formulae\n this.model.formulae = this.model.formulae || [];\n this.model.formulae.push(parser.model);\n break;\n }\n }\n}\n\nmodule.exports = CfRuleXform;\n"],"mappings":";;AAAA,MAAMA,SAAS,GAAGC,OAAO,CAAC,kBAAkB,CAAC;AAC7C,MAAMC,cAAc,GAAGD,OAAO,CAAC,uBAAuB,CAAC;AAEvD,MAAME,KAAK,GAAGF,OAAO,CAAC,uBAAuB,CAAC;AAE9C,MAAMG,YAAY,GAAGH,OAAO,CAAC,iBAAiB,CAAC;AAC/C,MAAMI,cAAc,GAAGJ,OAAO,CAAC,qBAAqB,CAAC;AACrD,MAAMK,YAAY,GAAGL,OAAO,CAAC,iBAAiB,CAAC;AAC/C,MAAMM,eAAe,GAAGN,OAAO,CAAC,qBAAqB,CAAC;AACtD,MAAMO,YAAY,GAAGP,OAAO,CAAC,kBAAkB,CAAC;AAEhD,MAAMQ,QAAQ,GAAG;EACf,YAAY,EAAE,IAAI;EAClB,QAAQ,EAAE,IAAI;EACd,QAAQ,EAAE;AACZ,CAAC;AAED,MAAMC,cAAc,GAAGC,KAAK,IAAI;EAC9B,IAAIA,KAAK,CAACC,QAAQ,IAAID,KAAK,CAACC,QAAQ,CAAC,CAAC,CAAC,EAAE;IACvC,OAAOD,KAAK,CAACC,QAAQ,CAAC,CAAC,CAAC;EAC1B;EAEA,MAAMC,KAAK,GAAG,IAAIV,KAAK,CAACQ,KAAK,CAACG,GAAG,CAAC;EAClC,MAAM;IAACC;EAAE,CAAC,GAAGF,KAAK;EAClB,QAAQF,KAAK,CAACK,QAAQ;IACpB,KAAK,cAAc;MACjB,OAAO,uBAAuBL,KAAK,CAACM,IAAI,KAAKF,EAAE,KAAK;IACtD,KAAK,gBAAgB;MACnB,OAAO,YAAYA,EAAE,MAAM;IAC7B,KAAK,mBAAmB;MACtB,OAAO,YAAYA,EAAE,MAAM;IAC7B,KAAK,gBAAgB;MACnB,OAAO,WAAWA,EAAE,GAAG;IACzB,KAAK,mBAAmB;MACtB,OAAO,eAAeA,EAAE,IAAI;IAC9B;MACE,OAAOG,SAAS;EACpB;AACF,CAAC;AAED,MAAMC,oBAAoB,GAAGR,KAAK,IAAI;EACpC,IAAIA,KAAK,CAACC,QAAQ,IAAID,KAAK,CAACC,QAAQ,CAAC,CAAC,CAAC,EAAE;IACvC,OAAOD,KAAK,CAACC,QAAQ,CAAC,CAAC,CAAC;EAC1B;EAEA,MAAMC,KAAK,GAAG,IAAIV,KAAK,CAACQ,KAAK,CAACG,GAAG,CAAC;EAClC,MAAM;IAACC;EAAE,CAAC,GAAGF,KAAK;EAClB,QAAQF,KAAK,CAACS,UAAU;IACtB,KAAK,UAAU;MACb,OAAO,yBAAyBL,EAAE,qCAAqCA,EAAE,kCAAkC;IAC7G,KAAK,UAAU;MACb,OAAO,yBAAyBA,EAAE,6CAA6CA,EAAE,2BAA2B;IAC9G,KAAK,UAAU;MACb,OAAO,iBAAiBA,EAAE,8CAA8CA,EAAE,oCAAoC;IAChH,KAAK,WAAW;MACd,OAAO,SAASA,EAAE,eAAe;IACnC,KAAK,OAAO;MACV,OAAO,SAASA,EAAE,aAAa;IACjC,KAAK,UAAU;MACb,OAAO,SAASA,EAAE,eAAe;IACnC,KAAK,WAAW;MACd,OAAO,qBAAqBA,EAAE,gBAAgBA,EAAE,eAAe;IACjE,KAAK,WAAW;MACd,OAAO,aAAaA,EAAE,oCAAoCA,EAAE,6BAA6B;IAC3F,KAAK,WAAW;MACd,OAAO,aAAaA,EAAE,yBAAyBA,EAAE,kBAAkB;IACrE,KAAK,WAAW;MACd,OAAO,aAAaA,EAAE,oCAAoCA,EAAE,6BAA6B;IAC3F;MACE,OAAOG,SAAS;EACpB;AACF,CAAC;AAED,MAAMG,MAAM,GAAGC,UAAU,IAAI;EAC3B,MAAM;IAACC,IAAI;IAAEP;EAAQ,CAAC,GAAGM,UAAU;EACnC,QAAQC,IAAI;IACV,KAAK,cAAc;IACnB,KAAK,gBAAgB;IACrB,KAAK,mBAAmB;IACxB,KAAK,gBAAgB;IACrB,KAAK,mBAAmB;MACtB,OAAO;QACLA,IAAI,EAAE,cAAc;QACpBP,QAAQ,EAAEO;MACZ,CAAC;IAEH;MACE,OAAO;QAACA,IAAI;QAAEP;MAAQ,CAAC;EAC3B;AACF,CAAC;AAED,MAAMQ,WAAW,SAAStB,cAAc,CAAC;EACvCuB,WAAWA,CAAA,EAAG;IACZ,KAAK,CAAC,CAAC;IAEP,IAAI,CAACC,GAAG,GAAG;MACTC,OAAO,EAAG,IAAI,CAACC,YAAY,GAAG,IAAIxB,YAAY,CAAC,CAAE;MACjDyB,MAAM,EAAG,IAAI,CAACC,cAAc,GAAG,IAAIzB,cAAc,CAAC,CAAE;MACpD0B,OAAO,EAAG,IAAI,CAACC,YAAY,GAAG,IAAI1B,YAAY,CAAC,CAAE;MACjD2B,UAAU,EAAG,IAAI,CAACC,eAAe,GAAG,IAAI3B,eAAe,CAAC,CAAE;MAC1D4B,OAAO,EAAG,IAAI,CAACC,YAAY,GAAG,IAAI5B,YAAY,CAAC;IACjD,CAAC;EACH;EAEA,IAAI6B,GAAGA,CAAA,EAAG;IACR,OAAO,QAAQ;EACjB;EAEA,OAAOC,WAAWA,CAACC,IAAI,EAAE;IACvB;IACA,IAAIA,IAAI,CAAChB,IAAI,KAAK,SAAS,EAAE;MAC3B,IAAIgB,IAAI,CAACC,MAAM,IAAI/B,QAAQ,CAAC8B,IAAI,CAACJ,OAAO,CAAC,EAAE;QACzC,OAAO,KAAK;MACd;IACF;IACA,IAAII,IAAI,CAAChB,IAAI,KAAK,YAAY,IAAIgB,IAAI,CAACE,KAAK,EAAE;MAC5C;MACA,OAAO,KAAK;IACd;IACA,OAAO,IAAI;EACb;EAEAC,MAAMA,CAACC,SAAS,EAAEhC,KAAK,EAAE;IACvB,QAAQA,KAAK,CAACY,IAAI;MAChB,KAAK,YAAY;QACf,IAAI,CAACqB,gBAAgB,CAACD,SAAS,EAAEhC,KAAK,CAAC;QACvC;MACF,KAAK,QAAQ;QACX,IAAI,CAACkC,YAAY,CAACF,SAAS,EAAEhC,KAAK,CAAC;QACnC;MACF,KAAK,OAAO;QACV,IAAI,CAACmC,WAAW,CAACH,SAAS,EAAEhC,KAAK,CAAC;QAClC;MACF,KAAK,cAAc;QACjB,IAAI,CAACoC,kBAAkB,CAACJ,SAAS,EAAEhC,KAAK,CAAC;QACzC;MACF,KAAK,SAAS;QACZ,IAAI,CAACqC,aAAa,CAACL,SAAS,EAAEhC,KAAK,CAAC;QACpC;MACF,KAAK,YAAY;QACf,IAAI,CAACsC,gBAAgB,CAACN,SAAS,EAAEhC,KAAK,CAAC;QACvC;MACF,KAAK,SAAS;QACZ,IAAI,CAACuC,aAAa,CAACP,SAAS,EAAEhC,KAAK,CAAC;QACpC;MACF,KAAK,cAAc;QACjB,IAAI,CAACwC,UAAU,CAACR,SAAS,EAAEhC,KAAK,CAAC;QACjC;MACF,KAAK,YAAY;QACf,IAAI,CAACyC,gBAAgB,CAACT,SAAS,EAAEhC,KAAK,CAAC;QACvC;IACJ;EACF;EAEAiC,gBAAgBA,CAACD,SAAS,EAAEhC,KAAK,EAAE;IACjCgC,SAAS,CAACU,QAAQ,CAAC,IAAI,CAAChB,GAAG,EAAE;MAC3Bd,IAAI,EAAE,YAAY;MAClB+B,KAAK,EAAE3C,KAAK,CAAC2C,KAAK;MAClBC,QAAQ,EAAE5C,KAAK,CAAC4C,QAAQ;MACxBC,UAAU,EAAExD,SAAS,CAACyD,eAAe,CAAC9C,KAAK,CAAC6C,UAAU,EAAE,KAAK;IAC/D,CAAC,CAAC;IAEF,IAAI,CAACxB,YAAY,CAACU,MAAM,CAACC,SAAS,EAAEhC,KAAK,CAACC,QAAQ,CAAC,CAAC,CAAC,CAAC;IAEtD+B,SAAS,CAACe,SAAS,CAAC,CAAC;EACvB;EAEAb,YAAYA,CAACF,SAAS,EAAEhC,KAAK,EAAE;IAC7BgC,SAAS,CAACU,QAAQ,CAAC,IAAI,CAAChB,GAAG,EAAE;MAC3Bd,IAAI,EAAE,QAAQ;MACd+B,KAAK,EAAE3C,KAAK,CAAC2C,KAAK;MAClBC,QAAQ,EAAE5C,KAAK,CAAC4C,QAAQ;MACxBvC,QAAQ,EAAEL,KAAK,CAACK,QAAQ;MACxBwC,UAAU,EAAExD,SAAS,CAACyD,eAAe,CAAC9C,KAAK,CAAC6C,UAAU,EAAE,KAAK;IAC/D,CAAC,CAAC;IAEF7C,KAAK,CAACC,QAAQ,CAAC+C,OAAO,CAAC5B,OAAO,IAAI;MAChC,IAAI,CAACC,YAAY,CAACU,MAAM,CAACC,SAAS,EAAEZ,OAAO,CAAC;IAC9C,CAAC,CAAC;IAEFY,SAAS,CAACe,SAAS,CAAC,CAAC;EACvB;EAEAZ,WAAWA,CAACH,SAAS,EAAEhC,KAAK,EAAE;IAC5BgC,SAAS,CAACiB,QAAQ,CAAC,IAAI,CAACvB,GAAG,EAAE;MAC3Bd,IAAI,EAAE,OAAO;MACb+B,KAAK,EAAE3C,KAAK,CAAC2C,KAAK;MAClBC,QAAQ,EAAE5C,KAAK,CAAC4C,QAAQ;MACxBM,OAAO,EAAE7D,SAAS,CAACyD,eAAe,CAAC9C,KAAK,CAACkD,OAAO,EAAE,KAAK,CAAC;MACxDC,MAAM,EAAE9D,SAAS,CAACyD,eAAe,CAAC9C,KAAK,CAACmD,MAAM,EAAE,KAAK,CAAC;MACtDC,IAAI,EAAE/D,SAAS,CAACgE,UAAU,CAACrD,KAAK,CAACoD,IAAI,EAAE,EAAE,EAAE,IAAI,CAAC;MAChDP,UAAU,EAAExD,SAAS,CAACyD,eAAe,CAAC9C,KAAK,CAAC6C,UAAU,EAAE,KAAK;IAC/D,CAAC,CAAC;EACJ;EAEAT,kBAAkBA,CAACJ,SAAS,EAAEhC,KAAK,EAAE;IACnCgC,SAAS,CAACiB,QAAQ,CAAC,IAAI,CAACvB,GAAG,EAAE;MAC3Bd,IAAI,EAAE,cAAc;MACpB+B,KAAK,EAAE3C,KAAK,CAAC2C,KAAK;MAClBC,QAAQ,EAAE5C,KAAK,CAAC4C,QAAQ;MACxBU,YAAY,EAAEjE,SAAS,CAACyD,eAAe,CAAC9C,KAAK,CAACsD,YAAY,EAAE,IAAI,CAAC;MACjET,UAAU,EAAExD,SAAS,CAACyD,eAAe,CAAC9C,KAAK,CAAC6C,UAAU,EAAE,KAAK;IAC/D,CAAC,CAAC;EACJ;EAEAR,aAAaA,CAACL,SAAS,EAAEhC,KAAK,EAAE;IAC9BgC,SAAS,CAACU,QAAQ,CAAC,IAAI,CAAChB,GAAG,EAAE;MAC3Bd,IAAI,EAAE,SAAS;MACfgC,QAAQ,EAAE5C,KAAK,CAAC4C;IAClB,CAAC,CAAC;IAEF,IAAI,CAAC3B,YAAY,CAACc,MAAM,CAACC,SAAS,EAAEhC,KAAK,CAAC;IAC1C,IAAI,CAACmB,cAAc,CAACY,MAAM,CAACC,SAAS,EAAEhC,KAAK,CAAC;IAE5CgC,SAAS,CAACe,SAAS,CAAC,CAAC;EACvB;EAEAT,gBAAgBA,CAACN,SAAS,EAAEhC,KAAK,EAAE;IACjCgC,SAAS,CAACU,QAAQ,CAAC,IAAI,CAAChB,GAAG,EAAE;MAC3Bd,IAAI,EAAE,YAAY;MAClBgC,QAAQ,EAAE5C,KAAK,CAAC4C;IAClB,CAAC,CAAC;IAEF,IAAI,CAACrB,eAAe,CAACQ,MAAM,CAACC,SAAS,EAAEhC,KAAK,CAAC;IAE7CgC,SAAS,CAACe,SAAS,CAAC,CAAC;EACvB;EAEAR,aAAaA,CAACP,SAAS,EAAEhC,KAAK,EAAE;IAC9B;IACA,IAAI,CAACa,WAAW,CAACc,WAAW,CAAC3B,KAAK,CAAC,EAAE;MACnC;IACF;IAEAgC,SAAS,CAACU,QAAQ,CAAC,IAAI,CAAChB,GAAG,EAAE;MAC3Bd,IAAI,EAAE,SAAS;MACfgC,QAAQ,EAAE5C,KAAK,CAAC4C;IAClB,CAAC,CAAC;IAEF,IAAI,CAACnB,YAAY,CAACM,MAAM,CAACC,SAAS,EAAEhC,KAAK,CAAC;IAE1CgC,SAAS,CAACe,SAAS,CAAC,CAAC;EACvB;EAEAP,UAAUA,CAACR,SAAS,EAAEhC,KAAK,EAAE;IAC3BgC,SAAS,CAACU,QAAQ,CAAC,IAAI,CAAChB,GAAG,EAAE;MAC3Bd,IAAI,EAAEZ,KAAK,CAACK,QAAQ;MACpBsC,KAAK,EAAE3C,KAAK,CAAC2C,KAAK;MAClBC,QAAQ,EAAE5C,KAAK,CAAC4C,QAAQ;MACxBvC,QAAQ,EAAEhB,SAAS,CAACkE,iBAAiB,CAACvD,KAAK,CAACK,QAAQ,EAAE,cAAc,CAAC;MACrEwC,UAAU,EAAExD,SAAS,CAACyD,eAAe,CAAC9C,KAAK,CAAC6C,UAAU,EAAE,KAAK;IAC/D,CAAC,CAAC;IAEF,MAAMzB,OAAO,GAAGrB,cAAc,CAACC,KAAK,CAAC;IACrC,IAAIoB,OAAO,EAAE;MACX,IAAI,CAACC,YAAY,CAACU,MAAM,CAACC,SAAS,EAAEZ,OAAO,CAAC;IAC9C;IAEAY,SAAS,CAACe,SAAS,CAAC,CAAC;EACvB;EAEAN,gBAAgBA,CAACT,SAAS,EAAEhC,KAAK,EAAE;IACjCgC,SAAS,CAACU,QAAQ,CAAC,IAAI,CAAChB,GAAG,EAAE;MAC3Bd,IAAI,EAAE,YAAY;MAClB+B,KAAK,EAAE3C,KAAK,CAAC2C,KAAK;MAClBC,QAAQ,EAAE5C,KAAK,CAAC4C,QAAQ;MACxBnC,UAAU,EAAET,KAAK,CAACS,UAAU;MAC5BoC,UAAU,EAAExD,SAAS,CAACyD,eAAe,CAAC9C,KAAK,CAAC6C,UAAU,EAAE,KAAK;IAC/D,CAAC,CAAC;IAEF,MAAMzB,OAAO,GAAGZ,oBAAoB,CAACR,KAAK,CAAC;IAC3C,IAAIoB,OAAO,EAAE;MACX,IAAI,CAACC,YAAY,CAACU,MAAM,CAACC,SAAS,EAAEZ,OAAO,CAAC;IAC9C;IAEAY,SAAS,CAACe,SAAS,CAAC,CAAC;EACvB;EAEAS,cAAcA,CAAC;IAAC7C;EAAU,CAAC,EAAE;IAC3B,OAAO;MACL,GAAGD,MAAM,CAACC,UAAU,CAAC;MACrBgC,KAAK,EAAEtD,SAAS,CAACgE,UAAU,CAAC1C,UAAU,CAACgC,KAAK,CAAC;MAC7CC,QAAQ,EAAEvD,SAAS,CAACgE,UAAU,CAAC1C,UAAU,CAACiC,QAAQ,CAAC;MACnDnC,UAAU,EAAEE,UAAU,CAACF,UAAU;MACjCyC,OAAO,EAAE7D,SAAS,CAACoE,WAAW,CAAC9C,UAAU,CAACuC,OAAO,CAAC;MAClDC,MAAM,EAAE9D,SAAS,CAACoE,WAAW,CAAC9C,UAAU,CAACwC,MAAM,CAAC;MAChDC,IAAI,EAAE/D,SAAS,CAACgE,UAAU,CAAC1C,UAAU,CAACyC,IAAI,CAAC;MAC3CE,YAAY,EAAEjE,SAAS,CAACoE,WAAW,CAAC9C,UAAU,CAAC2C,YAAY,CAAC;MAC5DT,UAAU,EAAExD,SAAS,CAACoE,WAAW,CAAC9C,UAAU,CAACkC,UAAU;IACzD,CAAC;EACH;EAEAa,aAAaA,CAACC,IAAI,EAAEC,MAAM,EAAE;IAC1B,QAAQD,IAAI;MACV,KAAK,SAAS;MACd,KAAK,QAAQ;MACb,KAAK,YAAY;MACjB,KAAK,SAAS;QACZ;QACAE,MAAM,CAACC,MAAM,CAAC,IAAI,CAAC9D,KAAK,EAAE4D,MAAM,CAAC5D,KAAK,CAAC;QACvC;MAEF,KAAK,SAAS;QACZ;QACA,IAAI,CAACA,KAAK,CAACC,QAAQ,GAAG,IAAI,CAACD,KAAK,CAACC,QAAQ,IAAI,EAAE;QAC/C,IAAI,CAACD,KAAK,CAACC,QAAQ,CAAC8D,IAAI,CAACH,MAAM,CAAC5D,KAAK,CAAC;QACtC;IACJ;EACF;AACF;AAEAgE,MAAM,CAACC,OAAO,GAAGpD,WAAW","ignoreList":[]}
@@ -2,6 +2,7 @@
2
2
 
3
3
  const BaseXform = require('../../base-xform');
4
4
  const ConditionalFormattingXform = require('./conditional-formatting-xform');
5
+ const CfRuleXform = require('./cf-rule-xform');
5
6
  class ConditionalFormattingsXform extends BaseXform {
6
7
  constructor() {
7
8
  super();
@@ -21,7 +22,9 @@ class ConditionalFormattingsXform extends BaseXform {
21
22
  if (!rule.priority) {
22
23
  rule.priority = nextPriority++;
23
24
  }
24
- if (rule.style) {
25
+
26
+ // ext (x14) rules write their style inline as <x14:dxf>, not as a dxfId
27
+ if (rule.style && CfRuleXform.isPrimitive(rule)) {
25
28
  rule.dxfId = options.styles.addDxfStyle(rule.style);
26
29
  }
27
30
  });
@@ -1 +1 @@
1
- {"version":3,"file":"conditional-formattings-xform.js","names":["BaseXform","require","ConditionalFormattingXform","ConditionalFormattingsXform","constructor","cfXform","tag","reset","model","prepare","options","nextPriority","reduce","p","cf","Math","max","rules","map","rule","priority","forEach","style","dxfId","styles","addDxfStyle","render","xmlStream","parseOpen","node","parser","name","parseText","text","parseClose","push","undefined","reconcile","getDxfStyle","module","exports"],"sources":["../../../../../../lib/xlsx/xform/sheet/cf/conditional-formattings-xform.js"],"sourcesContent":["const BaseXform = require('../../base-xform');\n\nconst ConditionalFormattingXform = require('./conditional-formatting-xform');\n\nclass ConditionalFormattingsXform extends BaseXform {\n constructor() {\n super();\n\n this.cfXform = new ConditionalFormattingXform();\n }\n\n get tag() {\n return 'conditionalFormatting';\n }\n\n reset() {\n this.model = [];\n }\n\n prepare(model, options) {\n // ensure each rule has a priority value\n let nextPriority = model.reduce(\n (p, cf) => Math.max(p, ...cf.rules.map(rule => rule.priority || 0)),\n 1\n );\n model.forEach(cf => {\n cf.rules.forEach(rule => {\n if (!rule.priority) {\n rule.priority = nextPriority++;\n }\n\n if (rule.style) {\n rule.dxfId = options.styles.addDxfStyle(rule.style);\n }\n });\n });\n }\n\n render(xmlStream, model) {\n model.forEach(cf => {\n this.cfXform.render(xmlStream, cf);\n });\n }\n\n parseOpen(node) {\n if (this.parser) {\n this.parser.parseOpen(node);\n return true;\n }\n\n switch (node.name) {\n case 'conditionalFormatting':\n this.parser = this.cfXform;\n this.parser.parseOpen(node);\n return true;\n\n default:\n return false;\n }\n }\n\n parseText(text) {\n if (this.parser) {\n this.parser.parseText(text);\n }\n }\n\n parseClose(name) {\n if (this.parser) {\n if (!this.parser.parseClose(name)) {\n this.model.push(this.parser.model);\n this.parser = undefined;\n return false;\n }\n return true;\n }\n return false;\n }\n\n reconcile(model, options) {\n model.forEach(cf => {\n cf.rules.forEach(rule => {\n if (rule.dxfId !== undefined) {\n rule.style = options.styles.getDxfStyle(rule.dxfId);\n delete rule.dxfId;\n }\n });\n });\n }\n}\n\nmodule.exports = ConditionalFormattingsXform;\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"conditional-formattings-xform.js","names":["BaseXform","require","ConditionalFormattingXform","CfRuleXform","ConditionalFormattingsXform","constructor","cfXform","tag","reset","model","prepare","options","nextPriority","reduce","p","cf","Math","max","rules","map","rule","priority","forEach","style","isPrimitive","dxfId","styles","addDxfStyle","render","xmlStream","parseOpen","node","parser","name","parseText","text","parseClose","push","undefined","reconcile","getDxfStyle","module","exports"],"sources":["../../../../../../lib/xlsx/xform/sheet/cf/conditional-formattings-xform.js"],"sourcesContent":["const BaseXform = require('../../base-xform');\n\nconst ConditionalFormattingXform = require('./conditional-formatting-xform');\nconst CfRuleXform = require('./cf-rule-xform');\n\nclass ConditionalFormattingsXform extends BaseXform {\n constructor() {\n super();\n\n this.cfXform = new ConditionalFormattingXform();\n }\n\n get tag() {\n return 'conditionalFormatting';\n }\n\n reset() {\n this.model = [];\n }\n\n prepare(model, options) {\n // ensure each rule has a priority value\n let nextPriority = model.reduce(\n (p, cf) => Math.max(p, ...cf.rules.map(rule => rule.priority || 0)),\n 1\n );\n model.forEach(cf => {\n cf.rules.forEach(rule => {\n if (!rule.priority) {\n rule.priority = nextPriority++;\n }\n\n // ext (x14) rules write their style inline as <x14:dxf>, not as a dxfId\n if (rule.style && CfRuleXform.isPrimitive(rule)) {\n rule.dxfId = options.styles.addDxfStyle(rule.style);\n }\n });\n });\n }\n\n render(xmlStream, model) {\n model.forEach(cf => {\n this.cfXform.render(xmlStream, cf);\n });\n }\n\n parseOpen(node) {\n if (this.parser) {\n this.parser.parseOpen(node);\n return true;\n }\n\n switch (node.name) {\n case 'conditionalFormatting':\n this.parser = this.cfXform;\n this.parser.parseOpen(node);\n return true;\n\n default:\n return false;\n }\n }\n\n parseText(text) {\n if (this.parser) {\n this.parser.parseText(text);\n }\n }\n\n parseClose(name) {\n if (this.parser) {\n if (!this.parser.parseClose(name)) {\n this.model.push(this.parser.model);\n this.parser = undefined;\n return false;\n }\n return true;\n }\n return false;\n }\n\n reconcile(model, options) {\n model.forEach(cf => {\n cf.rules.forEach(rule => {\n if (rule.dxfId !== undefined) {\n rule.style = options.styles.getDxfStyle(rule.dxfId);\n delete rule.dxfId;\n }\n });\n });\n }\n}\n\nmodule.exports = ConditionalFormattingsXform;\n"],"mappings":"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","ignoreList":[]}
@@ -7,6 +7,8 @@ const BaseXform = require('../../base-xform');
7
7
  const CompositeXform = require('../../composite-xform');
8
8
  const DatabarExtXform = require('./databar-ext-xform');
9
9
  const IconSetExtXform = require('./icon-set-ext-xform');
10
+ const FExtXform = require('./f-ext-xform');
11
+ const DxfExtXform = require('../../style/dxf-ext-xform');
10
12
  const extIcons = {
11
13
  '3Triangles': true,
12
14
  '3Stars': true,
@@ -17,7 +19,9 @@ class CfRuleExtXform extends CompositeXform {
17
19
  super();
18
20
  this.map = {
19
21
  'x14:dataBar': this.databarXform = new DatabarExtXform(),
20
- 'x14:iconSet': this.iconSetXform = new IconSetExtXform()
22
+ 'x14:iconSet': this.iconSetXform = new IconSetExtXform(),
23
+ 'xm:f': this.fXform = new FExtXform(),
24
+ 'x14:dxf': this.dxfXform = new DxfExtXform()
21
25
  };
22
26
  }
23
27
  get tag() {
@@ -33,6 +37,11 @@ class CfRuleExtXform extends CompositeXform {
33
37
  return true;
34
38
  }
35
39
  }
40
+ if (rule.type === 'expression') {
41
+ // expression rules read from x14:cfRule (e.g. formulas that reference other sheets)
42
+ // keep their x14Id and are written back to the extLst
43
+ return !!rule.x14Id;
44
+ }
36
45
  return false;
37
46
  }
38
47
  prepare(model) {
@@ -51,6 +60,9 @@ class CfRuleExtXform extends CompositeXform {
51
60
  case 'iconSet':
52
61
  this.renderIconSet(xmlStream, model);
53
62
  break;
63
+ case 'expression':
64
+ this.renderExpression(xmlStream, model);
65
+ break;
54
66
  }
55
67
  }
56
68
  renderDataBar(xmlStream, model) {
@@ -70,6 +82,20 @@ class CfRuleExtXform extends CompositeXform {
70
82
  this.iconSetXform.render(xmlStream, model);
71
83
  xmlStream.closeNode();
72
84
  }
85
+ renderExpression(xmlStream, model) {
86
+ xmlStream.openNode(this.tag, {
87
+ type: 'expression',
88
+ priority: model.priority,
89
+ id: model.x14Id
90
+ });
91
+ if (model.formulae && model.formulae[0]) {
92
+ this.fXform.render(xmlStream, model.formulae[0]);
93
+ }
94
+ if (model.style) {
95
+ this.dxfXform.render(xmlStream, model.style);
96
+ }
97
+ xmlStream.closeNode();
98
+ }
73
99
  createNewModel({
74
100
  attributes
75
101
  }) {
@@ -80,7 +106,19 @@ class CfRuleExtXform extends CompositeXform {
80
106
  };
81
107
  }
82
108
  onParserClose(name, parser) {
83
- Object.assign(this.model, parser.model);
109
+ switch (name) {
110
+ case 'xm:f':
111
+ this.model.formulae = this.model.formulae || [];
112
+ this.model.formulae.push(parser.model);
113
+ break;
114
+ case 'x14:dxf':
115
+ // same shape as the style of a regular cfRule (reconciled from its dxfId)
116
+ this.model.style = parser.model;
117
+ break;
118
+ default:
119
+ Object.assign(this.model, parser.model);
120
+ break;
121
+ }
84
122
  }
85
123
  }
86
124
  module.exports = CfRuleExtXform;
@@ -1 +1 @@
1
- {"version":3,"file":"cf-rule-ext-xform.js","names":["uuidv4","require","BaseXform","CompositeXform","DatabarExtXform","IconSetExtXform","extIcons","CfRuleExtXform","constructor","map","databarXform","iconSetXform","tag","isExt","rule","type","custom","iconSet","prepare","model","x14Id","toUpperCase","render","xmlStream","renderDataBar","renderIconSet","openNode","id","closeNode","priority","createNewModel","attributes","toIntValue","onParserClose","name","parser","Object","assign","module","exports"],"sources":["../../../../../../lib/xlsx/xform/sheet/cf-ext/cf-rule-ext-xform.js"],"sourcesContent":["const {uuidv4} = require('../../../../utils/uuid');\nconst BaseXform = require('../../base-xform');\nconst CompositeXform = require('../../composite-xform');\n\nconst DatabarExtXform = require('./databar-ext-xform');\nconst IconSetExtXform = require('./icon-set-ext-xform');\n\nconst extIcons = {\n '3Triangles': true,\n '3Stars': true,\n '5Boxes': true,\n};\n\nclass CfRuleExtXform extends CompositeXform {\n constructor() {\n super();\n\n this.map = {\n 'x14:dataBar': (this.databarXform = new DatabarExtXform()),\n 'x14:iconSet': (this.iconSetXform = new IconSetExtXform()),\n };\n }\n\n get tag() {\n return 'x14:cfRule';\n }\n\n static isExt(rule) {\n // is this rule primitive?\n if (rule.type === 'dataBar') {\n return DatabarExtXform.isExt(rule);\n }\n if (rule.type === 'iconSet') {\n if (rule.custom || extIcons[rule.iconSet]) {\n return true;\n }\n }\n return false;\n }\n\n prepare(model) {\n if (CfRuleExtXform.isExt(model)) {\n model.x14Id = `{${uuidv4()}}`.toUpperCase();\n }\n }\n\n render(xmlStream, model) {\n if (!CfRuleExtXform.isExt(model)) {\n return;\n }\n\n switch (model.type) {\n case 'dataBar':\n this.renderDataBar(xmlStream, model);\n break;\n case 'iconSet':\n this.renderIconSet(xmlStream, model);\n break;\n }\n }\n\n renderDataBar(xmlStream, model) {\n xmlStream.openNode(this.tag, {\n type: 'dataBar',\n id: model.x14Id,\n });\n\n this.databarXform.render(xmlStream, model);\n\n xmlStream.closeNode();\n }\n\n renderIconSet(xmlStream, model) {\n xmlStream.openNode(this.tag, {\n type: 'iconSet',\n priority: model.priority,\n id: model.x14Id || `{${uuidv4()}}`,\n });\n\n this.iconSetXform.render(xmlStream, model);\n\n xmlStream.closeNode();\n }\n\n createNewModel({attributes}) {\n return {\n type: attributes.type,\n x14Id: attributes.id,\n priority: BaseXform.toIntValue(attributes.priority),\n };\n }\n\n onParserClose(name, parser) {\n Object.assign(this.model, parser.model);\n }\n}\n\nmodule.exports = CfRuleExtXform;\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"cf-rule-ext-xform.js","names":["uuidv4","require","BaseXform","CompositeXform","DatabarExtXform","IconSetExtXform","FExtXform","DxfExtXform","extIcons","CfRuleExtXform","constructor","map","databarXform","iconSetXform","fXform","dxfXform","tag","isExt","rule","type","custom","iconSet","x14Id","prepare","model","toUpperCase","render","xmlStream","renderDataBar","renderIconSet","renderExpression","openNode","id","closeNode","priority","formulae","style","createNewModel","attributes","toIntValue","onParserClose","name","parser","push","Object","assign","module","exports"],"sources":["../../../../../../lib/xlsx/xform/sheet/cf-ext/cf-rule-ext-xform.js"],"sourcesContent":["const {uuidv4} = require('../../../../utils/uuid');\nconst BaseXform = require('../../base-xform');\nconst CompositeXform = require('../../composite-xform');\n\nconst DatabarExtXform = require('./databar-ext-xform');\nconst IconSetExtXform = require('./icon-set-ext-xform');\nconst FExtXform = require('./f-ext-xform');\nconst DxfExtXform = require('../../style/dxf-ext-xform');\n\nconst extIcons = {\n '3Triangles': true,\n '3Stars': true,\n '5Boxes': true,\n};\n\nclass CfRuleExtXform extends CompositeXform {\n constructor() {\n super();\n\n this.map = {\n 'x14:dataBar': (this.databarXform = new DatabarExtXform()),\n 'x14:iconSet': (this.iconSetXform = new IconSetExtXform()),\n 'xm:f': (this.fXform = new FExtXform()),\n 'x14:dxf': (this.dxfXform = new DxfExtXform()),\n };\n }\n\n get tag() {\n return 'x14:cfRule';\n }\n\n static isExt(rule) {\n // is this rule primitive?\n if (rule.type === 'dataBar') {\n return DatabarExtXform.isExt(rule);\n }\n if (rule.type === 'iconSet') {\n if (rule.custom || extIcons[rule.iconSet]) {\n return true;\n }\n }\n if (rule.type === 'expression') {\n // expression rules read from x14:cfRule (e.g. formulas that reference other sheets)\n // keep their x14Id and are written back to the extLst\n return !!rule.x14Id;\n }\n return false;\n }\n\n prepare(model) {\n if (CfRuleExtXform.isExt(model)) {\n model.x14Id = `{${uuidv4()}}`.toUpperCase();\n }\n }\n\n render(xmlStream, model) {\n if (!CfRuleExtXform.isExt(model)) {\n return;\n }\n\n switch (model.type) {\n case 'dataBar':\n this.renderDataBar(xmlStream, model);\n break;\n case 'iconSet':\n this.renderIconSet(xmlStream, model);\n break;\n case 'expression':\n this.renderExpression(xmlStream, model);\n break;\n }\n }\n\n renderDataBar(xmlStream, model) {\n xmlStream.openNode(this.tag, {\n type: 'dataBar',\n id: model.x14Id,\n });\n\n this.databarXform.render(xmlStream, model);\n\n xmlStream.closeNode();\n }\n\n renderIconSet(xmlStream, model) {\n xmlStream.openNode(this.tag, {\n type: 'iconSet',\n priority: model.priority,\n id: model.x14Id || `{${uuidv4()}}`,\n });\n\n this.iconSetXform.render(xmlStream, model);\n\n xmlStream.closeNode();\n }\n\n renderExpression(xmlStream, model) {\n xmlStream.openNode(this.tag, {\n type: 'expression',\n priority: model.priority,\n id: model.x14Id,\n });\n\n if (model.formulae && model.formulae[0]) {\n this.fXform.render(xmlStream, model.formulae[0]);\n }\n if (model.style) {\n this.dxfXform.render(xmlStream, model.style);\n }\n\n xmlStream.closeNode();\n }\n\n createNewModel({attributes}) {\n return {\n type: attributes.type,\n x14Id: attributes.id,\n priority: BaseXform.toIntValue(attributes.priority),\n };\n }\n\n onParserClose(name, parser) {\n switch (name) {\n case 'xm:f':\n this.model.formulae = this.model.formulae || [];\n this.model.formulae.push(parser.model);\n break;\n case 'x14:dxf':\n // same shape as the style of a regular cfRule (reconciled from its dxfId)\n this.model.style = parser.model;\n break;\n default:\n Object.assign(this.model, parser.model);\n break;\n }\n }\n}\n\nmodule.exports = CfRuleExtXform;\n"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,24 @@
1
+ "use strict";
2
+
3
+ const DxfXform = require('./dxf-xform');
4
+
5
+ // <x14:dxf> holds a differential format inline in an x14:cfRule (extLst).
6
+ // It has the same children as <dxf> in styles.xml.
7
+ class DxfExtXform extends DxfXform {
8
+ get tag() {
9
+ return 'x14:dxf';
10
+ }
11
+ render(xmlStream, model) {
12
+ // a dxf read from a file holds numFmt as a NumFmtXform model ({id, formatCode})
13
+ if (model.numFmt && typeof model.numFmt === 'object') {
14
+ model = {
15
+ ...model,
16
+ numFmtId: model.numFmt.id,
17
+ numFmt: model.numFmt.formatCode
18
+ };
19
+ }
20
+ super.render(xmlStream, model);
21
+ }
22
+ }
23
+ module.exports = DxfExtXform;
24
+ //# sourceMappingURL=dxf-ext-xform.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dxf-ext-xform.js","names":["DxfXform","require","DxfExtXform","tag","render","xmlStream","model","numFmt","numFmtId","id","formatCode","module","exports"],"sources":["../../../../../lib/xlsx/xform/style/dxf-ext-xform.js"],"sourcesContent":["const DxfXform = require('./dxf-xform');\n\n// <x14:dxf> holds a differential format inline in an x14:cfRule (extLst).\n// It has the same children as <dxf> in styles.xml.\nclass DxfExtXform extends DxfXform {\n get tag() {\n return 'x14:dxf';\n }\n\n render(xmlStream, model) {\n // a dxf read from a file holds numFmt as a NumFmtXform model ({id, formatCode})\n if (model.numFmt && typeof model.numFmt === 'object') {\n model = {...model, numFmtId: model.numFmt.id, numFmt: model.numFmt.formatCode};\n }\n super.render(xmlStream, model);\n }\n}\n\nmodule.exports = DxfExtXform;\n"],"mappings":";;AAAA,MAAMA,QAAQ,GAAGC,OAAO,CAAC,aAAa,CAAC;;AAEvC;AACA;AACA,MAAMC,WAAW,SAASF,QAAQ,CAAC;EACjC,IAAIG,GAAGA,CAAA,EAAG;IACR,OAAO,SAAS;EAClB;EAEAC,MAAMA,CAACC,SAAS,EAAEC,KAAK,EAAE;IACvB;IACA,IAAIA,KAAK,CAACC,MAAM,IAAI,OAAOD,KAAK,CAACC,MAAM,KAAK,QAAQ,EAAE;MACpDD,KAAK,GAAG;QAAC,GAAGA,KAAK;QAAEE,QAAQ,EAAEF,KAAK,CAACC,MAAM,CAACE,EAAE;QAAEF,MAAM,EAAED,KAAK,CAACC,MAAM,CAACG;MAAU,CAAC;IAChF;IACA,KAAK,CAACN,MAAM,CAACC,SAAS,EAAEC,KAAK,CAAC;EAChC;AACF;AAEAK,MAAM,CAACC,OAAO,GAAGV,WAAW","ignoreList":[]}
@@ -61,7 +61,8 @@ class TableXform extends BaseXform {
61
61
  displayName: attributes.displayName || attributes.name,
62
62
  tableRef: attributes.ref,
63
63
  totalsRow: attributes.totalsRowCount === '1',
64
- headerRow: attributes.headerRowCount === '1'
64
+ // headerRowCount defaults to 1 and Excel usually omits it
65
+ headerRow: attributes.headerRowCount !== '0'
65
66
  };
66
67
  break;
67
68
  default:
@@ -1 +1 @@
1
- {"version":3,"file":"table-xform.js","names":["XmlStream","require","BaseXform","ListXform","AutoFilterXform","TableColumnXform","TableStyleInfoXform","TableXform","constructor","map","autoFilter","tableColumns","tag","count","empty","childXform","tableStyleInfo","prepare","model","options","columns","render","xmlStream","openXml","StdDocAttributes","openNode","TABLE_ATTRIBUTES","id","name","displayName","ref","tableRef","totalsRowCount","totalsRow","undefined","totalsRowShown","headerRowCount","headerRow","style","closeNode","parseOpen","node","parser","attributes","reset","parseText","text","parseClose","autoFilterRef","forEach","column","index","filterButton","reconcile","dxfId","styles","getDxfStyle","xmlns","module","exports"],"sources":["../../../../../lib/xlsx/xform/table/table-xform.js"],"sourcesContent":["const XmlStream = require('../../../utils/xml-stream');\n\nconst BaseXform = require('../base-xform');\nconst ListXform = require('../list-xform');\n\nconst AutoFilterXform = require('./auto-filter-xform');\nconst TableColumnXform = require('./table-column-xform');\nconst TableStyleInfoXform = require('./table-style-info-xform');\n\nclass TableXform extends BaseXform {\n constructor() {\n super();\n\n this.map = {\n autoFilter: new AutoFilterXform(),\n tableColumns: new ListXform({\n tag: 'tableColumns',\n count: true,\n empty: true,\n childXform: new TableColumnXform(),\n }),\n tableStyleInfo: new TableStyleInfoXform(),\n };\n }\n\n prepare(model, options) {\n this.map.autoFilter.prepare(model);\n this.map.tableColumns.prepare(model.columns, options);\n }\n\n get tag() {\n return 'table';\n }\n\n render(xmlStream, model) {\n xmlStream.openXml(XmlStream.StdDocAttributes);\n xmlStream.openNode(this.tag, {\n ...TableXform.TABLE_ATTRIBUTES,\n id: model.id,\n name: model.name,\n displayName: model.displayName || model.name,\n ref: model.tableRef,\n totalsRowCount: model.totalsRow ? '1' : undefined,\n totalsRowShown: model.totalsRow ? undefined : '1',\n headerRowCount: model.headerRow ? '1' : '0',\n });\n\n this.map.autoFilter.render(xmlStream, model);\n this.map.tableColumns.render(xmlStream, model.columns);\n this.map.tableStyleInfo.render(xmlStream, model.style);\n\n xmlStream.closeNode();\n }\n\n parseOpen(node) {\n if (this.parser) {\n this.parser.parseOpen(node);\n return true;\n }\n const {name, attributes} = node;\n switch (name) {\n case this.tag:\n this.reset();\n this.model = {\n name: attributes.name,\n displayName: attributes.displayName || attributes.name,\n tableRef: attributes.ref,\n totalsRow: attributes.totalsRowCount === '1',\n headerRow: attributes.headerRowCount === '1',\n };\n break;\n default:\n this.parser = this.map[node.name];\n if (this.parser) {\n this.parser.parseOpen(node);\n }\n break;\n }\n return true;\n }\n\n parseText(text) {\n if (this.parser) {\n this.parser.parseText(text);\n }\n }\n\n parseClose(name) {\n if (this.parser) {\n if (!this.parser.parseClose(name)) {\n this.parser = undefined;\n }\n return true;\n }\n switch (name) {\n case this.tag:\n this.model.columns = this.map.tableColumns.model;\n if (this.map.autoFilter.model) {\n this.model.autoFilterRef = this.map.autoFilter.model.autoFilterRef;\n this.map.autoFilter.model.columns.forEach((column, index) => {\n this.model.columns[index].filterButton = column.filterButton;\n });\n }\n this.model.style = this.map.tableStyleInfo.model;\n return false;\n default:\n // could be some unrecognised tags\n return true;\n }\n }\n\n reconcile(model, options) {\n // fetch the dfxs from styles\n model.columns.forEach(column => {\n if (column.dxfId !== undefined) {\n column.style = options.styles.getDxfStyle(column.dxfId);\n }\n });\n }\n}\n\nTableXform.TABLE_ATTRIBUTES = {\n xmlns: 'http://schemas.openxmlformats.org/spreadsheetml/2006/main',\n 'xmlns:mc': 'http://schemas.openxmlformats.org/markup-compatibility/2006',\n 'mc:Ignorable': 'xr xr3',\n 'xmlns:xr': 'http://schemas.microsoft.com/office/spreadsheetml/2014/revision',\n 'xmlns:xr3': 'http://schemas.microsoft.com/office/spreadsheetml/2016/revision3',\n // 'xr:uid': '{00000000-000C-0000-FFFF-FFFF00000000}',\n};\n\nmodule.exports = TableXform;\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"table-xform.js","names":["XmlStream","require","BaseXform","ListXform","AutoFilterXform","TableColumnXform","TableStyleInfoXform","TableXform","constructor","map","autoFilter","tableColumns","tag","count","empty","childXform","tableStyleInfo","prepare","model","options","columns","render","xmlStream","openXml","StdDocAttributes","openNode","TABLE_ATTRIBUTES","id","name","displayName","ref","tableRef","totalsRowCount","totalsRow","undefined","totalsRowShown","headerRowCount","headerRow","style","closeNode","parseOpen","node","parser","attributes","reset","parseText","text","parseClose","autoFilterRef","forEach","column","index","filterButton","reconcile","dxfId","styles","getDxfStyle","xmlns","module","exports"],"sources":["../../../../../lib/xlsx/xform/table/table-xform.js"],"sourcesContent":["const XmlStream = require('../../../utils/xml-stream');\n\nconst BaseXform = require('../base-xform');\nconst ListXform = require('../list-xform');\n\nconst AutoFilterXform = require('./auto-filter-xform');\nconst TableColumnXform = require('./table-column-xform');\nconst TableStyleInfoXform = require('./table-style-info-xform');\n\nclass TableXform extends BaseXform {\n constructor() {\n super();\n\n this.map = {\n autoFilter: new AutoFilterXform(),\n tableColumns: new ListXform({\n tag: 'tableColumns',\n count: true,\n empty: true,\n childXform: new TableColumnXform(),\n }),\n tableStyleInfo: new TableStyleInfoXform(),\n };\n }\n\n prepare(model, options) {\n this.map.autoFilter.prepare(model);\n this.map.tableColumns.prepare(model.columns, options);\n }\n\n get tag() {\n return 'table';\n }\n\n render(xmlStream, model) {\n xmlStream.openXml(XmlStream.StdDocAttributes);\n xmlStream.openNode(this.tag, {\n ...TableXform.TABLE_ATTRIBUTES,\n id: model.id,\n name: model.name,\n displayName: model.displayName || model.name,\n ref: model.tableRef,\n totalsRowCount: model.totalsRow ? '1' : undefined,\n totalsRowShown: model.totalsRow ? undefined : '1',\n headerRowCount: model.headerRow ? '1' : '0',\n });\n\n this.map.autoFilter.render(xmlStream, model);\n this.map.tableColumns.render(xmlStream, model.columns);\n this.map.tableStyleInfo.render(xmlStream, model.style);\n\n xmlStream.closeNode();\n }\n\n parseOpen(node) {\n if (this.parser) {\n this.parser.parseOpen(node);\n return true;\n }\n const {name, attributes} = node;\n switch (name) {\n case this.tag:\n this.reset();\n this.model = {\n name: attributes.name,\n displayName: attributes.displayName || attributes.name,\n tableRef: attributes.ref,\n totalsRow: attributes.totalsRowCount === '1',\n // headerRowCount defaults to 1 and Excel usually omits it\n headerRow: attributes.headerRowCount !== '0',\n };\n break;\n default:\n this.parser = this.map[node.name];\n if (this.parser) {\n this.parser.parseOpen(node);\n }\n break;\n }\n return true;\n }\n\n parseText(text) {\n if (this.parser) {\n this.parser.parseText(text);\n }\n }\n\n parseClose(name) {\n if (this.parser) {\n if (!this.parser.parseClose(name)) {\n this.parser = undefined;\n }\n return true;\n }\n switch (name) {\n case this.tag:\n this.model.columns = this.map.tableColumns.model;\n if (this.map.autoFilter.model) {\n this.model.autoFilterRef = this.map.autoFilter.model.autoFilterRef;\n this.map.autoFilter.model.columns.forEach((column, index) => {\n this.model.columns[index].filterButton = column.filterButton;\n });\n }\n this.model.style = this.map.tableStyleInfo.model;\n return false;\n default:\n // could be some unrecognised tags\n return true;\n }\n }\n\n reconcile(model, options) {\n // fetch the dfxs from styles\n model.columns.forEach(column => {\n if (column.dxfId !== undefined) {\n column.style = options.styles.getDxfStyle(column.dxfId);\n }\n });\n }\n}\n\nTableXform.TABLE_ATTRIBUTES = {\n xmlns: 'http://schemas.openxmlformats.org/spreadsheetml/2006/main',\n 'xmlns:mc': 'http://schemas.openxmlformats.org/markup-compatibility/2006',\n 'mc:Ignorable': 'xr xr3',\n 'xmlns:xr': 'http://schemas.microsoft.com/office/spreadsheetml/2014/revision',\n 'xmlns:xr3': 'http://schemas.microsoft.com/office/spreadsheetml/2016/revision3',\n // 'xr:uid': '{00000000-000C-0000-FFFF-FFFF00000000}',\n};\n\nmodule.exports = TableXform;\n"],"mappings":"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","ignoreList":[]}