{"version":3,"file":"ej2-excel-export.min.js","sources":["../../src/cell-style.js","../../src/cell.js","../../src/column.js","../../src/row.js","../../src/worksheets.js","../../src/worksheet.js","../../src/image.js","../../src/value-formatter.js","../../src/csv-helper.js","../../src/blob-helper.js","../../src/auto-filters.js","../../src/workbook.js"],"sourcesContent":["/**\n * CellStyle class\n * @private\n */\nvar CellStyle = /** @class */ (function () {\n function CellStyle() {\n this.numFmtId = 0;\n this.backColor = 'none';\n this.fontName = 'Calibri';\n this.fontSize = 10.5;\n this.fontColor = '#000000';\n this.italic = false;\n this.bold = false;\n this.underline = false;\n this.strikeThrough = false;\n this.wrapText = false;\n this.hAlign = 'general';\n this.vAlign = 'bottom';\n this.indent = 0;\n this.rotation = 0;\n this.numberFormat = 'GENERAL';\n this.type = 'datetime';\n this.borders = new Borders();\n this.isGlobalStyle = false;\n }\n return CellStyle;\n}());\nexport { CellStyle };\n/**\n * Font Class\n * @private\n */\nvar Font = /** @class */ (function () {\n function Font() {\n this.sz = 10.5;\n this.name = 'Calibri';\n this.u = false;\n this.b = false;\n this.i = false;\n this.color = 'FF000000';\n this.strike = false;\n }\n return Font;\n}());\nexport { Font };\n/**\n * CellXfs class\n * @private\n */\nvar CellXfs = /** @class */ (function () {\n function CellXfs() {\n }\n return CellXfs;\n}());\nexport { CellXfs };\n/**\n * Alignment class\n * @private\n */\nvar Alignment = /** @class */ (function () {\n function Alignment() {\n }\n return Alignment;\n}());\nexport { Alignment };\n/**\n * CellStyleXfs class\n * @private\n */\nvar CellStyleXfs = /** @class */ (function () {\n function CellStyleXfs() {\n }\n return CellStyleXfs;\n}());\nexport { CellStyleXfs };\n/**\n * CellStyles class\n * @private\n */\nvar CellStyles = /** @class */ (function () {\n function CellStyles() {\n this.name = 'Normal';\n this.xfId = 0;\n }\n return CellStyles;\n}());\nexport { CellStyles };\n/**\n * NumFmt class\n * @private\n */\nvar NumFmt = /** @class */ (function () {\n function NumFmt(id, code) {\n this.numFmtId = id;\n this.formatCode = code;\n }\n return NumFmt;\n}());\nexport { NumFmt };\n/**\n * Border class\n * @private\n */\nvar Border = /** @class */ (function () {\n function Border(mLine, mColor) {\n this.lineStyle = mLine;\n this.color = mColor;\n }\n return Border;\n}());\nexport { Border };\n/**\n * Borders class\n * @private\n */\nvar Borders = /** @class */ (function () {\n function Borders() {\n this.left = new Border('none', '#FFFFFF');\n this.right = new Border('none', '#FFFFFF');\n this.top = new Border('none', '#FFFFFF');\n this.bottom = new Border('none', '#FFFFFF');\n this.all = new Border('none', '#FFFFFF');\n }\n return Borders;\n}());\nexport { Borders };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n/**\n * Worksheet class\n * @private\n */\nvar Cell = /** @class */ (function () {\n function Cell() {\n }\n return Cell;\n}());\nexport { Cell };\n/**\n * Cells class\n * @private\n */\nvar Cells = /** @class */ (function (_super) {\n __extends(Cells, _super);\n function Cells() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.add = function (cell) {\n var inserted = false;\n var count = 0;\n for (var _i = 0, _a = _this; _i < _a.length; _i++) {\n var c = _a[_i];\n if (c.index === cell.index) {\n _this[count] = cell;\n inserted = true;\n }\n count++;\n }\n if (!inserted) {\n _this.push(cell);\n }\n };\n return _this;\n }\n return Cells;\n}(Array));\nexport { Cells };\n","/**\n * Column class\n * @private\n */\nvar Column = /** @class */ (function () {\n function Column() {\n }\n return Column;\n}());\nexport { Column };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n/**\n * Row class\n * @private\n */\nvar Row = /** @class */ (function () {\n function Row() {\n }\n return Row;\n}());\nexport { Row };\n/**\n * Rows class\n * @private\n */\nvar Rows = /** @class */ (function (_super) {\n __extends(Rows, _super);\n function Rows() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.add = function (row) {\n _this.push(row);\n };\n return _this;\n }\n return Rows;\n}(Array));\nexport { Rows };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n/**\n * Worksheets class\n * @private\n */\nvar Worksheets = /** @class */ (function (_super) {\n __extends(Worksheets, _super);\n function Worksheets() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n return Worksheets;\n}(Array));\nexport { Worksheets };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n/**\n * Worksheet class\n * @private\n */\nvar Worksheet = /** @class */ (function () {\n function Worksheet() {\n this.isSummaryRowBelow = true;\n this.showGridLines = true;\n this.enableRtl = false;\n }\n return Worksheet;\n}());\nexport { Worksheet };\n/**\n * Hyperlink class\n * @private\n */\nvar HyperLink = /** @class */ (function () {\n function HyperLink() {\n }\n return HyperLink;\n}());\nexport { HyperLink };\n/**\n * Grouping class\n * @private\n */\nvar Grouping = /** @class */ (function () {\n function Grouping() {\n }\n return Grouping;\n}());\nexport { Grouping };\n/**\n * FreezePane class\n * @private\n */\nvar FreezePane = /** @class */ (function () {\n function FreezePane() {\n }\n return FreezePane;\n}());\nexport { FreezePane };\n/**\n * MergeCell\n * @private\n */\nvar MergeCell = /** @class */ (function () {\n function MergeCell() {\n }\n return MergeCell;\n}());\nexport { MergeCell };\n/**\n * MergeCells class\n * @private\n */\nvar MergeCells = /** @class */ (function (_super) {\n __extends(MergeCells, _super);\n function MergeCells() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.add = function (mergeCell) {\n var inserted = false;\n var count = 0;\n for (var _i = 0, _a = _this; _i < _a.length; _i++) {\n var mCell = _a[_i];\n if (MergeCells.isIntersecting(mCell, mergeCell)) {\n var intersectingCell = new MergeCell();\n intersectingCell.x = Math.min(mCell.x, mergeCell.x);\n intersectingCell.y = Math.min(mCell.Y, mergeCell.y);\n intersectingCell.width = Math.max(mCell.Width + mCell.X, mergeCell.width + mergeCell.x);\n intersectingCell.height = Math.max(mCell.Height + mCell.Y, mergeCell.height + mergeCell.y);\n intersectingCell.ref = (_this[count].ref.split(':')[0]) + ':' + (mergeCell.ref.split(':')[1]);\n _this[count] = intersectingCell;\n mergeCell = intersectingCell;\n inserted = true;\n }\n count++;\n }\n if (!inserted) {\n _this.push(mergeCell);\n }\n return mergeCell;\n };\n return _this;\n }\n MergeCells.isIntersecting = function (base, compare) {\n return (base.x <= compare.x + compare.width)\n && (compare.x <= base.x + base.width)\n && (base.y <= compare.y + compare.height)\n && (compare.y <= base.y + base.height);\n };\n return MergeCells;\n}(Array));\nexport { MergeCells };\n","/**\n * Image class\n * @private\n */\nvar Image = /** @class */ (function () {\n function Image() {\n }\n return Image;\n}());\nexport { Image };\n","import { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { Internationalization } from '@syncfusion/ej2-base';\n// import { IValueFormatter } from '../base/interface';\n/**\n * ValueFormatter class to globalize the value.\n * @private\n */\nvar ValueFormatter = /** @class */ (function () {\n function ValueFormatter(cultureName) {\n this.intl = new Internationalization();\n // if (!isNullOrUndefined(cultureName)) {\n // this.intl.culture = cultureName;\n // }\n }\n ValueFormatter.prototype.getFormatFunction = function (format, isServerRendered) {\n if (format.type) {\n if (isServerRendered) {\n format.isServerRendered = true;\n }\n return this.intl.getDateFormat(format);\n }\n else {\n return this.intl.getNumberFormat(format);\n }\n };\n // public getParserFunction(format: NumberFormatOptions | DateFormatOptions): Function {\n // if ((format).type) {\n // return this.intl.getDateParser(format);\n // } else {\n // return this.intl.getNumberParser(format);\n // }\n // }\n // public fromView(value: string, format: Function, type?: string): string | number | Date {\n // if (type === 'date' || type === 'datetime' || type === 'number') {\n // return format(value);\n // } else {\n // return value;\n // }\n // }\n ValueFormatter.prototype.toView = function (value, format) {\n var result = value;\n if (!isNullOrUndefined(format) && !isNullOrUndefined(value)) {\n result = format(value);\n }\n return result;\n };\n // public setCulture(cultureName: string): void {\n // if (!isNullOrUndefined(cultureName)) {\n // setCulture(cultureName);\n // }\n // }\n /* tslint:disable:no-any */\n ValueFormatter.prototype.displayText = function (value, format, isServerRendered) {\n return this.toView(value, this.getFormatFunction(format, isServerRendered));\n };\n return ValueFormatter;\n}());\nexport { ValueFormatter };\n","import { ValueFormatter } from './value-formatter';\nimport { Encoding } from '@syncfusion/ej2-file-utils';\n/**\n * CsvHelper class\n * @private\n */\nvar CsvHelper = /** @class */ (function () {\n /* tslint:disable:no-any */\n function CsvHelper(json, separator) {\n this.csvStr = '';\n if (separator === null || separator === undefined) {\n this.separator = ',';\n }\n else {\n this.separator = separator;\n }\n this.formatter = new ValueFormatter();\n this.isMicrosoftBrowser = !(!navigator.msSaveBlob);\n if (json.isServerRendered !== null && json.isServerRendered !== undefined) {\n this.isServerRendered = json.isServerRendered;\n }\n if (json.styles !== null && json.styles !== undefined) {\n this.globalStyles = new Map();\n for (var i = 0; i < json.styles.length; i++) {\n if (json.styles[i].name !== undefined && json.styles[i].numberFormat !== undefined) {\n this.globalStyles.set(json.styles[i].name, json.styles[i].numberFormat);\n }\n }\n }\n // Parses Worksheets data to DOM. \n if (json.worksheets !== null && json.worksheets !== undefined) {\n this.parseWorksheet(json.worksheets[0]);\n }\n //this.csvStr = 'a1,a2,a3\\nb1,b2,b3';\n }\n CsvHelper.prototype.parseWorksheet = function (json) {\n //Rows\n if (json.rows !== null && json.rows !== undefined) {\n this.parseRows(json.rows);\n }\n };\n /* tslint:disable:no-any */\n CsvHelper.prototype.parseRows = function (rows) {\n var count = 1;\n for (var _i = 0, rows_1 = rows; _i < rows_1.length; _i++) {\n var row = rows_1[_i];\n //Row index\n if (row.index !== null && row.index !== undefined) {\n while (count < row.index) {\n this.csvStr += '\\r\\n';\n count++;\n }\n this.parseRow(row);\n }\n else {\n throw Error('Row index is missing.');\n }\n }\n this.csvStr += '\\r\\n';\n };\n /* tslint:disable:no-any */\n CsvHelper.prototype.parseRow = function (row) {\n if (row.cells !== null && row.cells !== undefined) {\n var count = 1;\n for (var _i = 0, _a = row.cells; _i < _a.length; _i++) {\n var cell = _a[_i];\n //cell index\n if (cell.index !== null && cell.index !== undefined) {\n while (count < cell.index) {\n this.csvStr += this.separator;\n count++;\n }\n this.parseCell(cell);\n }\n else {\n throw Error('Cell index is missing.');\n }\n }\n }\n };\n /* tslint:disable:no-any */\n CsvHelper.prototype.parseCell = function (cell) {\n var csv = this.csvStr;\n if (cell.value !== undefined) {\n if (cell.value instanceof Date) {\n if (cell.style !== undefined && cell.style.numberFormat !== undefined) {\n /* tslint:disable-next-line:max-line-length */\n try {\n csv += this.parseCellValue(this.formatter.displayText(cell.value, { type: 'dateTime', skeleton: cell.style.numberFormat }, this.isServerRendered));\n }\n catch (error) {\n /* tslint:disable-next-line:max-line-length */\n csv += this.parseCellValue(this.formatter.displayText(cell.value, { type: 'dateTime', format: cell.style.numberFormat }, this.isServerRendered));\n }\n }\n else if (cell.style !== undefined && cell.style.name !== undefined && this.globalStyles.has(cell.style.name)) {\n /* tslint:disable-next-line:max-line-length */\n try {\n csv += this.parseCellValue(this.formatter.displayText(cell.value, { type: 'dateTime', skeleton: this.globalStyles.get(cell.style.name) }, this.isServerRendered));\n }\n catch (error) {\n /* tslint:disable-next-line:max-line-length */\n csv += this.parseCellValue(this.formatter.displayText(cell.value, { type: 'dateTime', format: this.globalStyles.get(cell.style.name) }, this.isServerRendered));\n }\n }\n else {\n csv += cell.value;\n }\n }\n else if (typeof (cell.value) === 'boolean') {\n csv += cell.value ? 'TRUE' : 'FALSE';\n }\n else if (typeof (cell.value) === 'number') {\n if (cell.style !== undefined && cell.style.numberFormat !== undefined) {\n /* tslint:disable-next-line:max-line-length */\n csv += this.parseCellValue(this.formatter.displayText(cell.value, { format: cell.style.numberFormat }, this.isServerRendered));\n }\n else if (cell.style !== undefined && cell.style.name !== undefined && this.globalStyles.has(cell.style.name)) {\n /* tslint:disable-next-line:max-line-length */\n csv += this.parseCellValue(this.formatter.displayText(cell.value, { format: this.globalStyles.get(cell.style.name) }, this.isServerRendered));\n }\n else {\n csv += cell.value;\n }\n }\n else {\n csv += this.parseCellValue(cell.value);\n }\n }\n this.csvStr = csv;\n };\n CsvHelper.prototype.parseCellValue = function (value) {\n var val = '';\n var length = value.length;\n for (var start = 0; start < length; start++) {\n if (value[start] === '\\\"') {\n val += value[start].replace('\\\"', '\\\"\\\"');\n }\n else {\n val += value[start];\n }\n }\n value = val;\n if (value.indexOf(this.separator) !== -1 || value.indexOf('\\n') !== -1 || value.indexOf('\\\"') !== -1) {\n return value = '\\\"' + value + '\\\"';\n }\n else {\n return value;\n }\n };\n /**\n * Saves the file with specified name and sends the file to client browser\n * @param {string} fileName- file name to save.\n * @param {Blob} buffer- the content to write in file\n */\n CsvHelper.prototype.save = function (fileName) {\n this.buffer = new Blob(['\\ufeff' + this.csvStr], { type: 'text/csv;charset=UTF-8' });\n if (this.isMicrosoftBrowser) {\n navigator.msSaveBlob(this.buffer, fileName);\n }\n else {\n var dataUrl_1 = window.URL.createObjectURL(this.buffer);\n var dwlLink = document.createElementNS('http://www.w3.org/1999/xhtml', 'a');\n dwlLink.download = fileName;\n dwlLink.href = dataUrl_1;\n var event_1 = document.createEvent('MouseEvent');\n event_1.initEvent('click', true, true);\n dwlLink.dispatchEvent(event_1);\n setTimeout(function () {\n window.URL.revokeObjectURL(dataUrl_1);\n });\n }\n };\n /**\n * Returns a Blob object containing CSV data with optional encoding.\n * @param {string} [encodingType] - The supported encoding types are \"ansi\", \"unicode\" and \"utf8\".\n */\n /* tslint:disable:no-any */\n CsvHelper.prototype.saveAsBlob = function (encodingType) {\n if (encodingType != undefined) {\n var encoding = new Encoding();\n var encodeString = 'UTF-8';\n if (encodingType.toUpperCase() == \"ANSI\") {\n encoding.type = 'Ansi';\n encodeString = 'ANSI';\n }\n else if (encodingType.toUpperCase() == \"UNICODE\") {\n encoding.type = 'Unicode';\n encodeString = 'UNICODE';\n }\n else {\n encoding.type = 'Utf8';\n encodeString = 'UTF-8';\n }\n var buffer = encoding.getBytes(this.csvStr, 0, this.csvStr.length);\n return new Blob([buffer], { type: 'text/csv;charset=' + encodeString });\n }\n else\n return new Blob(['\\ufeff' + this.csvStr], { type: 'text/csv;charset=UTF-8' });\n };\n return CsvHelper;\n}());\nexport { CsvHelper };\n","/**\n * BlobHelper class\n * @private\n */\nvar BlobHelper = /** @class */ (function () {\n function BlobHelper() {\n /* tslint:disable:no-any */\n this.parts = [];\n }\n /* tslint:disable:no-any */\n BlobHelper.prototype.append = function (part) {\n this.parts.push(part);\n this.blob = undefined; // Invalidate the blob\n };\n BlobHelper.prototype.getBlob = function () {\n return new Blob(this.parts, { type: 'text/plain' });\n };\n return BlobHelper;\n}());\nexport { BlobHelper };\n","/**\n * AutoFilters class\n * @private\n */\nvar AutoFilters = /** @class */ (function () {\n function AutoFilters() {\n }\n return AutoFilters;\n}());\nexport { AutoFilters };\n","import { Worksheets } from './worksheets';\nimport { Worksheet, FreezePane, MergeCell, MergeCells, HyperLink, Grouping } from './worksheet';\nimport { CellStyle, Font, Borders, CellXfs, Alignment, NumFmt, CellStyleXfs, CellStyles } from './cell-style';\nimport { Column } from './column';\nimport { Row, Rows } from './row';\nimport { Image } from './image';\nimport { Cell, Cells } from './cell';\nimport { ZipArchive, ZipArchiveItem } from '@syncfusion/ej2-compression';\nimport { CsvHelper } from './csv-helper';\nimport { Internationalization, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { BlobHelper } from './blob-helper';\nimport { AutoFilters } from './auto-filters';\n/**\n * Workbook class\n */\nvar Workbook = /** @class */ (function () {\n /* tslint:disable:no-any */\n function Workbook(json, saveType, culture, currencyString, separator) {\n this.sharedStringCount = 0;\n this.unitsProportions = [\n 96 / 75.0,\n 96 / 300.0,\n 96,\n 96 / 25.4,\n 96 / 2.54,\n 1,\n 96 / 72.0,\n 96 / 72.0 / 12700,\n ];\n /* tslint:disable:no-any */\n this.hyperlinkStyle = { fontColor: '#0000FF', underline: true };\n if (culture !== undefined) {\n this.culture = culture;\n }\n else {\n this.culture = 'en-US';\n }\n if (currencyString !== undefined) {\n this.currency = currencyString;\n }\n else {\n this.currency = 'USD';\n }\n this.intl = new Internationalization(this.culture);\n this.mSaveType = saveType;\n if (saveType === 'xlsx') {\n this.mArchive = new ZipArchive();\n this.sharedString = [];\n this.mFonts = [];\n this.mBorders = [];\n this.mStyles = [];\n this.printTitles = new Map();\n this.cellStyles = new Map();\n this.mNumFmt = new Map();\n this.mFills = new Map();\n this.mStyles.push(new CellStyle());\n this.mFonts.push(new Font());\n /* tslint:disable */\n this.cellStyles.set('Normal', new CellStyles());\n /* tslint:enable */\n this.mCellXfs = [];\n this.mCellStyleXfs = [];\n this.drawingCount = 0;\n this.imageCount = 0;\n if (json.styles !== null && json.styles !== undefined) {\n /* tslint:disable-next-line:no-any */\n this.globalStyles = new Map();\n for (var i = 0; i < json.styles.length; i++) {\n if (json.styles[i].name !== undefined) {\n if (!this.cellStyles.has(json.styles[i].name)) {\n var cellStyle = new CellStyle();\n cellStyle.isGlobalStyle = true;\n this.parserCellStyle(json.styles[i], cellStyle, 'none');\n var cellStylesIn = new CellStyles();\n cellStylesIn.name = cellStyle.name;\n cellStylesIn.xfId = (cellStyle.index - 1);\n this.cellStyles.set(cellStylesIn.name, cellStylesIn);\n /* tslint:disable-next-line:no-any */\n var tFormat = {};\n if (json.styles[i].numberFormat !== undefined) {\n tFormat.format = json.styles[i].numberFormat;\n }\n if (json.styles[i].type !== undefined) {\n tFormat.type = json.styles[i].type;\n }\n else {\n tFormat.type = 'datetime';\n }\n if (tFormat.format !== undefined) {\n this.globalStyles.set(json.styles[i].name, tFormat);\n }\n }\n else {\n throw Error('Style name ' + json.styles[i].name + ' is already existed');\n }\n }\n }\n }\n // Parses Worksheets data to DOM. \n if (json.worksheets !== null && json.worksheets !== undefined) {\n this.parserWorksheets(json.worksheets);\n }\n else {\n throw Error('Worksheet is expected.');\n }\n // Parses the BuiltInProperties data to DOM. \n if (json.builtInProperties !== null && json.builtInProperties !== undefined) {\n this.builtInProperties = new BuiltInProperties();\n this.parserBuiltInProperties(json.builtInProperties, this.builtInProperties);\n }\n }\n else {\n this.csvHelper = new CsvHelper(json, separator);\n }\n }\n /* tslint:disable:no-any */\n Workbook.prototype.parserBuiltInProperties = function (jsonBuiltInProperties, builtInProperties) {\n //Author\n if (jsonBuiltInProperties.author !== null && jsonBuiltInProperties.author !== undefined) {\n builtInProperties.author = jsonBuiltInProperties.author;\n }\n //Comments\n if (jsonBuiltInProperties.comments !== null && jsonBuiltInProperties.comments !== undefined) {\n builtInProperties.comments = jsonBuiltInProperties.comments;\n }\n //Category\n if (jsonBuiltInProperties.category !== null && jsonBuiltInProperties.category !== undefined) {\n builtInProperties.category = jsonBuiltInProperties.category;\n }\n //Company\n if (jsonBuiltInProperties.company !== null && jsonBuiltInProperties.company !== undefined) {\n builtInProperties.company = jsonBuiltInProperties.company;\n }\n //Manager\n if (jsonBuiltInProperties.manager !== null && jsonBuiltInProperties.manager !== undefined) {\n builtInProperties.manager = jsonBuiltInProperties.manager;\n }\n //Subject\n if (jsonBuiltInProperties.subject !== null && jsonBuiltInProperties.subject !== undefined) {\n builtInProperties.subject = jsonBuiltInProperties.subject;\n }\n //Title\n if (jsonBuiltInProperties.title !== null && jsonBuiltInProperties.title !== undefined) {\n builtInProperties.title = jsonBuiltInProperties.title;\n }\n //Creation date\n if (jsonBuiltInProperties.createdDate !== null && jsonBuiltInProperties.createdDate !== undefined) {\n builtInProperties.createdDate = jsonBuiltInProperties.createdDate;\n }\n //Modified date\n if (jsonBuiltInProperties.modifiedDate !== null && jsonBuiltInProperties.modifiedDate !== undefined) {\n builtInProperties.modifiedDate = jsonBuiltInProperties.modifiedDate;\n }\n //Tags\n if (jsonBuiltInProperties.tags !== null && jsonBuiltInProperties.tags !== undefined) {\n builtInProperties.tags = jsonBuiltInProperties.tags;\n }\n //Status\n if (jsonBuiltInProperties.status !== null && jsonBuiltInProperties.status !== undefined) {\n builtInProperties.status = jsonBuiltInProperties.status;\n }\n };\n /* tslint:disable:no-any */\n Workbook.prototype.parserWorksheets = function (json) {\n this.worksheets = new Worksheets();\n var length = json.length;\n for (var i = 0; i < length; i++) {\n var jsonSheet = json[i];\n var sheet = new Worksheet();\n this.mergeCells = new MergeCells();\n this.mergedCellsStyle = new Map();\n this.mHyperLinks = [];\n //Name\n if (jsonSheet.name !== null && jsonSheet.name !== undefined) {\n sheet.name = jsonSheet.name;\n }\n else {\n sheet.name = 'Sheet' + (i + 1).toString();\n }\n if (jsonSheet.enableRtl !== null && jsonSheet.enableRtl !== undefined) {\n sheet.enableRtl = jsonSheet.enableRtl;\n }\n sheet.index = (i + 1);\n //Columns\n if (jsonSheet.columns !== null && jsonSheet.columns !== undefined) {\n this.parserColumns(jsonSheet.columns, sheet);\n }\n //Rows\n if (jsonSheet.rows !== null && jsonSheet.rows !== undefined) {\n this.parserRows(jsonSheet.rows, sheet);\n }\n //showGridLines\n if (jsonSheet.showGridLines !== null && jsonSheet.showGridLines !== undefined) {\n sheet.showGridLines = jsonSheet.showGridLines;\n }\n //FreezePanes\n if (jsonSheet.freeze !== null && jsonSheet.freeze !== undefined) {\n this.parserFreezePanes(jsonSheet.freeze, sheet);\n }\n //Print Title\n if (jsonSheet.printTitle !== null && jsonSheet.printTitle !== undefined) {\n this.parserPrintTitle(jsonSheet.printTitle, sheet);\n }\n if (jsonSheet.pageSetup !== undefined) {\n if (jsonSheet.pageSetup.isSummaryRowBelow !== undefined) {\n sheet.isSummaryRowBelow = jsonSheet.pageSetup.isSummaryRowBelow;\n }\n }\n if (jsonSheet.images !== undefined) {\n this.parserImages(jsonSheet.images, sheet);\n }\n if (jsonSheet.autoFilters !== null && jsonSheet.autoFilters !== undefined) {\n this.parseFilters(jsonSheet.autoFilters, sheet);\n }\n sheet.index = (i + 1);\n sheet.mergeCells = this.mergeCells;\n sheet.hyperLinks = this.mHyperLinks;\n this.worksheets.push(sheet);\n }\n };\n /* tslint:disable:no-any */\n Workbook.prototype.mergeOptions = function (fromJson, toJson) {\n /* tslint:disable:no-any */\n var result = {};\n this.applyProperties(fromJson, result);\n this.applyProperties(toJson, result);\n return result;\n };\n /* tslint:disable:no-any */\n Workbook.prototype.applyProperties = function (sourceJson, destJson) {\n var keys = Object.keys(sourceJson);\n for (var index = 0; index < keys.length; index++) {\n if (keys[index] !== 'name') {\n destJson[keys[index]] = sourceJson[keys[index]];\n }\n }\n };\n Workbook.prototype.getCellName = function (row, column) {\n return this.getColumnName(column) + row.toString();\n };\n Workbook.prototype.getColumnName = function (col) {\n col--;\n var strColumnName = '';\n do {\n var iCurrentDigit = col % 26;\n col = col / 26 - 1;\n strColumnName = String.fromCharCode(65 + iCurrentDigit) + strColumnName;\n } while (col >= 0);\n return strColumnName;\n };\n /* tslint:disable:no-any */\n Workbook.prototype.parserPrintTitle = function (json, sheet) {\n var printTitleName = '';\n var titleRowName;\n if (json.fromRow !== null && json.fromRow !== undefined) {\n var fromRow = json.fromRow;\n var toRow = void 0;\n if (json.toRow !== null && json.toRow !== undefined) {\n toRow = json.toRow;\n }\n else {\n toRow = json.fromRow;\n }\n titleRowName = '$' + fromRow + ':$' + toRow;\n }\n var titleColName;\n if (json.fromColumn !== null && json.fromColumn !== undefined) {\n var fromColumn = json.fromColumn;\n var toColumn = void 0;\n if (json.toColumn !== null && json.toColumn !== undefined) {\n toColumn = json.toColumn;\n }\n else {\n toColumn = json.fromColumn;\n }\n titleColName = '$' + this.getColumnName(fromColumn) + ':$' + this.getColumnName(toColumn);\n }\n if (titleRowName !== undefined) {\n printTitleName += (sheet.name + '!' + titleRowName);\n }\n if (titleColName !== undefined && titleRowName !== undefined) {\n printTitleName += ',' + (sheet.name + '!' + titleColName);\n }\n else if (titleColName !== undefined) {\n printTitleName += (sheet.name + '!' + titleColName);\n }\n if (printTitleName !== '') {\n this.printTitles.set(sheet.index - 1, printTitleName);\n }\n };\n /* tslint:disable:no-any */\n Workbook.prototype.parserFreezePanes = function (json, sheet) {\n sheet.freezePanes = new FreezePane();\n if (json.row !== null && json.row !== undefined) {\n sheet.freezePanes.row = json.row;\n }\n else {\n sheet.freezePanes.row = 0;\n }\n if (json.column !== null && json.column !== undefined) {\n sheet.freezePanes.column = json.column;\n }\n else {\n sheet.freezePanes.column = 0;\n }\n sheet.freezePanes.leftCell = this.getCellName(sheet.freezePanes.row + 1, sheet.freezePanes.column + 1);\n };\n /* tslint:disable:no-any */\n Workbook.prototype.parserColumns = function (json, sheet) {\n var columnsLength = json.length;\n sheet.columns = [];\n for (var column = 0; column < columnsLength; column++) {\n var col = new Column();\n if (json[column].index !== null && json[column].index !== undefined) {\n col.index = json[column].index;\n }\n else {\n throw Error('Column index is missing.');\n }\n if (json[column].width !== null && json[column].width !== undefined) {\n col.width = json[column].width;\n }\n sheet.columns.push(col);\n }\n };\n /* tslint:disable:no-any */\n Workbook.prototype.parserRows = function (json, sheet) {\n var rowsLength = json.length;\n sheet.rows = new Rows();\n var rowId = 0;\n for (var r = 0; r < rowsLength; r++) {\n var row = this.parserRow(json[r], rowId);\n rowId = row.index;\n sheet.rows.add(row);\n }\n this.insertMergedCellsStyle(sheet);\n };\n Workbook.prototype.insertMergedCellsStyle = function (sheet) {\n var _this = this;\n if (this.mergeCells.length > 0) {\n this.mergedCellsStyle.forEach(function (value, key) {\n var row = sheet.rows.filter(function (item) {\n return item.index === value.y;\n })[0];\n if (!isNullOrUndefined(row)) {\n var cell = row.cells.filter(function (item) {\n return item.index === value.x;\n })[0];\n if (!isNullOrUndefined(cell)) {\n cell.styleIndex = value.styleIndex;\n }\n else {\n var cells = row.cells.filter(function (item) {\n return item.index <= value.x;\n });\n var insertIndex = 0;\n if (cells.length > 0) {\n insertIndex = row.cells.indexOf(cells[cells.length - 1]) + 1;\n }\n row.cells.splice(insertIndex, 0, _this.createCell(value, key));\n }\n }\n else {\n var rows = sheet.rows.filter(function (item) {\n return item.index <= value.y;\n });\n var rowToInsert = new Row();\n rowToInsert.index = value.y;\n rowToInsert.cells = new Cells();\n rowToInsert.cells.add(_this.createCell(value, key));\n var insertIndex = 0;\n if (rows.length > 0) {\n insertIndex = sheet.rows.indexOf(rows[rows.length - 1]) + 1;\n }\n sheet.rows.splice(insertIndex, 0, rowToInsert);\n }\n });\n }\n };\n Workbook.prototype.createCell = function (value, key) {\n var cellToInsert = new Cell();\n cellToInsert.refName = key;\n cellToInsert.index = value.x;\n cellToInsert.cellStyle = new CellStyle();\n cellToInsert.styleIndex = value.styleIndex;\n return cellToInsert;\n };\n /* tslint:disable:no-any */\n Workbook.prototype.parserRow = function (json, rowIndex) {\n var row = new Row();\n //Row Height\n if (json.height !== null && json.height !== undefined) {\n row.height = json.height;\n }\n //Row index\n if (json.index !== null && json.index !== undefined) {\n row.index = json.index;\n }\n else {\n throw Error('Row index is missing.');\n }\n if (json.grouping !== null && json.grouping !== undefined) {\n this.parseGrouping(json.grouping, row);\n }\n this.parseCells(json.cells, row);\n return row;\n };\n /* tslint:disable:no-any */\n Workbook.prototype.parseGrouping = function (json, row) {\n row.grouping = new Grouping();\n if (json.outlineLevel !== undefined) {\n row.grouping.outlineLevel = json.outlineLevel;\n }\n if (json.isCollapsed !== undefined) {\n row.grouping.isCollapsed = json.isCollapsed;\n }\n if (json.isHidden !== undefined) {\n row.grouping.isHidden = json.isHidden;\n }\n };\n /* tslint:disable:no-any */\n Workbook.prototype.parseCells = function (json, row) {\n row.cells = new Cells();\n var cellsLength = json !== undefined ? json.length : 0;\n var spanMin = 1;\n var spanMax = 1;\n var curCellIndex = 0;\n for (var cellId = 0; cellId < cellsLength; cellId++) {\n /* tslint:disable:no-any */\n var jsonCell = json[cellId];\n var cell = new Cell();\n //cell index\n if (jsonCell.index !== null && jsonCell.index !== undefined) {\n cell.index = jsonCell.index;\n }\n else {\n throw Error('Cell index is missing.');\n }\n if (cell.index < spanMin) {\n spanMin = cell.index;\n }\n else if (cell.index > spanMax) {\n spanMax = cell.index;\n }\n //Update the Cell name\n cell.refName = this.getCellName(row.index, cell.index);\n //Row span\n if (jsonCell.rowSpan !== null && jsonCell.rowSpan !== undefined) {\n cell.rowSpan = jsonCell.rowSpan - 1;\n }\n else {\n cell.rowSpan = 0;\n }\n //Column span\n if (jsonCell.colSpan !== null && jsonCell.colSpan !== undefined) {\n cell.colSpan = jsonCell.colSpan - 1;\n }\n else {\n cell.colSpan = 0;\n }\n //Hyperlink\n if (jsonCell.hyperlink !== null && jsonCell.hyperlink !== undefined) {\n var hyperLink = new HyperLink();\n if (jsonCell.hyperlink.target !== undefined) {\n hyperLink.target = jsonCell.hyperlink.target;\n if (jsonCell.hyperlink.displayText !== undefined) {\n cell.value = jsonCell.hyperlink.displayText;\n }\n else {\n cell.value = jsonCell.hyperlink.target;\n }\n cell.type = this.getCellValueType(cell.value);\n hyperLink.ref = cell.refName;\n hyperLink.rId = (this.mHyperLinks.length + 1);\n this.mHyperLinks.push(hyperLink);\n cell.cellStyle = new CellStyle();\n /* tslint:disable-next-line:max-line-length */\n this.parserCellStyle((jsonCell.style !== undefined ? this.mergeOptions(jsonCell.style, this.hyperlinkStyle) : this.hyperlinkStyle), cell.cellStyle, 'string');\n cell.styleIndex = cell.cellStyle.index;\n }\n }\n // formulas\n if (jsonCell.formula !== null && jsonCell.formula !== undefined) {\n cell.formula = jsonCell.formula;\n cell.type = 'formula';\n }\n //Cell value\n if (jsonCell.value !== null && jsonCell.value !== undefined) {\n if (cell.formula !== undefined) {\n cell.value = 0;\n }\n else {\n cell.value = jsonCell.value;\n cell.type = this.getCellValueType(cell.value);\n }\n }\n if (jsonCell.style !== null && jsonCell.style !== undefined && cell.styleIndex === undefined) {\n cell.cellStyle = new CellStyle();\n if (cell.value instanceof Date) {\n this.parserCellStyle(jsonCell.style, cell.cellStyle, cell.type, 14);\n }\n else {\n this.parserCellStyle(jsonCell.style, cell.cellStyle, cell.type);\n }\n cell.styleIndex = cell.cellStyle.index;\n }\n else if (cell.value instanceof Date) {\n cell.cellStyle = new CellStyle();\n this.parserCellStyle({}, cell.cellStyle, cell.type, 14);\n cell.styleIndex = cell.cellStyle.index;\n }\n this.parseCellType(cell);\n this.mergeCells = this.processMergeCells(cell, row.index, this.mergeCells);\n row.cells.add(cell);\n curCellIndex = (cell.index + 1);\n }\n row.spans = (spanMin) + ':' + (spanMax);\n };\n Workbook.prototype.GetColors = function () {\n var colors;\n colors = new Map();\n /* tslint:disable */\n colors.set('WHITE', 'FFFFFFFF');\n /* tslint:disable */\n colors.set('SILVER', 'FFC0C0C0');\n /* tslint:disable */\n colors.set('GRAY', 'FF808080');\n /* tslint:disable */\n colors.set('BLACK', 'FF000000');\n /* tslint:disable */\n colors.set('RED', 'FFFF0000');\n /* tslint:disable */\n colors.set('MAROON', 'FF800000');\n /* tslint:disable */\n colors.set('YELLOW', 'FFFFFF00');\n /* tslint:disable */\n colors.set('OLIVE', 'FF808000');\n /* tslint:disable */\n colors.set('LIME', 'FF00FF00');\n /* tslint:disable */\n colors.set('GREEN', 'FF008000');\n /* tslint:disable */\n colors.set('AQUA', 'FF00FFFF');\n /* tslint:disable */\n colors.set('TEAL', 'FF008080');\n /* tslint:disable */\n colors.set('BLUE', 'FF0000FF');\n /* tslint:disable */\n colors.set('NAVY', 'FF000080');\n /* tslint:disable */\n colors.set('FUCHSIA', 'FFFF00FF');\n /* tslint:disable */\n colors.set('PURPLE', 'FF800080');\n return colors;\n };\n Workbook.prototype.processColor = function (colorVal) {\n if (colorVal.indexOf('#') === 0) {\n return colorVal.replace('#', 'FF');\n }\n colorVal = colorVal.toUpperCase();\n this.rgbColors = this.GetColors();\n if (this.rgbColors.has(colorVal)) {\n colorVal = this.rgbColors.get(colorVal);\n }\n else {\n colorVal = 'FF000000';\n }\n return colorVal;\n };\n Workbook.prototype.processCellValue = function (value, cell) {\n var cellValue = value;\n if (value.indexOf(\"\") !== -1 ||\n value.indexOf(\"\") !== -1 || value.indexOf(\"\") !== -1) {\n var processedVal = '';\n var startindex = value.indexOf('<', 0);\n var endIndex = value.indexOf('>', startindex + 1);\n if (startindex >= 0 && endIndex >= 0) {\n if (startindex !== 0) {\n processedVal += '' + this.processString(value.substring(0, startindex)) + '';\n }\n while (startindex >= 0 && endIndex >= 0) {\n endIndex = value.indexOf('>', startindex + 1);\n if (endIndex >= 0) {\n var subString = value.substring(startindex + 1, endIndex);\n startindex = value.indexOf('<', endIndex + 1);\n if (startindex < 0) {\n startindex = cellValue.length;\n }\n var text = cellValue.substring(endIndex + 1, startindex);\n if (text.length !== 0) {\n var subSplit = subString.split(' ');\n if (subSplit.length > 0) {\n processedVal += '';\n }\n if (subSplit.length > 1) {\n for (var _i = 0, subSplit_1 = subSplit; _i < subSplit_1.length; _i++) {\n var element = subSplit_1[_i];\n var start = element.trim().substring(0, 5);\n switch (start) {\n case 'size=':\n processedVal += '';\n break;\n case 'face=':\n processedVal += '';\n break;\n case 'color':\n processedVal += '';\n break;\n case 'href=':\n var hyperLink = new HyperLink();\n hyperLink.target = element.substring(6, element.length - 1).trim();\n hyperLink.ref = cell.refName;\n hyperLink.rId = (this.mHyperLinks.length + 1);\n this.mHyperLinks.push(hyperLink);\n processedVal += '';\n break;\n }\n }\n }\n else if (subSplit.length === 1) {\n var style = subSplit[0].trim();\n switch (style) {\n case 'b':\n processedVal += '';\n break;\n case 'i':\n processedVal += '';\n break;\n case 'u':\n processedVal += '';\n break;\n }\n }\n processedVal += '' + this.processString(text) + '';\n }\n }\n }\n if (processedVal === '') {\n return cellValue;\n }\n return processedVal;\n }\n else {\n return cellValue;\n }\n }\n else {\n return cellValue;\n }\n };\n Workbook.prototype.applyGlobalStyle = function (json, cellStyle) {\n var index = 0;\n if (this.cellStyles.has(json.name)) {\n cellStyle.index = this.mStyles.filter(function (a) { return (a.name === json.name); })[0].index;\n cellStyle.name = json.name;\n }\n };\n /* tslint:disable:no-any */\n Workbook.prototype.parserCellStyle = function (json, cellStyle, cellType, defStyleIndex) {\n //name\n if (json.name !== null && json.name !== undefined) {\n if (cellStyle.isGlobalStyle) {\n cellStyle.name = json.name;\n }\n else {\n this.applyGlobalStyle(json, cellStyle);\n return;\n }\n }\n //background color\n if (json.backColor !== null && json.backColor !== undefined) {\n cellStyle.backColor = json.backColor;\n }\n //borders\n //leftBorder\n cellStyle.borders = new Borders();\n //AllBorder\n if (json.borders !== null && json.borders !== undefined) {\n this.parserBorder(json.borders, cellStyle.borders.all);\n }\n //leftborder\n if (json.leftBorder !== null && json.leftBorder !== undefined) {\n this.parserBorder(json.leftBorder, cellStyle.borders.left);\n }\n //rightBorder\n if (json.rightBorder !== null && json.rightBorder !== undefined) {\n this.parserBorder(json.rightBorder, cellStyle.borders.right);\n }\n //topBorder\n if (json.topBorder !== null && json.topBorder !== undefined) {\n this.parserBorder(json.topBorder, cellStyle.borders.top);\n }\n //bottomBorder\n if (json.bottomBorder !== null && json.bottomBorder !== undefined) {\n this.parserBorder(json.bottomBorder, cellStyle.borders.bottom);\n }\n //fontName\n if (json.fontName !== null && json.fontName !== undefined) {\n cellStyle.fontName = json.fontName;\n }\n //fontSize\n if (json.fontSize !== null && json.fontSize !== undefined) {\n cellStyle.fontSize = json.fontSize;\n }\n //fontColor\n if (json.fontColor !== null && json.fontColor !== undefined) {\n cellStyle.fontColor = json.fontColor;\n }\n //italic\n if (json.italic !== null && json.italic !== undefined) {\n cellStyle.italic = json.italic;\n }\n //bold\n if (json.bold !== null && json.bold !== undefined) {\n cellStyle.bold = json.bold;\n }\n //hAlign\n if (json.hAlign !== null && json.hAlign !== undefined) {\n cellStyle.hAlign = json.hAlign.toLowerCase();\n }\n //indent\n if (json.indent !== null && json.indent !== undefined) {\n cellStyle.indent = json.indent;\n if (!(cellStyle.hAlign === 'left' || cellStyle.hAlign === 'right')) {\n cellStyle.hAlign = 'left';\n }\n }\n if (json.rotation !== null && json.rotation !== undefined) {\n cellStyle.rotation = json.rotation;\n }\n //vAlign\n if (json.vAlign !== null && json.vAlign !== undefined) {\n cellStyle.vAlign = json.vAlign.toLowerCase();\n }\n //underline\n if (json.underline !== null && json.underline !== undefined) {\n cellStyle.underline = json.underline;\n }\n //strikeThrough\n if (json.strikeThrough !== null && json.strikeThrough !== undefined) {\n cellStyle.strikeThrough = json.strikeThrough;\n }\n //wrapText\n if (json.wrapText !== null && json.wrapText !== undefined) {\n cellStyle.wrapText = json.wrapText;\n }\n //numberFormat\n if (json.numberFormat !== null && json.numberFormat !== undefined) {\n if (json.type !== null && json.type !== undefined) {\n cellStyle.numberFormat = this.getNumberFormat(json.numberFormat, json.type);\n }\n else {\n cellStyle.numberFormat = this.getNumberFormat(json.numberFormat, cellType);\n }\n }\n else if (defStyleIndex !== undefined) {\n cellStyle.numFmtId = 14;\n cellStyle.numberFormat = 'GENERAL';\n }\n else {\n cellStyle.numberFormat = 'GENERAL';\n }\n cellStyle.index = this.processCellStyle(cellStyle);\n };\n Workbook.prototype.switchNumberFormat = function (numberFormat, type) {\n var format = this.getNumberFormat(numberFormat, type);\n if (format !== numberFormat) {\n var numFmt = this.mNumFmt.get(numberFormat);\n if (numFmt !== undefined) {\n numFmt.formatCode = format;\n if (this.mNumFmt.has(format)) {\n for (var _i = 0, _a = this.mCellStyleXfs; _i < _a.length; _i++) {\n var cellStyleXfs = _a[_i];\n if (cellStyleXfs.numFmtId === numFmt.numFmtId) {\n cellStyleXfs.numFmtId = this.mNumFmt.get(format).numFmtId;\n }\n }\n for (var _b = 0, _c = this.mCellXfs; _b < _c.length; _b++) {\n var cellXfs = _c[_b];\n if (cellXfs.numFmtId === numFmt.numFmtId) {\n cellXfs.numFmtId = this.mNumFmt.get(format).numFmtId;\n }\n }\n }\n }\n }\n };\n Workbook.prototype.changeNumberFormats = function (value) {\n if (typeof value == \"string\") {\n var regex = new RegExp(this.currency, 'g');\n value = value.replace(regex, '[$' + this.currency + ']');\n }\n else if (typeof value == \"object\") {\n for (var i = 0; i < value.length; i++) {\n value[i] = value[i].replace(this.currency, '[$' + this.currency + ']');\n }\n }\n return value;\n };\n Workbook.prototype.getNumberFormat = function (numberFormat, type) {\n var returnFormat;\n switch (type) {\n case 'number':\n try {\n returnFormat = this.intl.getNumberPattern({ format: numberFormat, currency: this.currency, useGrouping: true }, true);\n if (this.currency.length > 1) {\n returnFormat = this.changeNumberFormats(returnFormat);\n }\n }\n catch (error) {\n returnFormat = numberFormat;\n }\n break;\n case 'datetime':\n try {\n returnFormat = this.intl.getDatePattern({ skeleton: numberFormat, type: 'dateTime' }, true);\n }\n catch (error) {\n try {\n returnFormat = this.intl.getDatePattern({ format: numberFormat, type: 'dateTime' }, true);\n }\n catch (error) {\n returnFormat = numberFormat;\n }\n }\n break;\n case 'date':\n try {\n returnFormat = this.intl.getDatePattern({ skeleton: numberFormat, type: 'date' }, true);\n }\n catch (error) {\n try {\n returnFormat = this.intl.getDatePattern({ format: numberFormat, type: 'date' }, true);\n }\n catch (error) {\n returnFormat = numberFormat;\n }\n }\n break;\n case 'time':\n try {\n returnFormat = this.intl.getDatePattern({ skeleton: numberFormat, type: 'time' }, true);\n }\n catch (error) {\n try {\n returnFormat = this.intl.getDatePattern({ format: numberFormat, type: 'time' }, true);\n }\n catch (error) {\n returnFormat = numberFormat;\n }\n }\n break;\n default:\n returnFormat = numberFormat;\n break;\n }\n return returnFormat;\n };\n /* tslint:disable:no-any */\n Workbook.prototype.parserBorder = function (json, border) {\n if (json.color !== null && json.color !== undefined) {\n border.color = json.color;\n }\n else {\n border.color = '#000000';\n }\n if (json.lineStyle !== null && json.lineStyle !== undefined) {\n border.lineStyle = json.lineStyle;\n }\n else {\n border.lineStyle = 'thin';\n }\n };\n Workbook.prototype.processCellStyle = function (style) {\n if (style.isGlobalStyle) {\n this.processNumFormatId(style);\n this.mStyles.push(style);\n return this.mStyles.length;\n }\n else {\n var compareResult = this.compareStyle(style);\n if (!compareResult.result) {\n this.processNumFormatId(style);\n this.mStyles.push(style);\n return this.mStyles.length;\n }\n else {\n //Return the index of the already existing style.\n return compareResult.index;\n }\n }\n };\n Workbook.prototype.processNumFormatId = function (style) {\n if (style.numberFormat !== 'GENERAL' && !this.mNumFmt.has(style.numberFormat)) {\n var id = this.mNumFmt.size + 164;\n this.mNumFmt.set(style.numberFormat, new NumFmt(id, style.numberFormat));\n }\n };\n Workbook.prototype.isNewFont = function (toCompareStyle) {\n var result = false;\n var index = 0;\n for (var _i = 0, _a = this.mFonts; _i < _a.length; _i++) {\n var font = _a[_i];\n index++;\n var fontColor = undefined;\n if (toCompareStyle.fontColor !== undefined) {\n fontColor = ('FF' + toCompareStyle.fontColor.replace('#', ''));\n }\n result = font.color === fontColor &&\n font.b === toCompareStyle.bold &&\n font.i === toCompareStyle.italic &&\n font.u === toCompareStyle.underline &&\n font.strike === toCompareStyle.strikeThrough &&\n font.name === toCompareStyle.fontName &&\n font.sz === toCompareStyle.fontSize;\n if (result) {\n break;\n }\n }\n index = index - 1;\n return { index: index, result: result };\n };\n Workbook.prototype.isNewBorder = function (toCompareStyle) {\n var bStyle = new CellStyle();\n if (this.isAllBorder(toCompareStyle.borders)) {\n return (bStyle.borders.all.color === toCompareStyle.borders.all.color &&\n bStyle.borders.all.lineStyle === toCompareStyle.borders.all.lineStyle);\n }\n else {\n return (bStyle.borders.left.color === toCompareStyle.borders.left.color &&\n bStyle.borders.left.lineStyle === toCompareStyle.borders.left.lineStyle &&\n bStyle.borders.right.color === toCompareStyle.borders.right.color &&\n bStyle.borders.right.lineStyle === toCompareStyle.borders.right.lineStyle &&\n bStyle.borders.top.color === toCompareStyle.borders.top.color &&\n bStyle.borders.top.lineStyle === toCompareStyle.borders.top.lineStyle &&\n bStyle.borders.bottom.color === toCompareStyle.borders.bottom.color &&\n bStyle.borders.bottom.lineStyle === toCompareStyle.borders.bottom.lineStyle);\n }\n };\n Workbook.prototype.isAllBorder = function (toCompareBorder) {\n var allBorderStyle = new CellStyle();\n return allBorderStyle.borders.all.color !== toCompareBorder.all.color &&\n allBorderStyle.borders.all.lineStyle !== toCompareBorder.all.lineStyle;\n };\n Workbook.prototype.compareStyle = function (toCompareStyle) {\n var result = true;\n var index = 0;\n var globalStyleIndex = 0;\n for (var _i = 0, _a = this.mStyles; _i < _a.length; _i++) {\n var baseStyle = _a[_i];\n result = baseStyle.isGlobalStyle ? false : (baseStyle.backColor === toCompareStyle.backColor &&\n baseStyle.bold === toCompareStyle.bold &&\n baseStyle.numFmtId === toCompareStyle.numFmtId &&\n baseStyle.numberFormat === toCompareStyle.numberFormat &&\n baseStyle.type === toCompareStyle.type &&\n baseStyle.fontColor === toCompareStyle.fontColor &&\n baseStyle.fontName === toCompareStyle.fontName &&\n baseStyle.fontSize === toCompareStyle.fontSize &&\n baseStyle.hAlign === toCompareStyle.hAlign &&\n baseStyle.italic === toCompareStyle.italic &&\n baseStyle.underline === toCompareStyle.underline &&\n baseStyle.strikeThrough === toCompareStyle.strikeThrough &&\n baseStyle.vAlign === toCompareStyle.vAlign &&\n baseStyle.indent === toCompareStyle.indent &&\n baseStyle.rotation === toCompareStyle.rotation &&\n baseStyle.wrapText === toCompareStyle.wrapText &&\n (baseStyle.borders.all.color === toCompareStyle.borders.all.color &&\n baseStyle.borders.all.lineStyle === toCompareStyle.borders.all.lineStyle) &&\n (baseStyle.borders.left.color === toCompareStyle.borders.left.color &&\n baseStyle.borders.left.lineStyle === toCompareStyle.borders.left.lineStyle &&\n baseStyle.borders.right.color === toCompareStyle.borders.right.color &&\n baseStyle.borders.right.lineStyle === toCompareStyle.borders.right.lineStyle &&\n baseStyle.borders.top.color === toCompareStyle.borders.top.color &&\n baseStyle.borders.top.lineStyle === toCompareStyle.borders.top.lineStyle &&\n baseStyle.borders.bottom.color === toCompareStyle.borders.bottom.color &&\n baseStyle.borders.bottom.lineStyle === toCompareStyle.borders.bottom.lineStyle));\n if (result) {\n index = baseStyle.index;\n break;\n }\n }\n return { index: index, result: result };\n };\n Workbook.prototype.contains = function (array, item) {\n var index = array.indexOf(item);\n return index > -1 && index < array.length;\n };\n Workbook.prototype.getCellValueType = function (value) {\n if (value instanceof Date) {\n return 'datetime';\n }\n else if (typeof (value) === 'boolean') {\n return 'boolean';\n }\n else if (typeof (value) === 'number') {\n return 'number';\n }\n else {\n return 'string';\n }\n };\n Workbook.prototype.parseCellType = function (cell) {\n var type = cell.type;\n var saveType;\n var value = cell.value;\n switch (type) {\n case 'datetime':\n value = this.toOADate(value);\n if (cell.cellStyle !== undefined && cell.cellStyle.name !== undefined) {\n if (this.globalStyles.has(cell.cellStyle.name)) {\n var value_1 = this.globalStyles.get(cell.cellStyle.name);\n this.switchNumberFormat(value_1.format, value_1.type);\n }\n }\n saveType = 'n';\n break;\n //TODO: Update the number format index and style\n case 'boolean':\n value = value ? 1 : 0;\n saveType = 'b';\n break;\n case 'number':\n saveType = 'n';\n if (cell.cellStyle !== undefined && cell.cellStyle.name !== undefined) {\n if (this.globalStyles.has(cell.cellStyle.name)) {\n this.switchNumberFormat(this.globalStyles.get(cell.cellStyle.name).format, 'number');\n }\n }\n break;\n case 'string':\n this.sharedStringCount++;\n saveType = 's';\n var sstvalue = this.processCellValue(value, cell);\n if (!this.contains(this.sharedString, sstvalue)) {\n this.sharedString.push(sstvalue);\n }\n value = this.sharedString.indexOf(sstvalue);\n break;\n default:\n break;\n }\n cell.saveType = saveType;\n cell.value = value;\n };\n Workbook.prototype.parserImages = function (json, sheet) {\n var imagesLength = json.length;\n sheet.images = [];\n var imageId = 0;\n for (var p = 0; p < imagesLength; p++) {\n var image = this.parserImage(json[p]);\n sheet.images.push(image);\n }\n };\n Workbook.prototype.parseFilters = function (json, sheet) {\n sheet.autoFilters = new AutoFilters();\n if (json.row !== null && json.row !== undefined)\n sheet.autoFilters.row = json.row;\n else\n throw new Error('Argument Null Exception: row null or empty');\n if (json.lastRow !== null && json.lastRow !== undefined)\n sheet.autoFilters.lastRow = json.lastRow;\n else\n throw new Error('Argument Null Exception: lastRow cannot be null or empty');\n if (json.column !== null && json.column !== undefined)\n sheet.autoFilters.column = json.column;\n else\n throw new Error('Argument Null Exception: column cannot be null or empty');\n if (json.lastColumn !== null && json.row !== undefined)\n sheet.autoFilters.lastColumn = json.lastColumn;\n else\n throw new Error('Argument Null Exception: lastColumn cannot be null or empty');\n };\n Workbook.prototype.parserImage = function (json) {\n var image = new Image();\n if (json.image !== null && json.image !== undefined) {\n image.image = json.image;\n }\n if (json.row !== null && json.row !== undefined) {\n image.row = json.row;\n }\n if (json.column !== null && json.column !== undefined) {\n image.column = json.column;\n }\n if (json.lastRow !== null && json.lastRow !== undefined) {\n image.lastRow = json.lastRow;\n }\n if (json.lastColumn !== null && json.lastColumn !== undefined) {\n image.lastColumn = json.lastColumn;\n }\n if (json.width !== null && json.width !== undefined) {\n image.width = json.width;\n }\n if (json.height !== null && json.height !== undefined) {\n image.height = json.height;\n }\n if (json.horizontalFlip !== null && json.horizontalFlip !== undefined) {\n image.horizontalFlip = json.horizontalFlip;\n }\n if (json.verticalFlip !== null && json.verticalFlip !== undefined) {\n image.verticalFlip = json.verticalFlip;\n }\n if (json.rotation !== null && json.rotation !== undefined) {\n image.rotation = json.rotation;\n }\n return image;\n };\n /**\n * Returns a Promise with a Blob based on the specified BlobSaveType and optional encoding.\n * @param {BlobSaveType} blobSaveType - A string indicating the type of Blob to generate ('text/csv' or other).\n * @param {string} [encodingType] - The supported encoding types are \"ansi\", \"unicode\" and \"utf8\".\n */\n /* tslint:disable:no-any */\n Workbook.prototype.saveAsBlob = function (blobSaveType, encodingType) {\n var _this = this;\n switch (blobSaveType) {\n case 'text/csv':\n return new Promise(function (resolve, reject) {\n var obj = {};\n obj.blobData = _this.csvHelper.saveAsBlob(encodingType);\n resolve(obj);\n });\n default:\n return new Promise(function (resolve, reject) {\n _this.saveInternal();\n _this.mArchive.saveAsBlob().then(function (blob) {\n var obj = {};\n obj.blobData = new Blob([blob], { type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' });\n resolve(obj);\n });\n });\n }\n };\n Workbook.prototype.save = function (fileName, proxyUrl) {\n var _this = this;\n if (fileName === null || fileName === undefined || fileName === '') {\n throw new Error('Argument Null Exception: fileName cannot be null or empty');\n }\n var xlsxMatch = fileName.match('.xlsx$');\n var csvMatch = fileName.match('.csv$');\n if (xlsxMatch !== null && xlsxMatch[0] === ('.' + this.mSaveType)) {\n this.saveInternal();\n this.mArchive.save(fileName).then(function () {\n _this.mArchive.destroy();\n });\n }\n else if (csvMatch !== null && csvMatch[0] === ('.' + this.mSaveType)) {\n this.csvHelper.save(fileName);\n }\n else {\n throw Error('Save type and file extension is different.');\n }\n };\n Workbook.prototype.saveInternal = function () {\n this.saveWorkbook();\n this.saveWorksheets();\n this.saveSharedString();\n this.saveStyles();\n this.saveApp(this.builtInProperties);\n this.saveCore(this.builtInProperties);\n this.saveContentType();\n this.saveTopLevelRelation();\n this.saveWorkbookRelation();\n };\n Workbook.prototype.saveWorkbook = function () {\n /* tslint:disable-next-line:max-line-length */\n var workbookTemp = '';\n var sheets = '';\n var length = this.worksheets.length;\n for (var i = 0; i < length; i++) {\n /* tslint:disable-next-line:max-line-length */\n var sheetName = this.worksheets[i].name;\n sheetName = sheetName.replace(\"&\", \"&\");\n sheetName = sheetName.replace(\"<\", \"<\");\n sheetName = sheetName.replace(\">\", \">\");\n sheetName = sheetName.replace(\"\\\"\", \""\");\n sheets += '';\n }\n sheets += '';\n workbookTemp += sheets;\n if (this.printTitles.size > 0) {\n var printTitle_1 = '';\n this.printTitles.forEach(function (value, key) {\n printTitle_1 += '' + value + '';\n });\n printTitle_1 += '';\n workbookTemp += printTitle_1;\n }\n this.addToArchive(workbookTemp + '', 'xl/workbook.xml');\n };\n Workbook.prototype.saveWorksheets = function () {\n var length = this.worksheets.length;\n for (var i = 0; i < length; i++) {\n this.saveWorksheet(this.worksheets[i], i);\n }\n };\n Workbook.prototype.saveWorksheet = function (sheet, index) {\n var sheetBlob = new BlobHelper();\n /* tslint:disable-next-line:max-line-length */\n var sheetString = '';\n if (!sheet.isSummaryRowBelow) {\n sheetString += ('' + '' + '' + '');\n }\n else {\n sheetString += ('');\n }\n sheetString += this.saveSheetView(sheet);\n if (sheet.columns !== undefined) {\n var colString = '';\n for (var _i = 0, _a = sheet.columns; _i < _a.length; _i++) {\n var column = _a[_i];\n /* tslint:disable-next-line:max-line-length */\n if (column.width !== undefined) {\n colString += '';\n }\n else {\n colString += '';\n }\n }\n sheetString += (colString + '');\n }\n sheetString += ('');\n sheetBlob.append(sheetString);\n sheetString = '';\n if (sheet.rows !== undefined) {\n for (var _b = 0, _c = sheet.rows; _b < _c.length; _b++) {\n var row = _c[_b];\n var rowString = '');\n for (var _d = 0, _e = row.cells; _d < _e.length; _d++) {\n var cell = _e[_d];\n if (cell !== undefined && (cell.value !== undefined || cell.cellStyle !== undefined)) {\n rowString += ('');\n if (cell.formula !== undefined) {\n rowString += ('' + cell.formula + '');\n }\n if (cell.value !== undefined) {\n rowString += ('' + cell.value + '');\n }\n else {\n rowString += ('');\n }\n }\n }\n rowString += ('');\n sheetBlob.append(rowString);\n }\n }\n sheetString += ('');\n /* tslint:disable-next-line:max-line-length */\n if (sheet.autoFilters !== null && sheet.autoFilters !== undefined)\n sheetString += ('');\n if (sheet.mergeCells.length > 0) {\n sheetString += ('');\n for (var _f = 0, _g = sheet.mergeCells; _f < _g.length; _f++) {\n var mCell = _g[_f];\n sheetString += ('');\n }\n sheetString += ('');\n }\n if (sheet.hyperLinks.length > 0) {\n sheetString += ('');\n for (var _h = 0, _j = sheet.hyperLinks; _h < _j.length; _h++) {\n var hLink = _j[_h];\n sheetString += ('');\n }\n sheetString += ('');\n }\n /* tslint:disable-next-line:max-line-length */\n sheetString += ('');\n if (sheet.images != undefined && sheet.images.length > 0) {\n this.drawingCount++;\n this.saveDrawings(sheet, sheet.index);\n sheetString += '';\n }\n this.addToArchive(this.saveSheetRelations(sheet), ('xl/worksheets/_rels/sheet' + sheet.index + '.xml.rels'));\n sheetBlob.append(sheetString + '');\n this.addToArchive(sheetBlob.getBlob(), 'xl/worksheets' + '/sheet' + (index + 1) + '.xml');\n };\n Workbook.prototype.saveDrawings = function (sheet, index) {\n var drawings = new BlobHelper();\n /* tslint:disable-next-line:max-line-length */\n var sheetDrawingString = '';\n if (sheet.images !== undefined) {\n var imgId = 0;\n for (var _i = 0, _a = sheet.images; _i < _a.length; _i++) {\n var pic = _a[_i];\n if (pic.height !== undefined && pic.width !== undefined) {\n this.updatelastRowOffset(sheet, pic);\n this.updatelastColumnOffSet(sheet, pic);\n pic.lastRow -= 1;\n pic.lastColumn -= 1;\n }\n else if (pic.lastRow !== undefined && pic.lastColumn !== undefined) {\n pic.lastRowOffset = 0;\n pic.lastColOffset = 0;\n }\n imgId++;\n sheetDrawingString += '';\n sheetDrawingString += '';\n //col\n sheetDrawingString += pic.column - 1;\n sheetDrawingString += '';\n //colOff\n sheetDrawingString += 0;\n sheetDrawingString += '';\n //row\n sheetDrawingString += pic.row - 1;\n sheetDrawingString += '';\n //rowOff\n sheetDrawingString += 0;\n sheetDrawingString += '';\n sheetDrawingString += '';\n //col\n sheetDrawingString += pic.lastColumn;\n sheetDrawingString += '';\n //colOff\n sheetDrawingString += pic.lastColOffset;\n sheetDrawingString += '';\n //row\n sheetDrawingString += pic.lastRow;\n sheetDrawingString += '';\n //rowOff\n sheetDrawingString += pic.lastRowOffset;\n sheetDrawingString += '';\n sheetDrawingString += '';\n sheetDrawingString += '';\n sheetDrawingString += ' ';\n sheetDrawingString += ' ';\n sheetDrawingString += '';\n /* tslint:disable-next-line:max-line-length */\n sheetDrawingString += '';\n sheetDrawingString += '';\n sheetDrawingString += '';\n sheetDrawingString += '= -3600) {\n sheetDrawingString += ' rot=\"' + (pic.rotation * 60000) + '\"';\n }\n if (pic.verticalFlip != undefined && pic.verticalFlip != false) {\n sheetDrawingString += ' flipV=\"1\"';\n }\n if (pic.horizontalFlip != undefined && pic.horizontalFlip != false) {\n sheetDrawingString += ' flipH=\"1\"';\n }\n sheetDrawingString += '/>';\n sheetDrawingString += '';\n sheetDrawingString += '';\n var imageFile = new BlobHelper();\n var imageData = this.convertBase64toImage(pic.image);\n this.imageCount += 1;\n this.addToArchive(imageData, 'xl/media/image' + this.imageCount + '.png');\n }\n drawings.append(sheetDrawingString);\n drawings.append('');\n this.saveDrawingRelations(sheet);\n this.addToArchive(drawings.getBlob(), 'xl/drawings/drawing' + this.drawingCount + '.xml');\n }\n };\n Workbook.prototype.updatelastRowOffset = function (sheet, picture) {\n var iCurHeight = picture.height;\n var iCurRow = picture.row;\n var iCurOffset = 0;\n while (iCurHeight >= 0) {\n var iRowHeight = 0;\n if (sheet.rows !== undefined && sheet.rows[iCurRow - 1] !== undefined)\n iRowHeight = this.convertToPixels(sheet.rows[iCurRow - 1].height === undefined ? 15 : sheet.rows[iCurRow - 1].height);\n else\n iRowHeight = this.convertToPixels(15);\n var iSpaceInCell = iRowHeight - (iCurOffset * iRowHeight / 256);\n if (iSpaceInCell > iCurHeight) {\n picture.lastRow = iCurRow;\n picture.lastRowOffset = iCurOffset + (iCurHeight * 256 / iRowHeight);\n var rowHiddenHeight = 0;\n if (sheet.rows !== undefined && sheet.rows[iCurRow - 1] !== undefined)\n rowHiddenHeight = this.convertToPixels(sheet.rows[iCurRow - 1].height === undefined ? 15 : sheet.rows[iCurRow - 1].height);\n else\n rowHiddenHeight = this.convertToPixels(15);\n picture.lastRowOffset = (rowHiddenHeight * picture.lastRowOffset) / 256;\n picture.lastRowOffset = Math.round(picture.lastRowOffset / this.unitsProportions[7]);\n break;\n }\n else {\n iCurHeight -= iSpaceInCell;\n iCurRow++;\n iCurOffset = 0;\n }\n }\n };\n Workbook.prototype.updatelastColumnOffSet = function (sheet, picture) {\n var iCurWidth = picture.width;\n var iCurCol = picture.column;\n var iCurOffset = 0;\n while (iCurWidth >= 0) {\n var iColWidth = 0;\n if (sheet.columns !== undefined && sheet.columns[iCurCol - 1] !== undefined)\n iColWidth = this.ColumnWidthToPixels(sheet.columns[iCurCol - 1].width === undefined ? 8.43 : sheet.columns[iCurCol - 1].width);\n else\n iColWidth = this.ColumnWidthToPixels(8.43);\n var iSpaceInCell = iColWidth - (iCurOffset * iColWidth / 1024);\n if (iSpaceInCell > iCurWidth) {\n picture.lastColumn = iCurCol;\n picture.lastColOffset = iCurOffset + (iCurWidth * 1024 / iColWidth);\n var colHiddenWidth = 0;\n if (sheet.columns !== undefined && sheet.columns[iCurCol - 1] !== undefined)\n colHiddenWidth = this.ColumnWidthToPixels(sheet.columns[iCurCol - 1].width === undefined ? 8.43 : sheet.columns[iCurCol - 1].width);\n else\n colHiddenWidth = this.ColumnWidthToPixels(8.43);\n picture.lastColOffset = (colHiddenWidth * picture.lastColOffset) / 1024;\n picture.lastColOffset = Math.round(picture.lastColOffset / this.unitsProportions[7]);\n break;\n }\n else {\n iCurWidth -= iSpaceInCell;\n iCurCol++;\n iCurOffset = 0;\n }\n }\n };\n Workbook.prototype.convertToPixels = function (value) {\n return value * this.unitsProportions[6];\n };\n Workbook.prototype.convertBase64toImage = function (img) {\n var byteStr = window.atob(img);\n var buffer = new ArrayBuffer(byteStr.length);\n var data = new Uint8Array(buffer);\n for (var i = 0; i < byteStr.length; i++) {\n data[i] = byteStr.charCodeAt(i);\n }\n var blob = new Blob([data], { type: 'image/png' });\n return blob;\n };\n Workbook.prototype.saveDrawingRelations = function (sheet) {\n /* tslint:disable-next-line:max-line-length */\n var drawingRelation = '';\n var length = sheet.images.length;\n var id = this.imageCount - sheet.images.length;\n for (var i = 1; i <= length; i++) {\n id++;\n /* tslint:disable-next-line:max-line-length */\n drawingRelation += '';\n }\n this.addToArchive((drawingRelation + ''), 'xl/drawings/_rels/drawing' + this.drawingCount + '.xml.rels');\n };\n Workbook.prototype.pixelsToColumnWidth = function (pixels) {\n var dDigitWidth = 7;\n var val = (pixels > dDigitWidth + 5) ?\n this.trunc((pixels - 5) / dDigitWidth * 100 + 0.5) / 100 :\n pixels / (dDigitWidth + 5);\n return (val > 1) ?\n ((val * dDigitWidth + 5) / dDigitWidth * 256.0) / 256.0 :\n (val * (dDigitWidth + 5) / dDigitWidth * 256.0) / 256.0;\n };\n Workbook.prototype.ColumnWidthToPixels = function (val) {\n var dDigitWidth = 7;\n var fileWidth = (val > 1) ?\n ((val * dDigitWidth + 5) / dDigitWidth * 256.0) / 256.0 :\n (val * (dDigitWidth + 5) / dDigitWidth * 256.0) / 256.0;\n return this.trunc(((256 * fileWidth + this.trunc(128 / dDigitWidth)) / 256) * dDigitWidth);\n };\n Workbook.prototype.trunc = function (x) {\n var n = x - x % 1;\n return n === 0 && (x < 0 || (x === 0 && (1 / x !== 1 / 0))) ? -0 : n;\n };\n Workbook.prototype.pixelsToRowHeight = function (pixels) {\n return (pixels * this.unitsProportions[5] / this.unitsProportions[6]);\n };\n Workbook.prototype.saveSheetRelations = function (sheet) {\n /* tslint:disable-next-line:max-line-length */\n var relStr = '';\n for (var _i = 0, _a = sheet.hyperLinks; _i < _a.length; _i++) {\n var hLink = _a[_i];\n /* tslint:disable-next-line:max-line-length */\n relStr += '';\n }\n if (sheet.images != undefined && sheet.images.length > 0) {\n /* tslint:disable-next-line:max-line-length */\n relStr += '';\n }\n relStr += '';\n return relStr;\n };\n Workbook.prototype.saveSheetView = function (sheet) {\n var paneString = ' 0) {\n /* tslint:disable-next-line:max-line-length */\n var sstStart = '';\n var si = '';\n for (var i = 0; i < length; i++) {\n if (this.sharedString[i].indexOf('') !== 0) {\n si += '';\n si += this.processString(this.sharedString[i]);\n si += '';\n }\n else {\n si += '';\n si += this.sharedString[i];\n si += '';\n }\n }\n si += '';\n this.addToArchive(sstStart + si, 'xl/sharedStrings.xml');\n }\n };\n Workbook.prototype.processString = function (value) {\n if (typeof value == \"string\") {\n if (value.indexOf('&') !== -1) {\n value = value.replace(/&/g, '&');\n }\n if (value.indexOf('<') !== -1) {\n value = value.replace(/') !== -1) {\n value = value.replace(/>/g, '>');\n }\n if (value.indexOf('\\v') !== -1) {\n value = value.replace(/\\v/g, '_x000B_');\n }\n }\n else if (typeof value == \"object\") {\n for (var i = 0; i < value.length; i++) {\n if (value[i].indexOf('&') !== -1) {\n value[i] = value[i].replace(/&/g, '&');\n }\n if (value[i].indexOf('<') !== -1) {\n value[i] = value[i].replace(/') !== -1) {\n value[i] = value[i].replace(/>/g, '>');\n }\n if (value[i].indexOf('\\v') !== -1) {\n value[i] = value[i].replace(/\\v/g, '_x000B_');\n }\n }\n }\n return value;\n };\n Workbook.prototype.saveStyles = function () {\n this.updateCellXfsStyleXfs();\n /* tslint:disable-next-line:max-line-length */\n var styleTemp = '';\n styleTemp += this.saveNumberFormats();\n styleTemp += this.saveFonts();\n styleTemp += this.saveFills();\n styleTemp += this.saveBorders();\n styleTemp += this.saveCellStyleXfs();\n styleTemp += this.saveCellXfs();\n styleTemp += this.saveCellStyles();\n this.addToArchive(styleTemp + '', 'xl/styles.xml');\n };\n Workbook.prototype.updateCellXfsStyleXfs = function () {\n for (var _i = 0, _a = this.mStyles; _i < _a.length; _i++) {\n var style = _a[_i];\n var cellXfs = undefined;\n if (style.isGlobalStyle) {\n cellXfs = new CellStyleXfs();\n cellXfs.xfId = (style.index - 1);\n }\n else {\n cellXfs = new CellXfs();\n cellXfs.xfId = 0;\n }\n //Add font\n var compareFontResult = this.isNewFont(style);\n if (!compareFontResult.result) {\n var font = new Font();\n font.b = style.bold;\n font.i = style.italic;\n font.name = style.fontName;\n font.sz = style.fontSize;\n font.u = style.underline;\n font.strike = style.strikeThrough;\n font.color = ('FF' + style.fontColor.replace('#', ''));\n this.mFonts.push(font);\n cellXfs.fontId = this.mFonts.length - 1;\n }\n else {\n cellXfs.fontId = compareFontResult.index;\n }\n //Add fill\n if (style.backColor !== 'none') {\n var backColor = 'FF' + style.backColor.replace('#', '');\n if (this.mFills.has(backColor)) {\n var fillId = this.mFills.get(backColor);\n cellXfs.fillId = fillId;\n }\n else {\n var fillId = this.mFills.size + 2;\n this.mFills.set(backColor, fillId);\n cellXfs.fillId = (fillId);\n }\n }\n else {\n cellXfs.fillId = 0;\n }\n //Add border \n if (!this.isNewBorder(style)) {\n this.mBorders.push(style.borders);\n cellXfs.borderId = this.mBorders.length;\n }\n else {\n cellXfs.borderId = 0;\n }\n //Add Number Format \n if (style.numberFormat !== 'GENERAL') {\n if (this.mNumFmt.has(style.numberFormat)) {\n var numFmt = this.mNumFmt.get(style.numberFormat);\n cellXfs.numFmtId = numFmt.numFmtId;\n }\n else {\n var id = this.mNumFmt.size + 164;\n this.mNumFmt.set(style.numberFormat, new NumFmt(id, style.numberFormat));\n cellXfs.numFmtId = id;\n }\n }\n else {\n if (style.numberFormat === 'GENERAL' && style.numFmtId === 14) {\n cellXfs.numFmtId = 14;\n }\n else {\n cellXfs.numFmtId = 0;\n }\n }\n //Add alignment \n if (!style.isGlobalStyle) {\n cellXfs.applyAlignment = 1;\n }\n cellXfs.alignment = new Alignment();\n cellXfs.alignment.indent = style.indent;\n cellXfs.alignment.horizontal = style.hAlign;\n cellXfs.alignment.vertical = style.vAlign;\n cellXfs.alignment.wrapText = style.wrapText ? 1 : 0;\n cellXfs.alignment.rotation = style.rotation;\n if (style.isGlobalStyle) {\n this.mCellStyleXfs.push(cellXfs);\n this.mCellXfs.push(cellXfs);\n }\n else {\n //Add cellxfs\n this.mCellXfs.push(cellXfs);\n }\n }\n };\n Workbook.prototype.saveNumberFormats = function () {\n if (this.mNumFmt.size >= 1) {\n var numFmtStyle_1 = '';\n this.mNumFmt.forEach(function (value, key) {\n numFmtStyle_1 += '';\n });\n return (numFmtStyle_1 += '');\n }\n else {\n return '';\n }\n };\n Workbook.prototype.saveFonts = function () {\n /* tslint:disable-next-line:max-line-length */\n var fontStyle = '';\n if (this.mFonts.length >= 1) {\n for (var _i = 0, _a = this.mFonts; _i < _a.length; _i++) {\n var font = _a[_i];\n fontStyle += '';\n if (font.b) {\n fontStyle += '';\n }\n if (font.i) {\n fontStyle += '';\n }\n if (font.u) {\n fontStyle += '';\n }\n if (font.strike) {\n fontStyle += '';\n }\n fontStyle += '';\n fontStyle += '';\n fontStyle += '';\n }\n }\n return fontStyle + '';\n };\n Workbook.prototype.saveFills = function () {\n /* tslint:disable-next-line:max-line-length */\n var fillsStyle = '';\n if (this.mFills.size >= 1) {\n this.mFills.forEach(function (value, key) {\n /* tslint:disable-next-line:max-line-length */\n fillsStyle += '';\n });\n }\n return fillsStyle + '';\n };\n Workbook.prototype.saveBorders = function () {\n /* tslint:disable-next-line:max-line-length */\n var bordersStyle = '';\n if (this.mBorders.length >= 1) {\n for (var _i = 0, _a = this.mBorders; _i < _a.length; _i++) {\n var borders = _a[_i];\n if (this.isAllBorder(borders)) {\n var color = borders.all.color.replace('#', '');\n var lineStyle = borders.all.lineStyle;\n /* tslint:disable-next-line:max-line-length */\n bordersStyle += '';\n }\n else {\n /* tslint:disable-next-line:max-line-length */\n bordersStyle += '';\n }\n }\n }\n return bordersStyle + '';\n };\n Workbook.prototype.saveCellStyles = function () {\n var _this = this;\n var cellStyleString = '';\n this.cellStyles.forEach(function (value, key) {\n cellStyleString += '';\n if (this.mCellStyleXfs.length >= 1) {\n for (var _i = 0, _a = this.mCellStyleXfs; _i < _a.length; _i++) {\n var cellStyleXf = _a[_i];\n /* tslint:disable-next-line:max-line-length */\n cellXfsStyle += '';\n }\n else {\n cellXfsStyle += ' />';\n }\n }\n }\n return cellXfsStyle + '';\n };\n Workbook.prototype.saveCellXfs = function () {\n /* tslint:disable-next-line:max-line-length */\n var cellXfsStyle = '';\n if (this.mCellXfs.length >= 1) {\n for (var _i = 0, _a = this.mCellXfs; _i < _a.length; _i++) {\n var cellXf = _a[_i];\n /* tslint:disable-next-line:max-line-length */\n cellXfsStyle += '';\n }\n }\n return cellXfsStyle + '';\n };\n Workbook.prototype.saveAlignment = function (cellXf) {\n var alignString = '';\n return alignString;\n };\n Workbook.prototype.saveApp = function (builtInProperties) {\n /* tslint:disable-next-line:max-line-length */\n var appString = 'Essential XlsIO';\n if (builtInProperties !== undefined) {\n if (builtInProperties.manager !== undefined) {\n appString += '' + builtInProperties.manager + '';\n }\n if (builtInProperties.company !== undefined) {\n appString += '' + builtInProperties.company + '';\n }\n }\n this.addToArchive((appString + ''), 'docProps/app.xml');\n };\n Workbook.prototype.saveCore = function (builtInProperties) {\n var createdDate = new Date();\n /* tslint:disable-next-line:max-line-length */\n var coreString = '';\n if (this.builtInProperties !== undefined) {\n if (builtInProperties.author !== undefined) {\n coreString += '' + builtInProperties.author + '';\n }\n if (builtInProperties.subject !== undefined) {\n coreString += '' + builtInProperties.subject + '';\n }\n if (builtInProperties.category !== undefined) {\n coreString += '' + builtInProperties.category + '';\n }\n if (builtInProperties.comments !== undefined) {\n coreString += '' + builtInProperties.comments + '';\n }\n if (builtInProperties.title !== undefined) {\n coreString += '' + builtInProperties.title + '';\n }\n if (builtInProperties.tags !== undefined) {\n coreString += '' + builtInProperties.tags + '';\n }\n if (builtInProperties.status !== undefined) {\n coreString += '' + builtInProperties.status + '';\n }\n if (builtInProperties.createdDate !== undefined) {\n /* tslint:disable-next-line:max-line-length */\n coreString += '' + builtInProperties.createdDate.toISOString() + '';\n }\n else {\n coreString += '' + createdDate.toISOString() + '';\n }\n if (builtInProperties.modifiedDate !== undefined) {\n /* tslint:disable-next-line:max-line-length */\n coreString += '' + builtInProperties.modifiedDate.toISOString() + '';\n }\n else {\n coreString += '' + createdDate.toISOString() + '';\n }\n }\n else {\n coreString += '' + createdDate.toISOString() + '';\n coreString += '' + createdDate.toISOString() + '';\n }\n /* tslint:disable-next-line:max-line-length */\n coreString += '';\n this.addToArchive(coreString, 'docProps/core.xml');\n };\n Workbook.prototype.saveTopLevelRelation = function () {\n /* tslint:disable-next-line:max-line-length */\n var topRelation = '';\n this.addToArchive(topRelation, '_rels/.rels');\n };\n Workbook.prototype.saveWorkbookRelation = function () {\n /* tslint:disable-next-line:max-line-length */\n var wbRelation = '';\n var length = this.worksheets.length;\n var count = 0;\n for (var i = 0; i < length; i++, count++) {\n /* tslint:disable-next-line:max-line-length */\n wbRelation += '';\n }\n /* tslint:disable-next-line:max-line-length */\n wbRelation += '';\n if (this.sharedStringCount > 0) {\n /* tslint:disable-next-line:max-line-length */\n wbRelation += '';\n }\n this.addToArchive((wbRelation + ''), 'xl/_rels/workbook.xml.rels');\n };\n Workbook.prototype.saveContentType = function () {\n /* tslint:disable-next-line:max-line-length */\n var contentTypeString = '';\n var sheetsOverride = '';\n var length = this.worksheets.length;\n var drawingIndex = 0;\n for (var i = 0; i < length; i++) {\n /* tslint:disable-next-line:max-line-length */\n sheetsOverride += '';\n if (this.worksheets[i].images != undefined && this.worksheets[i].images.length > 0) {\n drawingIndex++;\n /* tslint:disable-next-line:max-line-length */\n sheetsOverride += '';\n }\n }\n if (this.imageCount > 0)\n sheetsOverride += '';\n if (this.sharedStringCount > 0) {\n /* tslint:disable-next-line:max-line-length */\n contentTypeString += '';\n }\n this.addToArchive((contentTypeString + sheetsOverride + ''), '[Content_Types].xml');\n };\n Workbook.prototype.addToArchive = function (xmlString, itemName) {\n if (typeof (xmlString) === 'string') {\n var blob = new Blob([xmlString], { type: 'text/plain' });\n var archiveItem = new ZipArchiveItem(blob, itemName);\n this.mArchive.addItem(archiveItem);\n }\n else {\n var archiveItem = new ZipArchiveItem(xmlString, itemName);\n this.mArchive.addItem(archiveItem);\n }\n };\n Workbook.prototype.processMergeCells = function (cell, rowIndex, mergeCells) {\n if (cell.rowSpan !== 0 || cell.colSpan !== 0) {\n var mCell = new MergeCell();\n mCell.x = cell.index;\n mCell.width = cell.colSpan;\n mCell.y = rowIndex;\n mCell.height = cell.rowSpan;\n var startCell = this.getCellName(mCell.y, mCell.x);\n var endCell = this.getCellName(rowIndex + mCell.height, cell.index + mCell.width);\n mCell.ref = startCell + ':' + endCell;\n var mergedCell = mergeCells.add(mCell);\n var start = { x: mCell.x, y: mCell.y };\n var end = {\n x: (cell.index + mCell.width), y: (rowIndex + mCell.height)\n };\n this.updatedMergedCellStyles(start, end, cell);\n }\n return mergeCells;\n };\n Workbook.prototype.updatedMergedCellStyles = function (sCell, eCell, cell) {\n for (var x = sCell.x; x <= eCell.x; x++) {\n for (var y = sCell.y; y <= eCell.y; y++) {\n this.mergedCellsStyle.set(this.getCellName(y, x), { x: x, y: y, styleIndex: cell.styleIndex });\n }\n }\n };\n /**\n * Returns the tick count corresponding to the given year, month, and day.\n * @param year number value of year\n * @param month number value of month\n * @param day number value of day\n */\n Workbook.prototype.dateToTicks = function (year, month, day) {\n var ticksPerDay = 10000 * 1000 * 60 * 60 * 24;\n var daysToMonth365 = [0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334, 365];\n var daysToMonth366 = [0, 31, 60, 91, 121, 152, 182, 213, 244, 274, 305, 335, 366];\n if (year >= 1 && year <= 9999 && month >= 1 && month <= 12) {\n var days = this.isLeapYear(year) ? daysToMonth366 : daysToMonth365;\n var y = year - 1;\n var n = y * 365 + ((y / 4) | 0) - ((y / 100) | 0) + ((y / 400) | 0) + days[month - 1] + day - 1;\n return n * ticksPerDay;\n }\n throw new Error('Not a valid date');\n };\n /**\n * Return the tick count corresponding to the given hour, minute, second.\n * @param hour number value of hour\n * @param minute number value if minute\n * @param second number value of second\n */\n Workbook.prototype.timeToTicks = function (hour, minute, second) {\n if (hour >= 0 && hour < 24 && minute >= 0 && minute < 60 && second >= 0 && second < 60) {\n var totalSeconds = hour * 3600 + minute * 60 + second;\n return totalSeconds * 10000 * 1000;\n }\n throw new Error('Not valid time');\n };\n /**\n * Checks if given year is a leap year.\n * @param year Year value.\n */\n Workbook.prototype.isLeapYear = function (year) {\n return year % 4 === 0 && (year % 100 !== 0 || year % 400 === 0);\n };\n /**\n * Converts `DateTime` to the equivalent OLE Automation date.\n */\n Workbook.prototype.toOADate = function (date) {\n var ticks = 0;\n /* tslint:disable-next-line:max-line-length */\n ticks = this.dateToTicks(date.getFullYear(), (date.getMonth() + 1), date.getDate()) + this.timeToTicks(date.getHours(), date.getMinutes(), date.getSeconds());\n if (ticks === 0) {\n return 0.0;\n }\n var ticksPerDay = 10000 * 1000 * 60 * 60 * 24;\n var daysTo1899 = (((365 * 4 + 1) * 25 - 1) * 4 + 1) * 4 + ((365 * 4 + 1) * 25 - 1) * 3 - 367;\n var doubleDateOffset = daysTo1899 * ticksPerDay;\n var oaDateMinAsTicks = (((365 * 4 + 1) * 25 - 1) - 365) * ticksPerDay;\n if (ticks < oaDateMinAsTicks) {\n throw new Error('Arg_OleAutDateInvalid');\n }\n var millisPerDay = 1000 * 60 * 60 * 24;\n return ((ticks - doubleDateOffset) / 10000) / millisPerDay;\n };\n return Workbook;\n}());\nexport { Workbook };\n/**\n * BuiltInProperties Class\n * @private\n */\nvar BuiltInProperties = /** @class */ (function () {\n function BuiltInProperties() {\n }\n return BuiltInProperties;\n}());\nexport { BuiltInProperties };\n"],"names":["CellStyle","this","numFmtId","backColor","fontName","fontSize","fontColor","italic","bold","underline","strikeThrough","wrapText","hAlign","vAlign","indent","rotation","numberFormat","type","borders","Borders","isGlobalStyle","Font","sz","name","u","b","i","color","strike","CellXfs","Alignment","CellStyleXfs","CellStyles","xfId","NumFmt","id","code","formatCode","Border","mLine","mColor","lineStyle","left","right","top","bottom","all","__extends","extendStatics","d","Object","setPrototypeOf","__proto__","Array","p","hasOwnProperty","__","constructor","prototype","create","Cell","Cells","_super","_this","apply","arguments","add","cell","inserted","count","_i","_a","length","index","push","Column","Row","Rows","row","Worksheets","Worksheet","isSummaryRowBelow","showGridLines","enableRtl","HyperLink","Grouping","FreezePane","MergeCell","MergeCells","mergeCell","mCell","isIntersecting","intersectingCell","x","Math","min","y","Y","width","max","Width","X","height","Height","ref","split","base","compare","Image","ValueFormatter","cultureName","intl","Internationalization","getFormatFunction","format","isServerRendered","getDateFormat","getNumberFormat","toView","value","result","isNullOrUndefined","displayText","CsvHelper","json","separator","csvStr","undefined","formatter","isMicrosoftBrowser","navigator","msSaveBlob","styles","globalStyles","Map","set","worksheets","parseWorksheet","rows","parseRows","rows_1","Error","parseRow","cells","parseCell","csv","Date","style","parseCellValue","skeleton","error","has","get","val","start","replace","indexOf","save","fileName","buffer","Blob","dataUrl_1","window","URL","createObjectURL","dwlLink","document","createElementNS","download","href","event_1","createEvent","initEvent","dispatchEvent","setTimeout","revokeObjectURL","saveAsBlob","encodingType","encoding","Encoding","encodeString","toUpperCase","getBytes","BlobHelper","parts","append","part","blob","getBlob","AutoFilters","Workbook","saveType","culture","currencyString","sharedStringCount","unitsProportions","hyperlinkStyle","currency","mSaveType","mArchive","ZipArchive","sharedString","mFonts","mBorders","mStyles","printTitles","cellStyles","mNumFmt","mFills","mCellXfs","mCellStyleXfs","drawingCount","imageCount","cellStyle","parserCellStyle","cellStylesIn","tFormat","parserWorksheets","builtInProperties","BuiltInProperties","parserBuiltInProperties","csvHelper","jsonBuiltInProperties","author","comments","category","company","manager","subject","title","createdDate","modifiedDate","tags","status","jsonSheet","sheet","mergeCells","mergedCellsStyle","mHyperLinks","toString","columns","parserColumns","parserRows","freeze","parserFreezePanes","printTitle","parserPrintTitle","pageSetup","images","parserImages","autoFilters","parseFilters","hyperLinks","mergeOptions","fromJson","toJson","applyProperties","sourceJson","destJson","keys","getCellName","column","getColumnName","col","strColumnName","iCurrentDigit","String","fromCharCode","titleRowName","printTitleName","fromRow","toRow","titleColName","fromColumn","toColumn","freezePanes","leftCell","columnsLength","rowsLength","rowId","r","parserRow","insertMergedCellsStyle","forEach","key","filter","item","rowToInsert","createCell","insertIndex","splice","styleIndex","cellToInsert","refName","rowIndex","grouping","parseGrouping","parseCells","outlineLevel","isCollapsed","isHidden","cellsLength","spanMin","spanMax","cellId","jsonCell","rowSpan","colSpan","hyperlink","hyperLink","target","getCellValueType","rId","formula","parseCellType","processMergeCells","spans","GetColors","colors","processColor","colorVal","rgbColors","processCellValue","cellValue","processedVal","startindex","endIndex","processString","substring","subString","text","subSplit","subSplit_1","element","trim","applyGlobalStyle","a","cellType","defStyleIndex","parserBorder","leftBorder","rightBorder","topBorder","bottomBorder","toLowerCase","processCellStyle","switchNumberFormat","numFmt","cellStyleXfs","_b","_c","cellXfs","changeNumberFormats","regex","RegExp","returnFormat","getNumberPattern","useGrouping","getDatePattern","border","processNumFormatId","compareResult","compareStyle","size","isNewFont","toCompareStyle","font","isNewBorder","bStyle","isAllBorder","toCompareBorder","allBorderStyle","baseStyle","contains","array","toOADate","value_1","sstvalue","imagesLength","image","parserImage","lastRow","lastColumn","horizontalFlip","verticalFlip","blobSaveType","Promise","resolve","reject","obj","blobData","saveInternal","then","proxyUrl","xlsxMatch","match","csvMatch","destroy","saveWorkbook","saveWorksheets","saveSharedString","saveStyles","saveApp","saveCore","saveContentType","saveTopLevelRelation","saveWorkbookRelation","workbookTemp","sheets","sheetName","printTitle_1","addToArchive","saveWorksheet","sheetBlob","sheetString","saveSheetView","colString","pixelsToColumnWidth","rowString","pixelsToRowHeight","_d","_e","_f","_g","_h","_j","hLink","saveDrawings","saveSheetRelations","drawings","sheetDrawingString","imgId","pic","updatelastRowOffset","updatelastColumnOffSet","lastRowOffset","lastColOffset","imageData","convertBase64toImage","saveDrawingRelations","picture","iCurHeight","iCurRow","iCurOffset","iRowHeight","iSpaceInCell","convertToPixels","rowHiddenHeight","round","iCurWidth","iCurCol","iColWidth","ColumnWidthToPixels","colHiddenWidth","img","byteStr","atob","ArrayBuffer","data","Uint8Array","charCodeAt","drawingRelation","pixels","dDigitWidth","trunc","fileWidth","n","relStr","paneString","sstStart","si","updateCellXfsStyleXfs","styleTemp","saveNumberFormats","saveFonts","saveFills","saveBorders","saveCellStyleXfs","saveCellXfs","saveCellStyles","compareFontResult","fontId","fillId","borderId","applyAlignment","alignment","horizontal","vertical","numFmtStyle_1","fontStyle","fillsStyle","bordersStyle","cellStyleString","cellXfsStyle","cellStyleXf","saveAlignment","cellXf","alignString","appString","coreString","toISOString","wbRelation","contentTypeString","sheetsOverride","drawingIndex","xmlString","itemName","archiveItem","ZipArchiveItem","addItem","startCell","endCell","end","updatedMergedCellStyles","sCell","eCell","dateToTicks","year","month","day","daysToMonth365","daysToMonth366","isLeapYear","timeToTicks","hour","minute","second","date","ticks","getFullYear","getMonth","getDate","getHours","getMinutes","getSeconds","daysTo1899"],"mappings":"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"}