export declare const NSXlsxExportCode = "var nsModuleExport = function(root,name,prototype)\r\n\t{\r\n\t\tif(typeof exports === 'object' && typeof module === 'object')\r\n\t\t{\r\n\t\t\tmodule.exports[name] = prototype;\r\n\t\t}\r\n\t\telse if (typeof define === \"function\" && define.amd)\r\n\t\t{\r\n\t\t\tdefine(name,[], function () {return prototype;});\r\n\t\t}\r\n\t\telse if(typeof exports === 'object')\r\n\t\t{\r\n\t\t\texports[name] = prototype;\r\n\t\t}\r\n\t\telse\r\n\t\t{\r\n\t\t\troot[name] = prototype;\r\n\t\t}\r\n\t};var nsIsWeb = function(root)\r\n\t{\r\n\t\tif(typeof exports === 'object' && typeof module === 'object')\r\n\t\t{\r\n\t\t\treturn false;\r\n\t\t}\r\n\t\telse if (typeof define === \"function\" && define.amd)\r\n\t\t{\r\n\t\t\treturn false;\r\n\t\t}\r\n\t\telse if(typeof exports === 'object')\r\n\t\t{\r\n\t\t\treturn false;\r\n\t\t}\r\n\t\telse\r\n\t\t{\r\n\t\t\treturn true;\r\n\t\t}\r\n\t};if(!nsIsWeb())\r\n\t\t{\r\nvar nsutilRef = require('./nsUtil.min.js');\r\nvar NSUtil = nsutilRef.NSUtil;\r\n\r\n\t\t}\r\nvar NSZip = (function()\r\n{\r\n\tvar NSZip = function(config)\r\n\t{\r\n\t\tvar self = this;\r\n\t\tvar setting = {};\r\n\t    \r\n\t    var objFiles = {};\r\n\t    var util = null;\r\n\t\t\r\n\t\tvar initialize = function()\r\n\t\t{\r\n\t\t\tif(!config)\r\n\t\t\t{\r\n\t\t\t\tconfig = {};\r\n\t\t\t}\r\n\t\t\t/*setting = {\r\n\t\t\t\tfileName: config[\"fileName\"] || \"download\",\r\n\t\t\t\tmimeType: config[\"mimeType\"] || \"application/zip\"\r\n\t\t\t};\r\n\t\t\tif (setting.fileName.indexOf(\".\") === -1) \r\n\t\t\t{\r\n\t\t\t\tsetting.fileName = setting.fileName + \".zip\";\r\n\t        }*/\r\n\t\t\tutil = new ZipUtil();\r\n\t\t};\r\n\t\t\r\n\t\tvar getFile = function(type,mimeType)\r\n\t\t{\r\n\t\t\tvar objRet = null;\r\n\t\t\ttype = type ? type : \"blob\";\r\n\t\t\tswitch(type) \r\n\t\t\t{\r\n\t\t\t\tcase \"blob\":\r\n\t\t\t\t\tobjRet = getBlob(mimeType);\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t\treturn objRet;\r\n\t\t};\r\n\t\t\r\n\t\tvar addFolders = function(arrPath)\r\n\t\t{\r\n\t\t\tvar arrReturn = null;\r\n\t\t\tif(arrPath && arrPath.length > 0)\r\n\t\t\t{\r\n\t\t\t\tarrReturn = [];\r\n\t\t\t\tfor(var index = 0;index < arrPath.length;index++)\r\n\t\t\t\t{\r\n\t\t\t\t\tarrReturn.push(addFolder(arrPath[index]));\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn arrReturn;\r\n\t\t};\r\n\t\t\r\n\t\tvar addFolder = function(path)\r\n\t\t{\r\n\t\t\treturn createFolder(path);\r\n\t\t};\r\n\t\t\r\n\t\tvar addFile = function(path,content,prop)\r\n\t\t{\r\n\t\t\treturn createFile(path,content,prop,false);\r\n\t\t};\r\n\t\t\r\n\t\tvar createFolder = function(path)\r\n\t\t{\r\n\t\t\tpath = util.addSlashAtEnd(path);\r\n\t\t\tif(objFiles[path])\r\n\t\t\t{\r\n\t\t\t\treturn objFiles[path].zipFile;\r\n\t\t\t}\r\n\t\t\treturn createFile(path,null,null,true);\r\n\t\t};\r\n\t\t\r\n\t\tvar createFile = function(path,content,prop,isDir)\r\n\t\t{\r\n\t\t\tprop = prop ? prop : {};\r\n\t\t\tvar item = {path: path,content: content,origContent: content};\r\n\t\t\titem.created = new Date();\r\n\t\t\titem.dataType = util.getDataType(content);\r\n\t\t\titem.isDir = isDir ? true : false;\r\n\t\t\tvar parent = util.getParentFolder(path);\r\n\t\t\tif(parent)\r\n\t\t\t{\r\n\t\t\t\tcreateFolder(parent);\r\n\t\t\t}\r\n\t\t\titem.isBase64 = (item.type == \"base64\");\r\n\t\t\titem.isBinary = (item.type == \"binary\");\r\n\t\t\tvar isUnicodeString = (item.dataType === \"string\") && item.isBase64 && item.isBinary;\r\n\t\t\tif (item.type != \"binary\") \r\n\t\t\t{\r\n\t\t\t\titem.isBinary = !isUnicodeString;\r\n\t\t    }\r\n\t\t\tif(item.isDir || !path || !path.length)\r\n\t\t\t{\r\n\t\t\t\titem.dataType = \"string\";\r\n\t\t\t\titem.isBase64 = false;\r\n\t\t\t\titem.isBinary = true;\r\n\t\t\t\titem.content = \"\";\r\n\t\t\t}\r\n\t\t\titem.content = getContent(item);\r\n\t\t\tvar zipFile = new ZipFile(util,item,self);\r\n\t\t\tobjFiles[path] = {item: item,zipFile: zipFile};\r\n\t\t\t\r\n\t\t\treturn zipFile;\r\n\t\t};\r\n\t\t\r\n\t\tvar getContent = function(item)\r\n\t\t{\r\n\t\t\tvar refine = function(data)\r\n\t\t\t{\r\n\t\t\t\tvar dataType = item.dataType;\r\n\t\t\t\tif(dataType)\r\n\t\t\t\t{\r\n\t\t\t\t\tif(dataType === \"string\")\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tif(item.isBase64)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tdata = util.base64Decode(data);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\telse if(item.isBinary)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t/*var arrData = new Uint8Array(data.length);\r\n\t\t\t\t\t\t\tdata = util.fillArrayWithString(data,arrData);*/\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse if (dataType === \"arraybuffer\") \r\n\t\t\t\t\t{\r\n\t\t\t            data = new Uint8Array(item);\r\n\t\t\t        }\r\n\t\t\t\t}\r\n\t\t\t\telse\r\n\t\t\t\t{\r\n\t\t\t\t\tconsole.warn(\"DataType cannot be detected for file \" + item.path);\r\n\t\t\t\t}\r\n\t\t\t\treturn data;\r\n\t\t\t};\r\n\t\t\tvar content = item.content;\r\n\t\t\tvar isBlob = (content instanceof Blob || ['[object File]', '[object Blob]'].indexOf(Object.prototype.toString.call(content)) !== -1);\r\n\t        if(isBlob && typeof FileReader !== \"undefined\") \r\n\t        {\r\n\t        \treturn new Promise(function (resolve, reject) \r\n\t        \t{\r\n\t                var reader = new FileReader();\r\n\t                reader.onload = function(event) \r\n\t                {\r\n\t                \titem.content = refine(event.target.result);\r\n\t                \tresolve(event.target.result);\r\n\t                };\r\n\t                reader.onerror = function(event) \r\n\t                {\r\n\t                \tconsole.error(event.target.error);\r\n\t                    reject(event.target.error);\r\n\t                };\r\n\t                reader.readAsArrayBuffer(content);\r\n\t        \t});\r\n\t        }\r\n\t        return refine(content);\r\n\t\t};\r\n\t\t\r\n\t\tvar clear = function()\r\n\t\t{\r\n\t\t     objFiles = {};\r\n\t\t};\r\n\t\t\r\n\t\tvar getBlob = function(mimeType)\r\n\t\t{\r\n\t\t\tmimeType = mimeType ? mimeType : \"application/zip\";\r\n\t\t\tvar textOutput = buildFileStream();\r\n\t\t\tvar uInt8Output  = util.buildUint8Array(textOutput);\r\n\t\t\tclear();\r\n\t\t\treturn new Blob([uInt8Output], { type: setting.mimeType });\r\n\t\t};\r\n\t\t\r\n\t\tvar buildFileStream = function(initContent)\r\n\t\t{\r\n\t\t\tinitContent = initContent ? initContent : \"\";\r\n\t\t\tvar len = Object.keys(objFiles).length;\r\n\t\t\tvar middleContent = \"\";\r\n\t\t\tvar lL = 0;\r\n\t        var cL = 0;\r\n\t        for(var path in objFiles)\r\n\t\t\t{\r\n\t        \tvar file = objFiles[path].item;\r\n\t\t\t\tvar objHeader = getHeader(file, lL);\r\n\t\t\t\tvar fileHeader = objHeader.fileHeader;\r\n\t\t\t\tvar folderHeader = objHeader.folderHeader;\r\n\t\t\t\tvar content = objHeader.content;\r\n\t\t\t\tlL += fileHeader.length + content.length;\r\n\t            cL += folderHeader.length;\r\n\t            initContent +=  fileHeader + content;\r\n\t            middleContent += folderHeader;\r\n\t\t\t}\r\n\t\t\tvar endContent = buildFolderEnd(len, cL, lL);\r\n\t        return initContent + middleContent + endContent;\r\n\t\t};\r\n\t\t\r\n\t\tvar getHeader = function(file,offset)\r\n\t\t{\r\n\t\t\tvar content = util.utf8_encode(file.content);\r\n\t\t\tvar path = file.path;\r\n\t\t\tvar created = file.created;\r\n\t\t\tvar utfPath = util.utf8_encode(path);\r\n\t\t\tvar isUTF8 = (utfPath !== path);\r\n\t\t\tvar time = util.convertTime(created);\r\n\t\t    var dt = util.convertDate(created);\r\n\t\t    var extraFields = \"\";\r\n\t\t    if (isUTF8) \r\n\t\t    {\r\n\t            var uExtraFieldPath = util.decToHex(1, 1) + util.decToHex(util.getFromCrc32Table(utfPath), 4) + utfPath;\r\n\t            extraFields = \"\\x75\\x70\" + util.decToHex(uExtraFieldPath.length, 2) + uExtraFieldPath;\r\n\t        }\r\n\t\t    var header = '\\x0A\\x00' +\r\n\t        (isUTF8 ? '\\x00\\x08' : '\\x00\\x00') + // general purpose bit flag\r\n\t        '\\x00\\x00' +\r\n\t        util.decToHex(time, 2) + // last modified time\r\n\t        util.decToHex(dt, 2) + // last modified date\r\n\t        util.decToHex(content ? util.getFromCrc32Table(content) : 0, 4) +\r\n\t        util.decToHex(content ? content.length : 0, 4) + // compressed size\r\n\t        util.decToHex(content ? content.length : 0, 4) + // uncompressed size\r\n\t        util.decToHex(utfPath.length, 2) + // file name length\r\n\t        util.decToHex(extraFields.length, 2); // extra field length\r\n\t        \r\n\t\t    var fileHeader = 'PK\\x03\\x04' + header + utfPath + extraFields;\r\n\t        var folderHeader = 'PK\\x01\\x02' + // central header\r\n\t            '\\x14\\x00' +\r\n\t            header + // file header\r\n\t            '\\x00\\x00' +\r\n\t            '\\x00\\x00' +\r\n\t            '\\x00\\x00' +\r\n\t            (content ? '\\x00\\x00\\x00\\x00' : '\\x10\\x00\\x00\\x00') + // external file attributes\r\n\t            util.decToHex(offset, 4) + // relative offset of local header\r\n\t            utfPath + // file name\r\n\t            extraFields; // extra field\r\n\t        return { fileHeader: fileHeader, folderHeader: folderHeader, content: content || '' };\r\n\t\t};\r\n\t\t\r\n\t\tvar buildFolderEnd = function(totalEntries,size,startOffset)\r\n\t\t{\r\n\t\t\tvar retValue = \"PK\\x05\\x06\" + \"\\x00\\x00\" + \"\\x00\\x00\";\r\n\t\t\tretValue += util.decToHex(totalEntries, 2);\r\n\t\t\tretValue += util.decToHex(totalEntries, 2);\r\n\t\t\tretValue += util.decToHex(size, 4);\r\n\t\t\tretValue += util.decToHex(startOffset, 4);\r\n\t\t\tretValue += \"\\x00\\x00\";\r\n\t\t\treturn retValue;\r\n\t\t};\r\n\t\t\r\n\t    var downloadFile = function(fileName,mimeType,type,content)\r\n\t    {\r\n\t    \tfileName = fileName ? fileName : \"download\";\r\n\t    \tif (fileName.indexOf(\".\") === -1) \r\n\t\t\t{\r\n\t\t\t\tfileName = fileName + \".zip\";\r\n\t        }\r\n\t    \tcontent = content ? content : getFile(type,mimeType);\r\n\t    \tutil.downloadFile(fileName,content);\r\n\t    };\r\n\t    \r\n\t    var ZipFile = function(util,item,objRoot)\r\n\t    {\r\n\t    \tvar self = this;\r\n\t    \t\r\n\t    \tvar addFolder = function(path)\r\n\t    \t{\r\n\t    \t\treturn objRoot.addFolder(getPath(path));\r\n\t    \t};\r\n\t    \t\r\n\t    \tvar addFile = function(path,content)\r\n\t    \t{\r\n\t    \t\treturn objRoot.addFile(getPath(path),content);\r\n\t    \t};\r\n\t    \t\r\n\t    \tvar getPath = function(path)\r\n\t    \t{\r\n\t    \t\treturn item.path + path;\r\n\t    \t};\r\n\t    \t\r\n\t    \tif(item.isDir)\r\n\t    \t{\r\n\t    \t\tself.addFolder = addFolder;\r\n\t    \t\tself.addFile = addFile;\r\n\t    \t}\r\n\t    };\r\n\t    \r\n\t    var ZipUtil = function()\r\n\t    {\r\n\t    \tvar self = this;\r\n\t    \tvar crcTable = [];\r\n\t    \tvar base64Key = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\";\r\n\t    \t\r\n\t    \tvar initialize = function()\r\n\t    \t{\r\n\t    \t\tcrcTable = makeCRCTable();\r\n\t    \t};\r\n\t    \t\r\n\t    \t//https://stackoverflow.com/questions/18638900/javascript-crc32\r\n\t    \tvar makeCRCTable = function()\r\n\t    \t{\r\n\t    \t    var c;\r\n\t    \t    var crcTable = [];\r\n\t    \t    for(var n =0; n < 256; n++)\r\n\t    \t    {\r\n\t    \t        c = n;\r\n\t    \t        for(var k =0; k < 8; k++)\r\n\t    \t        {\r\n\t    \t            c = ((c&1) ? (0xEDB88320 ^ (c >>> 1)) : (c >>> 1));\r\n\t    \t        }\r\n\t    \t        crcTable[n] = c;\r\n\t    \t    }\r\n\t    \t    return crcTable;\r\n\t    \t};\r\n\t    \t\r\n\t    \tvar getFromCrc32Table = function(content, crc)\r\n\t        {\r\n\t    \t\tif(typeof content === \"undefined\" || !content.length) \r\n\t    \t\t{\r\n\t    \t        return 0;\r\n\t    \t    }\r\n\t    \t\tif(!crc)\r\n\t        \t{\r\n\t        \t\tcrc = 0;\r\n\t        \t}\r\n\t        \tcrc ^= (-1);\r\n\t    \t\tvar dataType = util.getDataType(content);\r\n\t    \t\tif(dataType === \"string\")\r\n\t    \t\t{\r\n\t\t            var ch = 0;\r\n\t\t            var k = 0;\r\n\t\t            var l = 0;\r\n\t\t            var len = content.length;\r\n\t\t            for (var count = 0;count < len;count++) \r\n\t\t            {\r\n\t\t            \tch = content.charCodeAt(count);\r\n\t\t                k = (crc ^ ch) & 0xFF;\r\n\t\t                l = crcTable[k];\r\n\t\t                crc = (crc >>> 8) ^ l;\r\n\t\t            }\r\n\t    \t\t}\r\n\t    \t\telse\r\n\t    \t\t{\r\n\t    \t\t\tvar ch = 0;\r\n\t\t            var k = 0;\r\n\t\t            var l = 0;\r\n\t    \t\t\tvar len = content.length;\r\n\t    \t\t\tfor (var count = 0;count < len;count++) \r\n\t\t            {\r\n\t    \t\t\t\tch = content[count];\r\n\t    \t\t\t\tk = (crc ^ ch) & 0xFF;\r\n\t    \t\t\t\tl = crcTable[k];\r\n\t    \t\t\t\tcrc = (crc >>> 8) ^ l;\r\n\t\t            }\r\n\t    \t\t}\r\n\t    \t\treturn crc ^ (-1);\r\n\t        };\r\n\t        \r\n\t        var buildUint8Array = function(content)\r\n\t        {\r\n\t        \tvar retValue = new Uint8Array(content.length);\r\n\t            for (var count = 0; count < content.length; count++) \r\n\t            {\r\n\t            \tretValue[count] = content.charCodeAt(count);\r\n\t            }\r\n\t            return retValue;\r\n\t        };\r\n\t        \r\n\t        //http://www.navioo.com/javascript/tutorials/Javascript_utf8_encode_1529.html\r\n\t        // Encodes an ISO-8859-1 string to UTF-8    \r\n\t        var utf8_encode = function(str) \r\n\t    \t{\r\n\t        \tvar retValue = \"\";\r\n\t    \t\tvar str = str.replace(/\\r\\n/g, \"\\n\");\r\n\t    \t\tvar len = str.length;\r\n\t    \t\tvar start = 0;\r\n\t    \t\tvar end = 0;\r\n\t    \t\tvar enc = null;\r\n\t    \t\tvar ch = null;\r\n\t    \t\tfor(var count = 0;count < len;count++)\r\n\t    \t\t{\r\n\t    \t\t\tch = str.charCodeAt(count);\r\n\t    \t\t\tenc = null;\r\n\t    \t\t\tif(ch < 128)\r\n\t    \t\t\t{\r\n\t    \t\t\t\tend++;\r\n\t    \t\t\t}\r\n\t    \t\t\telse if(ch > 127 && ch < 2048)\r\n\t    \t\t\t{\r\n\t    \t\t\t\tenc = String.fromCharCode(ch >> 6 | 192);\r\n\t    \t\t\t\tenc += String.fromCharCode((ch & 63) | 128);\r\n\t    \t\t\t}\r\n\t    \t\t\telse\r\n\t    \t\t\t{\r\n\t    \t\t\t\tenc = String.fromCharCode((ch >> 12) | 224);\r\n\t    \t\t\t\tenc += String.fromCharCode(((ch >> 6) & 63) | 128);\r\n\t    \t\t\t\tenc += String.fromCharCode((ch & 63) | 128);\r\n\t    \t\t\t}\r\n\t    \t\t\tif (enc != null) \r\n\t    \t\t\t{  \r\n    \t\t            if (end > start) \r\n    \t\t            {  \r\n    \t\t            \tretValue += str.substring(start, end);  \r\n    \t\t            }  \r\n    \t\t            retValue += enc;  \r\n    \t\t            start = end = count + 1;  \r\n    \t\t        }  \r\n\t    \t\t}\r\n\t    \t\tif (end > start) \r\n\t    \t\t{  \r\n\t    \t\t\tretValue += str.substring(start,str.length);  \r\n\t    \t    } \r\n\t    \t\treturn retValue;\r\n\t        };\r\n\t        \r\n\t        //http://www.navioo.com/javascript/tutorials/Javascript_utf8_decode_1528.html\r\n\t        // Converts a UTF-8 encoded string to ISO-8859-1    \r\n\t        var utf8_decode = function(str) \r\n\t    \t{\r\n\t        \tvar arrReturn = [];\r\n\t        \tvar count = 0;\r\n\t        \tvar retCount = 0;\r\n\t        \tvar char1 = 0;\r\n\t        \tvar char2 = 0;\r\n\t        \tvar char3 = 0;  \r\n\t            str += \"\";  \r\n\t            while (count < str.length) \r\n\t            {  \r\n\t                char1 = str.charCodeAt(count);  \r\n\t                if (char1 < 128) \r\n\t                {  \r\n\t                    arrReturn[retCount++] = String.fromCharCode(char1);  \r\n\t                    count++;  \r\n\t                } \r\n\t                else if ((char1 > 191) && (char1 < 224)) \r\n\t                {  \r\n\t                    char2 = str.charCodeAt(count+1);  \r\n\t                    arrReturn[retCount++] = String.fromCharCode(((char1 & 31) << 6) | (char2 & 63));  \r\n\t                    count += 2;  \r\n\t                } \r\n\t                else \r\n\t                {  \r\n\t                    char2 = str.charCodeAt(count+1);  \r\n\t                    char3 = str.charCodeAt(count+2);  \r\n\t                    arrReturn[retCount++] = String.fromCharCode(((char1 & 15) << 12) | ((char2 & 63) << 6) | (char3 & 63));  \r\n\t                    count += 3;  \r\n\t                }  \r\n\t            }  \r\n\t            return arrReturn.join('');  \r\n\t    \t};\r\n\t        \r\n\t        var decToHex = function(number, bytes) \r\n\t        {\r\n\t        \tvar retValue = \"\";\r\n\t        \tfor(var count = 0;count < bytes;count++)\r\n\t    \t\t{\r\n\t        \t\tretValue += String.fromCharCode(number & 0xFF);\r\n\t        \t\tnumber = number >>> 8;\r\n\t    \t\t}\r\n\t        \treturn retValue;\r\n\t        };\r\n\t        \r\n\t        var fillArrayWithString = function(str,arrData) \r\n\t        {\r\n\t        \tfor (var count = 0;count < str.length;count++) \r\n\t        \t{\r\n\t        \t\tarrData[count] = str.charCodeAt(count) & 0xFF;\r\n\t            }\r\n\t            return arrData;\r\n\t        };\r\n\t        \r\n\t        var convertTime = function(date)\r\n\t        {\r\n\t        \t var hour = date.getUTCHours();\r\n\t        \t hour = hour << 6;\r\n\t        \t hour = hour | date.getUTCMinutes();\r\n\t        \t hour = hour << 5;\r\n\t        \t hour = hour | date.getUTCSeconds() / 2;\r\n\t        \t return hour;\r\n\t        };\r\n\t        \r\n\t        var convertDate = function(date)\r\n\t        {\r\n\t        \tvar retDate = date.getUTCFullYear() - 1980;\r\n\t        \tretDate = retDate << 4;\r\n\t        \tretDate = retDate | (date.getUTCMonth() + 1);\r\n\t        \tretDate = retDate << 5;\r\n\t        \tretDate = retDate | date.getUTCDate();\r\n\t        \treturn retDate;\r\n\t        };\r\n\t        \r\n\t        var addSlashAtEnd = function(path) \r\n\t    \t{\r\n\t    \t    if (path.slice(-1) !== \"/\") \r\n\t    \t    {\r\n\t    \t        path += \"/\";\r\n\t    \t    }\r\n\t    \t    return path;\r\n\t    \t};\r\n\t    \t\r\n\t    \tvar getParentFolder = function(path) \r\n\t    \t{\r\n\t    \t    if (path.slice(-1) === '/') \r\n\t    \t    {\r\n\t    \t        path = path.substring(0, path.length - 1);\r\n\t    \t    }\r\n\t    \t    var lastSlash = path.lastIndexOf('/');\r\n\t    \t    return (lastSlash > 0) ? path.substring(0, lastSlash) : \"\";\r\n\t    \t};\r\n\t    \t\r\n\t    \tvar getDataType = function(data) \r\n\t    \t{\r\n\t    \t    if (typeof data === \"string\") \r\n\t    \t    {\r\n\t    \t        return \"string\";\r\n\t    \t    }\r\n\t    \t    if (Object.prototype.toString.call(data) === \"[object Array]\") \r\n\t    \t    {\r\n\t    \t        return \"array\";\r\n\t    \t    }\r\n\t    \t    if (typeof Buffer !== \"undefined\" && data instanceof Buffer) \r\n\t    \t    {\r\n\t    \t        return \"nodebuffer\";\r\n\t    \t    }\r\n\t    \t    if (data instanceof Uint8Array) \r\n\t    \t    {\r\n\t    \t        return \"uint8array\";\r\n\t    \t    }\r\n\t    \t    if (data instanceof ArrayBuffer) \r\n\t    \t    {\r\n\t    \t        return \"arraybuffer\";\r\n\t    \t    }\r\n\t    \t};\r\n\t    \t\r\n\t    \tvar base64Decode = function(data) \r\n\t    \t{\r\n\t    \t\tvar chr1, chr2, chr3;\r\n\t    \t    var enc1, enc2, enc3, enc4;\r\n\t    \t    var i = 0, resultIndex = 0;\r\n\t    \t    \r\n\t    \t    if(data.indexOf('base64,') > -1)\r\n\t    \t    {\r\n\t    \t    \tvar index = data.indexOf('base64,') + 'base64,'.length;\r\n\t\t    \t    data = data.substring(index);\r\n\t    \t    }\r\n\t    \t    data = data.replace(/[^A-Za-z0-9\\+\\/\\=]/g, \"\");\r\n\t    \t    var totalLength = data.length * 3 / 4;\r\n\t    \t    if(data.charAt(data.length - 1) === base64Key.charAt(64)) \r\n\t    \t    {\r\n\t    \t        totalLength--;\r\n\t    \t    }\r\n\t    \t    if(data.charAt(data.length - 2) === base64Key.charAt(64)) \r\n\t    \t    {\r\n\t    \t        totalLength--;\r\n\t    \t    }\r\n\t    \t    //totalLength is base64 expected length\r\n\t    \t    if (totalLength % 1 !== 0) \r\n\t    \t    {\r\n\t    \t        throw new Error(\"Invalid base64 data\");\r\n\t    \t    }\r\n\t    \t    var retValue = new Uint8Array(totalLength|0);\r\n\t    \t    while (i < data.length) \r\n\t    \t    {\r\n\t    \t        enc1 = base64Key.indexOf(data.charAt(i++));\r\n\t    \t        enc2 = base64Key.indexOf(data.charAt(i++));\r\n\t    \t        enc3 = base64Key.indexOf(data.charAt(i++));\r\n\t    \t        enc4 = base64Key.indexOf(data.charAt(i++));\r\n\r\n\t    \t        chr1 = (enc1 << 2) | (enc2 >> 4);\r\n\t    \t        chr2 = ((enc2 & 15) << 4) | (enc3 >> 2);\r\n\t    \t        chr3 = ((enc3 & 3) << 6) | enc4;\r\n\r\n\t    \t        retValue[resultIndex++] = chr1;\r\n\r\n\t    \t        if (enc3 !== 64) \r\n\t    \t        {\r\n\t    \t            retValue[resultIndex++] = chr2;\r\n\t    \t        }\r\n\t    \t        if (enc4 !== 64) \r\n\t    \t        {\r\n\t    \t            retValue[resultIndex++] = chr3;\r\n\t    \t        }\r\n\t    \t    }\r\n\r\n\t    \t    return retValue;\r\n\t    \t};\r\n\t    \t\r\n\t    \tvar downloadFile = function(fileName,content)\r\n\t        {\r\n\t        \tif (\"msSaveOrOpenBlob\" in window.navigator) \r\n\t        \t{\r\n\t                window.navigator.msSaveOrOpenBlob(content, fileName);\r\n\t            }\r\n\t            else \r\n\t            {\r\n\t                var element = document.createElement(\"a\");\r\n\t                var url = window.URL.createObjectURL(content);\r\n\t                element.setAttribute(\"href\", url);\r\n\t                element.setAttribute(\"download\", fileName);\r\n\t                element.style.display = \"none\";\r\n\t                document.body.appendChild(element);\r\n\t                element.click();\r\n\t                window.URL.revokeObjectURL(url);\r\n\t                document.body.removeChild(element);\r\n\t            }\r\n\t        };\r\n\t        \r\n\t        initialize();\r\n\t        \r\n\t        self.getFromCrc32Table = getFromCrc32Table;\r\n\t        self.buildUint8Array = buildUint8Array;\r\n\t        self.utf8_encode = utf8_encode;\r\n\t        self.utf8_decode = utf8_decode;\r\n\t        self.decToHex = decToHex;\r\n\t        self.fillArrayWithString = fillArrayWithString;\r\n\t        self.convertTime = convertTime;\r\n\t        self.convertDate = convertDate;\r\n\t        self.addSlashAtEnd = addSlashAtEnd;\r\n\t        self.getParentFolder = getParentFolder;\r\n\t        self.getDataType = getDataType;\r\n\t        self.base64Decode = base64Decode;\r\n\t        self.downloadFile = downloadFile;\r\n\t    };\r\n\t    \r\n\t\tinitialize();\r\n\t\t\r\n\t\tself.addFolder = addFolder;\r\n\t\tself.addFolders = addFolders;\r\n\t\tself.addFile = addFile;\r\n\t\tself.getBlob = getBlob;\r\n\t\tself.getFile = getFile;\r\n\t\tself.downloadFile = downloadFile;\r\n\t};\r\n\t\r\n\treturn NSZip;\r\n})();\r\nnsModuleExport(this,\"NSZip\",NSZip);var NSXlsxExport = (function()\r\n{\r\n\tvar NSXlsxExport = function(config)\r\n\t{\r\n\t\tvar self = this;\r\n\t\tvar xlsxUtil = null;\r\n\t\tvar workbook = null;\r\n\t\tvar styles = null;\r\n\t\tvar setting = {};\r\n\t\tvar sharedString = null;\r\n\t\t\r\n\t\tvar initialize = function()\r\n\t\t{\r\n\t\t\tif(!config)\r\n\t\t\t{\r\n\t\t\t\tconfig = {};\r\n\t\t\t}\r\n\t\t\txlsxUtil = new XlsxUtil();\r\n\t\t\tsetting = {\r\n\t\t\t\tfileName: config[\"fileName\"] || \"download\",\r\n\t\t\t\tsheets: config[\"sheets\"],\r\n\t\t\t\tmaxCharWidth: config[\"maxCharWidth\"]\r\n\t\t\t};\r\n\t\t\tif(!setting.sheets || setting.sheets.length == 0)\r\n\t\t\t{\r\n\t\t\t\txlsxUtil.throwNSError(\"sheets is not defined in config\");\r\n\t\t\t}\r\n\t\t\tif(setting.fileName.indexOf(\".\") === -1) \r\n\t\t\t{\r\n\t\t\t\tsetting.fileName = setting.fileName + \".xlsx\";\r\n\t        }\r\n\t\t\tstyles = new XlsxStyle(xlsxUtil);\r\n\t\t\tsharedString = new XlsxSharedStrings(xlsxUtil);\r\n\t\t\tworkbook = new XlsxWorkbook(xlsxUtil,styles,sharedString,setting.sheets,setting);\r\n\t\t};\r\n\t\t\r\n\t\tvar process = function()\r\n\t\t{\r\n\t\t\tvar mimeType = \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\";\r\n\t\t\tvar zip = new NSZip();\r\n\t\t\tvar xl = zip.addFolder(\"xl\");\r\n\t\t\tsave(zip,xl);\r\n\t\t\tzip.downloadFile(setting.fileName,mimeType);\r\n\t\t};\r\n\t\t\r\n\t\tvar save = function(zip,xl)\r\n\t\t{\r\n\t\t\tvar strWorkbook = workbook.process();\r\n\t\t\tsaveSheets(zip,xl);\r\n\t\t\tsaveStyles(zip,xl);\r\n\t\t\tsaveSharedStrings(zip,xl);\r\n\t\t\tzip.addFile('[Content_Types].xml', getContentTypesXml());\r\n\t\t\tzip.addFile('_rels/.rels', getRels());\r\n\t\t\txl.addFile('workbook.xml', strWorkbook);\r\n\t\t\txl.addFile('_rels/workbook.xml.rels', getWorkbookXMLRels());\r\n\t\t};\r\n\t\t\r\n\t\tvar saveSheets = function(zip,xl)\r\n\t\t{\r\n\t\t\tfor(var count = 0;count < setting.sheets.length;count++)\r\n\t\t\t{\r\n\t\t\t\tvar sheet = workbook.getSheet(count);\r\n\t\t\t\txl.addFile(sheet.getPath(),sheet.getSheetData());\r\n\t\t\t\txlsxUtil.addSheetProp(\"relationship\",sheet.getRelationship());\r\n\t\t\t\txlsxUtil.addSheetProp(\"override\",sheet.getOverride());\r\n\t\t\t}\r\n\t\t};\r\n\t\t\r\n\t\tvar getWorkbookXMLRels = function()\r\n\t\t{\r\n\t\t\tvar relationShip = {style:{type:xlsxUtil.schemas.stylesheet,target:'styles.xml'},\r\n\t\t\t\t\t\t\t\tsharedStrings:{type:xlsxUtil.schemas.sharedStrings,target:'sharedStrings.xml'}\r\n\t\t\t\t\t\t\t   };\r\n\t\t\tvar arrChild = [];\r\n\t\t\tvar index = setting.sheets.length;\r\n\t\t\tfor(var key in relationShip)\r\n\t\t\t{\r\n\t\t\t\tvar item = relationShip[key];\r\n\t\t\t\tarrChild.push(xlsxUtil.getXML({\r\n\t\t\t\t\t\tname: 'Relationship',\r\n\t\t\t\t\t\tattributes: {'Id':'rId' + (++index),'Type': item.type,'Target': item.target}\r\n\t\t\t\t}));\r\n\t\t\t}\r\n\t\t\tarrChild.push(xlsxUtil.getSheetProp(\"relationship\"));\r\n\t\t\t\r\n\t\t\treturn xlsxUtil.getXML({\r\n\t\t\t\tname: 'Relationships',\r\n\t\t\t\tns: 'relationshipPackage',\r\n\t\t\t\tchildren: arrChild\r\n\t\t\t});\r\n\t\t};\r\n\t\t\r\n\t\tvar saveStyles = function(zip,xl)\r\n\t\t{\r\n\t\t\txl.addFile('styles.xml', styles.getTag());\r\n\t\t};\r\n\t\t\r\n\t\tvar saveSharedStrings = function(zip,xl)\r\n\t\t{\r\n\t\t\tif (sharedString.hasString() > 0) \r\n\t\t\t{\r\n\t\t\t\txl.addFile('sharedStrings.xml', sharedString.getTag());\r\n\t\t\t}\r\n\t\t};\r\n\t\t\r\n\t\tvar getRels = function()\r\n\t\t{\r\n\t\t\tvar rels = '<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\\n ' +\r\n\t\t\t'<Relationships xmlns=\"http://schemas.openxmlformats.org/package/2006/relationships\">\\n ' +\r\n\t\t\t'<Relationship Id=\"rId1\" Type=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument\" Target=\"xl/workbook.xml\"/>\\n ' +\r\n\t\t\t'</Relationships>';\r\n\t\t\t\r\n\t\t\treturn rels;\r\n\t\t};\r\n\t\t\r\n\t\tvar getContentTypesXml = function()\r\n\t\t{\r\n\t\t\tvar override = {workbook:{partName:'/xl/workbook.xml',contentType:'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml'},\r\n\t\t\t\t\t\t\t\tstyles:{partName:'/xl/styles.xml',contentType:'application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml'}\r\n\t\t\t\t   \t\t\t   };\r\n\t\t\tif (sharedString.hasString() > 0) \r\n\t\t\t{\r\n\t\t\t\toverride[\"sharedStrings\"] = {partName:'/xl/sharedStrings.xml',contentType:'application/vnd.openxmlformats-officedocument.spreadsheetml.sharedStrings+xml'}\r\n\t\t\t}\r\n\t\t\tvar arrChild = [];\r\n\t\t\tarrChild.push('<Default Extension=\"rels\" ContentType=\"application/vnd.openxmlformats-package.relationships+xml\"/>');\r\n\t\t\tarrChild.push('<Default Extension=\"xml\" ContentType=\"application/xml\"/>');\r\n\t\t\tfor(var key in override)\r\n\t\t\t{\r\n\t\t\t\tvar item = override[key];\r\n\t\t\t\tarrChild.push(xlsxUtil.getXML({\r\n\t\t\t\t\t\tname: 'Override',\r\n\t\t\t\t\t\tattributes: {'PartName': item.partName,'ContentType': item.contentType}\r\n\t\t\t\t}));\r\n\t\t\t}\r\n\t\t\tarrChild.push(xlsxUtil.getSheetProp(\"override\"));\r\n\t\t\t\r\n\t\t\treturn xlsxUtil.getXML({\r\n\t\t\t\tname: 'Types',\r\n\t\t\t\tns: 'contentTypes',\r\n\t\t\t\tchildren: arrChild\r\n\t\t\t});\r\n\t\t};\r\n\t\t\r\n\t\tvar XlsxStyle = function(util)\r\n\t\t{\r\n\t\t\tvar self = this;\r\n\t\t\tvar objTypes = {numberFormats:{def: StyleNumberFormat},\r\n\t\t\t\t\t\t\tfonts:{def: StyleFonts},\r\n\t\t\t\t\t\t\tfills:{def: StyleFills},\r\n\t\t\t\t\t\t\tborders:{def: StyleBorder},\r\n\t\t\t\t\t\t\tcells:{def: StyleCells}};\r\n\t\t\tvar defaultTableStyle = '';\r\n\t\t\tvar mergeCache = {};\r\n\t\t\t\r\n\t\t\tvar initialize = function()\r\n\t\t\t{\r\n\t\t\t\tfor(var key in objTypes)\r\n\t\t\t\t{\r\n\t\t\t\t\tobjTypes[key][\"ins\"] = new objTypes[key][\"def\"](util,self);\r\n\t\t\t\t}\r\n\t\t\t};\r\n\t\t\t\r\n\t\t\tvar addFormat = function(style,name) \r\n\t\t\t{\r\n\t\t\t\treturn objTypes[\"cells\"][\"ins\"].add(style,name);\r\n\t\t\t};\r\n\t\t\t\r\n\t\t\tvar getStyle = function(name) \r\n\t\t\t{\r\n\t\t\t\treturn objTypes[\"cells\"][\"ins\"].getStyle(name);\r\n\t\t\t};\r\n\t\t\t\r\n\t\t\tvar getStyleID = function(name) \r\n\t\t\t{\r\n\t\t\t\treturn objTypes[\"cells\"][\"ins\"].getStyleID(name);\r\n\t\t\t};\r\n\t\t\t\r\n\t\t\tvar addFillOutFormat = function(objStyle)\r\n\t\t\t{\r\n\t\t\t\tif (getStyle(objStyle).fillOut) \r\n\t\t\t\t{\r\n\t\t\t\t\treturn objStyle;\r\n\t\t\t\t}\r\n\t\t\t\tvar style = objTypes[\"cells\"][\"ins\"].cutVisible(objTypes[\"cells\"][\"ins\"].fullGet(objStyle));\r\n\t\t\t\tif(!util.isObjectEmpty(style))\r\n\t\t\t\t{\r\n\t\t\t\t\treturn addFormat(style);\r\n\t\t\t\t}\r\n\t\t\t\treturn null;\r\n\t\t\t};\r\n\t\t\t\r\n\t\t\tvar merge = function(format)\r\n\t\t\t{\r\n\t\t\t\tvar formats = [];\r\n\t\t\t\tfor(var count = 0;count < arguments.length;count++)\r\n\t\t\t\t{\r\n\t\t\t\t\tif(arguments[count])\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tformats.push(arguments[count]);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tif (formats.length === 0) \r\n\t\t\t\t{\r\n\t\t\t\t\treturn null;\r\n\t\t\t\t} \r\n\t\t\t\telse if (formats.length === 1) \r\n\t\t\t\t{\r\n\t\t\t\t\treturn addFormat(formats[0]);\r\n\t\t\t\t}\r\n\t\t\t\telse \r\n\t\t\t\t{\r\n\t\t\t\t\t//https://www.w3schools.com/jsref/jsref_reduce.asp\r\n\t\t\t\t\tvar id = formats.reduce(function (total, currentValue,currentIndex, arr) \r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\treturn total + JSON.stringify(currentValue);\r\n\t\t\t\t\t\t\t}, '');\r\n\t\t\t\t\tvar merged = mergeCache[id];\r\n\t\t\t\t\tif (!merged) \r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tvar cells = objTypes[\"cells\"][\"ins\"];\r\n\t\t\t\t\t\tvar newFormat = {};\r\n\t\t\t\t\t\tfor(var index = 0;index < formats.length;index++)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tvar format = formats[index];\r\n\t\t\t\t\t\t\tnewFormat = cells.merge(newFormat,cells.fullGet(format));\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tmerged = cells.add(newFormat,null,{ merge: true});\r\n\t\t\t\t\t\tmergeCache[id] = merged;\r\n\t\t\t\t\t}\r\n\t\t\t\t\treturn merged;\r\n\t\t\t\t}\r\n\t\t\t\treturn null;\r\n\t\t\t};\r\n\t\t\t\r\n\t\t\tvar addFontFormat = function(format, name) \r\n\t\t\t{\r\n\t\t\t\treturn objTypes[\"fonts\"][\"ins\"].add(format, name);\r\n\t\t\t};\r\n\t\t\t\r\n\t\t\tvar addBorderFormat = function(format, name) \r\n\t\t\t{\r\n\t\t\t\treturn objTypes[\"borders\"][\"ins\"].add(format, name);\r\n\t\t\t};\r\n\t\t\t\r\n\t\t\tvar addPatternFormat = function(format, name) \r\n\t\t\t{\r\n\t\t\t\treturn objTypes[\"fills\"][\"ins\"].add(format, name, {fillType:'pattern'});\r\n\t\t\t};\r\n\t\t\t\r\n\t\t\tvar addGradientFormat = function(format, name) \r\n\t\t\t{\r\n\t\t\t\treturn objTypes[\"fills\"][\"ins\"].add(format, name, {fillType:'gradient'});\r\n\t\t\t};\r\n\t\t\t\r\n\t\t\tvar addNumberFormat = function(format, name) \r\n\t\t\t{\r\n\t\t\t\treturn objTypes[\"numberFormats\"][\"ins\"].add(format, name);\r\n\t\t\t};\r\n\t\t\t\r\n\t\t\tvar addTableFormat = function(format, name) \r\n\t\t\t{\r\n\t\t\t\t//return objTypes[\"numberFormats\"][\"ins\"].add(format, name);\r\n\t\t\t};\r\n\t\t\t\r\n\t\t\tvar addTableElementFormat = function(format, name) \r\n\t\t\t{\r\n\t\t\t\t//return objTypes[\"numberFormats\"][\"ins\"].add(format, name);\r\n\t\t\t};\r\n\t\t\t\r\n\t\t\tvar setDefaultTableStyle = function(format, name) \r\n\t\t\t{\r\n\t\t\t\t//return objTypes[\"numberFormats\"][\"ins\"].add(format, name);\r\n\t\t\t};\r\n\t\t\t\r\n\t\t\tvar getTag = function(objStyle)\r\n\t\t\t{\r\n\t\t\t\tvar arrChildren = [];\r\n\t\t\t\tfor(var key in objTypes)\r\n\t\t\t\t{\r\n\t\t\t\t\t//console.log(key + \" :: \" + objTypes[key][\"ins\"].getFinalTag());\r\n\t\t\t\t\tarrChildren.push(objTypes[key][\"ins\"].getFinalTag());\r\n\t\t\t\t}\r\n\t\t\t\treturn util.getXML({\r\n\t\t\t\t\tname: 'styleSheet',\r\n\t\t\t\t\tns: 'spreadsheetml',\r\n\t\t\t\t\tchildren: arrChildren\r\n\t\t\t\t});\r\n\t\t\t};\r\n\t\t\t\r\n\t\t\tinitialize();\r\n\t\t\t\r\n\t\t\tself.addFormat = addFormat;\r\n\t\t\tself.getStyle = getStyle;\r\n\t\t\tself.getStyleID = getStyleID;\r\n\t\t\tself.addFillOutFormat = addFillOutFormat;\r\n\t\t\tself.merge = merge;\r\n\t\t\tself.addFontFormat = addFontFormat;\r\n\t\t\tself.addBorderFormat = addBorderFormat;\r\n\t\t\tself.addPatternFormat = addPatternFormat;\r\n\t\t\tself.addGradientFormat = addGradientFormat;\r\n\t\t\tself.addNumberFormat = addNumberFormat;\r\n\t\t\tself.addTableFormat = addTableFormat;\r\n\t\t\tself.addTableElementFormat = addTableElementFormat;\r\n\t\t\tself.setDefaultTableStyle = setDefaultTableStyle;\r\n\t\t\tself.getTag = getTag;\r\n\t\t\t\r\n\t\t\tself.objTypes = objTypes;\r\n\t\t\t\r\n\t\t};\r\n\t\t\r\n\t\tvar StyleCells = function(util,xlsxStyle)\r\n\t\t{\r\n\t\t\tvar self =  this;\r\n\t\t\tvar style = new XlsxBaseStyle(util,xlsxStyle);\r\n\t\t\tstyle.formatName = \"format\";\r\n\t\t\tstyle.saveName = \"cellXfs\";\r\n\t\t\tvar alignment = new XlsxAlignment(util);\r\n\t\t\tvar protection = new XlsxProtection(util);\r\n\t\t\t\r\n\t\t\tvar ALLOWED_PARTS = ['format', 'fill', 'border', 'font'];\r\n\t\t\tvar XLS_NAMES = ['numFmtId', 'fillId', 'borderId', 'fontId'];\r\n\t\t\t\r\n\t\t\tvar initialize = function()\r\n\t\t\t{\r\n\t\t\t\tstyle.formats.push({format: style.getStyleObj({})});\r\n\t\t\t\tfor(var key in util.numberPredifined)\r\n\t\t\t\t{\r\n\t\t\t\t\tstyle.predefined[key] = {format: key};\r\n\t\t\t\t}\r\n\t\t\t\tstyle.idIndex = style.formats.length;\r\n\t\t\t\tstyle.saveEmpty = false;\r\n\t\t\t};\r\n\t\t\t\r\n\t\t\tstyle.getStyleObj = function(objStyle,prop)\r\n\t\t\t{\r\n\t\t\t\tvar retValue = {};\r\n\t\t\t\t\r\n\t\t\t\tif (objStyle.format) \r\n\t\t\t\t{\r\n\t\t\t\t\tretValue.format = xlsxStyle.objTypes[\"numberFormats\"][\"ins\"].add(objStyle.format);\r\n\t\t\t\t}\r\n\t\t\t\tif (objStyle.font) \r\n\t\t\t\t{\r\n\t\t\t\t\tretValue.font = xlsxStyle.objTypes[\"fonts\"][\"ins\"].add(objStyle.font);\r\n\t\t\t\t}\r\n\t\t\t\tif (objStyle.pattern) \r\n\t\t\t\t{\r\n\t\t\t\t\tretValue.fill = xlsxStyle.objTypes[\"fills\"][\"ins\"].add(objStyle.pattern, null, { fillType: 'pattern' });\r\n\t\t\t\t}\r\n\t\t\t\telse if (objStyle.gradient) \r\n\t\t\t\t{\r\n\t\t\t\t\tretValue.fill = xlsxStyle.objTypes[\"fills\"][\"ins\"].add(objStyle.gradient, null, { fillType: 'gradient' });\r\n\t\t\t\t} \r\n\t\t\t\telse if (prop && prop.merge && objStyle.fill) \r\n\t\t\t\t{\r\n\t\t\t\t\tretValue.fill = xlsxStyle.objTypes[\"fills\"][\"ins\"].add(objStyle.fill, null, prop);\r\n\t\t\t\t}\r\n\t\t\t\tif (objStyle.border) \r\n\t\t\t\t{\r\n\t\t\t\t\tretValue.border = xlsxStyle.objTypes[\"borders\"][\"ins\"].add(objStyle.border);\r\n\t\t\t\t}\r\n\t\t\t\tvar alignmentValue = prop && prop.merge ? alignment.getStyleObj(objStyle.alignment) : alignment.getStyleObj(objStyle);\r\n\t\t\t\tif (alignmentValue) \r\n\t\t\t\t{\r\n\t\t\t\t\tretValue.alignment = alignmentValue;\r\n\t\t\t\t}\r\n\t\t\t\tvar protectionValue = prop && prop.merge ? protection.getStyleObj(objStyle.protection) : protection.getStyleObj(objStyle);\r\n\t\t\t\tif (protectionValue) \r\n\t\t\t\t{\r\n\t\t\t\t\tretValue.protection = protectionValue;\r\n\t\t\t\t}\r\n\t\t\t\tif (objStyle.fillOut) \r\n\t\t\t\t{\r\n\t\t\t\t\tretValue.fillOut = objStyle.fillOut;\r\n\t\t\t\t}\r\n\t\t\t\treturn retValue;\r\n\t\t\t};\r\n\t\t\t\r\n\t\t\tstyle.fullGet = function(objStyle)\r\n\t\t\t{\r\n\t\t\t\tif (style.getStyleID(objStyle)) \r\n\t\t\t\t{\r\n\t\t\t\t\tobjStyle = style.getStyle(objStyle);\r\n\t\t\t\t} \r\n\t\t\t\telse \r\n\t\t\t\t{\r\n\t\t\t\t\tobjStyle = style.getStyleObj(objStyle);\r\n\t\t\t\t}\r\n\t\t\t\tvar retValue = {};\r\n\t\t\t\tif (objStyle.format) \r\n\t\t\t\t{\r\n\t\t\t\t\tretValue.format = xlsxStyle.objTypes[\"numberFormats\"][\"ins\"].getStyle(objStyle.format);\r\n\t\t\t\t}\r\n\t\t\t\tif (objStyle.font) \r\n\t\t\t\t{\r\n\t\t\t\t\tretValue.font = xlsxStyle.objTypes[\"fonts\"][\"ins\"].getStyle(objStyle.font);\r\n\t\t\t\t}\r\n\t\t\t\tif (objStyle.fill) \r\n\t\t\t\t{\r\n\t\t\t\t\tretValue.fill = xlsxStyle.objTypes[\"fills\"][\"ins\"].getStyle(objStyle.fill);\r\n\t\t\t\t}\r\n\t\t\t\tif (objStyle.border) \r\n\t\t\t\t{\r\n\t\t\t\t\tretValue.border = xlsxStyle.objTypes[\"borders\"][\"ins\"].getStyle(objStyle.border);\r\n\t\t\t\t}\r\n\t\t\t\tif (objStyle.alignment) \r\n\t\t\t\t{\r\n\t\t\t\t\tretValue.alignment = objStyle.alignment;\r\n\t\t\t\t}\r\n\t\t\t\tif (objStyle.protection) \r\n\t\t\t\t{\r\n\t\t\t\t\tretValue.protection = objStyle.protection;\r\n\t\t\t\t}\r\n\t\t\t\treturn retValue;\r\n\t\t\t};\r\n\t\t\t\r\n\t\t\tstyle.cutVisible = function(objStyle) \r\n\t\t\t{\r\n\t\t\t\tvar retValue = {};\r\n\t\t\t\tif (objStyle.format) \r\n\t\t\t\t{\r\n\t\t\t\t\tretValue.format = objStyle.format;\r\n\t\t\t\t}\r\n\t\t\t\tif (objStyle.font) \r\n\t\t\t\t{\r\n\t\t\t\t\tretValue.font = objStyle.font;\r\n\t\t\t\t}\r\n\t\t\t\tif (objStyle.alignment) \r\n\t\t\t\t{\r\n\t\t\t\t\tretValue.alignment = objStyle.alignment;\r\n\t\t\t\t}\r\n\t\t\t\tif (objStyle.protection) \r\n\t\t\t\t{\r\n\t\t\t\t\tretValue.protection = objStyle.protection;\r\n\t\t\t\t}\r\n\t\t\t\treturn retValue;\r\n\t\t\t};\r\n\t\t\t\r\n\t\t\tstyle.merge = function(formatTo,formatFrom) \r\n\t\t\t{\r\n\t\t\t\tif (formatTo.format || formatFrom.format) \r\n\t\t\t\t{\r\n\t\t\t\t\tformatTo.format = xlsxStyle.objTypes[\"numberFormats\"][\"ins\"].merge(formatTo.format, formatFrom.format);\r\n\t\t\t\t}\r\n\t\t\t\tif (formatTo.font || formatFrom.font) \r\n\t\t\t\t{\r\n\t\t\t\t\tformatTo.font = xlsxStyle.objTypes[\"fonts\"][\"ins\"].merge(formatTo.font, formatFrom.font);\r\n\t\t\t\t}\r\n\t\t\t\tif (formatTo.fill || formatFrom.fill) \r\n\t\t\t\t{\r\n\t\t\t\t\tformatTo.fill = xlsxStyle.objTypes[\"fills\"][\"ins\"].merge(formatTo.fill, formatFrom.fill);\r\n\t\t\t\t}\r\n\t\t\t\tif (formatTo.border || formatFrom.border) \r\n\t\t\t\t{\r\n\t\t\t\t\tformatTo.border = xlsxStyle.objTypes[\"borders\"][\"ins\"].merge(formatTo.border, formatFrom.border);\r\n\t\t\t\t}\r\n\t\t\t\tif (formatTo.alignment || formatFrom.alignment) \r\n\t\t\t\t{\r\n\t\t\t\t\tformatTo.alignment = alignment.merge(formatTo.alignment, formatFrom.alignment);\r\n\t\t\t\t}\r\n\t\t\t\tif (formatTo.protection || formatFrom.protection) \r\n\t\t\t\t{\r\n\t\t\t\t\tformatTo.protection = protection.merge(formatTo.protection, formatFrom.protection);\r\n\t\t\t\t}\r\n\t\t\t\treturn formatTo;\r\n\t\t\t};\r\n\t\t\t\r\n\t\t\tstyle.getTag = function(objStyle)\r\n\t\t\t{\r\n\t\t\t\tvar attributes = {};\r\n\t\t\t\tvar children = [];\r\n\t\t\t\tif (objStyle.alignment) \r\n\t\t\t\t{\r\n\t\t\t\t\tchildren.push(alignment.getTag(objStyle.alignment));\r\n\t\t\t\t\tattributes['applyAlignment'] = true;\r\n\t\t\t\t}\r\n\t\t\t\tif (objStyle.protection) \r\n\t\t\t\t{\r\n\t\t\t\t\tchildren.push(protection.getTag(objStyle.protection));\r\n\t\t\t\t\tattributes['applyProtection'] = true;\r\n\t\t\t\t}\r\n\t\t\t\tfor(var key in objStyle)\r\n\t\t\t\t{\r\n\t\t\t\t\tif(ALLOWED_PARTS.indexOf(key) > -1)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tvar value = objStyle[key];\r\n\t\t\t\t\t\tvar xlsName = XLS_NAMES[ALLOWED_PARTS.indexOf(key)];\r\n\t\t\t\t\t\tif (key === 'format') \r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tattributes[xlsName] = xlsxStyle.objTypes[\"numberFormats\"][\"ins\"].getStyleID(value);\r\n\t\t\t\t\t\t\tattributes['applyNumberFormat'] = true;\r\n\t\t\t\t\t\t} \r\n\t\t\t\t\t\telse if (key === 'fill') \r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tattributes[xlsName] = xlsxStyle.objTypes[\"fills\"][\"ins\"].getStyleID(value);\r\n\t\t\t\t\t\t\tattributes['applyFill'] = true;\r\n\t\t\t\t\t\t} \r\n\t\t\t\t\t\telse if (key === 'border') \r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tattributes[xlsName] = xlsxStyle.objTypes[\"borders\"][\"ins\"].getStyleID(value);\r\n\t\t\t\t\t\t\tattributes['applyBorder'] = true;\r\n\t\t\t\t\t\t} \r\n\t\t\t\t\t\telse if (key === 'font') \r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tattributes[xlsName] = xlsxStyle.objTypes[\"fonts\"][\"ins\"].getStyleID(value);\r\n\t\t\t\t\t\t\tattributes['applyFont'] = true;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn util.getXML({\r\n\t\t\t\t\tname: 'xf',\r\n\t\t\t\t\tattributes: attributes,\r\n\t\t\t\t\tchildren: children\r\n\t\t\t\t});\r\n\t\t\t};\r\n\t\t\t\r\n\t\t\tinitialize();\r\n\t\t\t\r\n\t\t\treturn style;\r\n\t\t};\r\n\t\t\r\n\t\tvar StyleBorder = function(util,xlsxStyle)\r\n\t\t{\r\n\t\t\tvar self =  this;\r\n\t\t\tvar style = new XlsxBaseStyle(util,xlsxStyle);\r\n\t\t\tstyle.formatName = \"border\";\r\n\t\t\tstyle.saveName = \"borders\";\r\n\t\t\tvar mainBorders = ['left', 'right', 'top', 'bottom'];\r\n\t\t\tvar borders = ['left', 'right', 'top', 'bottom', 'diagonal'];\r\n\t\t\tvar borderStyle = {\r\n\t\t\t\t\tdashDot: 'dashDot',\r\n\t\t\t\t\tdashDotDot: 'dashDotDot',\r\n\t\t\t\t\tdashed: 'dashed',\r\n\t\t\t\t\tdotted: 'dotted',\r\n\t\t\t\t\tdouble: 'double',\r\n\t\t\t\t\thair: 'hair',\r\n\t\t\t\t\tmedium: 'medium',\r\n\t\t\t\t\tmediumDashDot: 'mediumDashDot',\r\n\t\t\t\t\tmediumDashDotDot: 'mediumDashDotDot',\r\n\t\t\t\t\tmediumDashed: 'mediumDashed',\r\n\t\t\t\t\tnone: 'none',\r\n\t\t\t\t\tslantDashDot: 'slantDashDot',\r\n\t\t\t\t\tthick: 'thick',\r\n\t\t\t\t\tthin: 'thin'\r\n\t\t\t};\r\n\t\t\t\r\n\t\t\tvar initialize = function()\r\n\t\t\t{\r\n\t\t\t\tstyle.formats.push({format: style.getStyleObj({})});\r\n\t\t\t\tstyle.idIndex = style.formats.length;\r\n\t\t\t};\r\n\t\t\t\r\n\t\t\tstyle.getStyleObj = function(objStyle)\r\n\t\t\t{\r\n\t\t\t\tvar retValue = {};\r\n\t\t\t\tif(!objStyle)\r\n\t\t\t\t{\r\n\t\t\t\t\tobjStyle = {};\r\n\t\t\t\t}\r\n\t\t\t\tif(objStyle[\"style\"] || objStyle[\"color\"])\r\n\t\t\t\t{\r\n\t\t\t\t\tif (!objStyle[\"style\"] || borderStyle[objStyle[\"style\"]]) \r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tfor(var index = 0;index < mainBorders.length;index++)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tretValue[mainBorders[index]] = {style: objStyle.style,color: objStyle.color};\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\telse\r\n\t\t\t\t{\r\n\t\t\t\t\tfor(var index = 0;index < borders.length;index++)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tvar name = borders[index];\r\n\t\t\t\t\t\tvar border = objStyle[name];\r\n\t\t\t\t\t\tif (border && (!objStyle.style || borderStyle[border.style])) \r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tretValue[name] = {style: border.style,color: border.color };\r\n\t\t\t\t\t\t} \r\n\t\t\t\t\t\telse \r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tretValue[name] = {};\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\treturn retValue;\r\n\t\t\t};\r\n\t\t\t\r\n\t\t\tstyle.getTag = function(objStyle)\r\n\t\t\t{\r\n\t\t\t\tvar tagChildren = [];\r\n\t\t\t\tfor(var index = 0;index < borders.length;index++)\r\n\t\t\t\t{\r\n\t\t\t\t\tvar childTag = borders[index];\r\n\t\t\t\t\tvar border = objStyle[childTag];\r\n\t\t\t\t\tvar attributes = null;\r\n\t\t\t\t\tvar children = null;\r\n\r\n\t\t\t\t\tif (border) \r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tif (border.style) \r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tattributes = {'style': border.style};\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tif (border.color) \r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tchildren = [util.getColorTag(border.color)];\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\ttagChildren.push(util.getXML({\r\n\t\t\t\t\t\tname: childTag,\r\n\t\t\t\t\t\tattributes: attributes,\r\n\t\t\t\t\t\tchildren: children\r\n\t\t\t\t\t}));\r\n\t\t\t\t}\r\n\t\t\t\treturn util.getXML({\r\n\t\t\t\t\tname: 'border',\r\n\t\t\t\t\tchildren: tagChildren\r\n\t\t\t\t});\r\n\t\t\t};\r\n\t\t\t\r\n\t\t\tstyle.merge = function(formatTo,formatFrom)\r\n\t\t\t{\r\n\t\t\t\tformatTo = (!util.isUndefinedOrNull(formatTo)) ? formatTo : style.getStyleObj({});\r\n\t\t\t\tif (formatFrom) \r\n\t\t\t\t{\r\n\t\t\t\t\tfor(var index = 0;index < borders.length;index++)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tvar childTag = borders[index];\r\n\t\t\t\t\t\tvar borderFrom = formatFrom[childTag];\r\n\t\t\t\t\t\tif (borderFrom && borderFrom.style) \r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tformatTo[childTag].style = borderFrom.style;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tif (borderFrom && borderFrom.color) \r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tformatTo[childTag].color = borderFrom.color;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\treturn formatTo;\r\n\t\t\t};\r\n\t\t\t\r\n\t\t\tinitialize();\r\n\t\t\t\r\n\t\t\tstyle.borderStyle = borderStyle;\r\n\t\t\t\r\n\t\t\treturn style;\r\n\t\t};\r\n\t\t\r\n\t\tvar StyleFills = function(util,xlsxStyle)\r\n\t\t{\r\n\t\t\tvar self =  this;\r\n\t\t\tvar style = new XlsxBaseStyle(util,xlsxStyle);\r\n\t\t\tstyle.formatName = \"fill\";\r\n\t\t\tstyle.saveName = \"fills\";\r\n\t\t\t\r\n\t\t\tvar PATTERN_TYPES = ['none', 'solid', 'darkGray', 'mediumGray', 'lightGray', 'gray125', 'gray0625', 'darkHorizontal', 'darkVertical', 'darkDown', 'darkUp', 'darkGrid', 'darkTrellis', 'lightHorizontal', 'lightVertical', 'lightDown', 'lightUp', 'lightGrid', 'lightTrellis'];\r\n\t\t\t\r\n\t\t\tvar initialize = function()\r\n\t\t\t{\r\n\t\t\t\tstyle.formats.push({format: style.getStyleObj({ type: 'none' }, { fillType: 'pattern' }) }, { format: style.getStyleObj({ type: 'gray125' }, { fillType: 'pattern' }) });\r\n\t\t\t\tstyle.idIndex = style.formats.length;\r\n\t\t\t};\r\n\t\t\t\r\n\t\t\tstyle.getStyleObj = function(objStyle,prop)\r\n\t\t\t{\r\n\t\t\t\tvar retValue = {};\r\n\t\t\t\tretValue[\"fillType\"] = prop.merge ? objStyle.fillType : prop.fillType;\r\n\t\t\t\tif(retValue[\"fillType\"] === \"pattern\")\r\n\t\t\t\t{\r\n\t\t\t\t\tvar fgColor = (prop.merge ? objStyle.fgColor : objStyle.color) || 'FFFFFFFF';\r\n\t\t\t\t\tvar bgColor = (prop.merge ? objStyle.bgColor : objStyle.backColor) || 'FFFFFFFF';\r\n\t\t\t\t\tvar patternType = prop.merge ? objStyle.patternType : objStyle.type;\r\n\t\t\t\t\t\r\n\t\t\t\t\tretValue[\"patternType\"] = util.hasInArray(PATTERN_TYPES, patternType) ? patternType : 'solid';\r\n\t\t\t\t\tif (prop.isTable && retValue.patternType === 'solid') \r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tretValue[\"fgColor\"] = bgColor;\r\n\t\t\t\t\t\tretValue[\"bgColor\"] = fgColor;\r\n\t\t\t\t\t} \r\n\t\t\t\t\telse \r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tretValue[\"fgColor\"] = fgColor;\r\n\t\t\t\t\t\tretValue[\"bgColor\"] = bgColor;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\telse \r\n\t\t\t\t{\r\n\t\t\t\t\tif (!util.isUndefinedOrNull(objStyle['left']))\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tretValue.left = objStyle.left || 0;\r\n\t\t\t\t\t\tretValue.right = objStyle.right || 0;\r\n\t\t\t\t\t\tretValue.top = objStyle.top || 0;\r\n\t\t\t\t\t\tretValue.bottom = objStyle.bottom || 0;\r\n\t\t\t\t\t} \r\n\t\t\t\t\telse \r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tretValue.degree = objStyle.degree || 0;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tretValue.start = objStyle.start || 'FFFFFFFF';\r\n\t\t\t\t\tretValue.end = objStyle.end || 'FFFFFFFF';\r\n\t\t\t\t}\r\n\t\t\t\t\r\n\t\t\t\treturn retValue;\r\n\t\t\t};\r\n\t\t\t\r\n\t\t\tstyle.getTag = function(objStyle)\r\n\t\t\t{\r\n\t\t\t\tvar children = (objStyle.fillType === 'pattern') ? [getPatternTag(objStyle)] : [getGradientTag(objStyle)];\r\n\r\n\t\t\t\treturn util.getXML({\r\n\t\t\t\t\tname: 'fill',\r\n\t\t\t\t\tchildren: children\r\n\t\t\t\t});\r\n\t\t\t};\r\n\t\t\t\r\n\t\t\tvar getPatternTag = function(objStyle) \r\n\t\t\t{\r\n\t\t\t\tvar attributes = {'patternType': objStyle.patternType};\r\n\t\t\t\tvar children = [util.getXML({\r\n\t\t\t\t\tname: 'fgColor',\r\n\t\t\t\t\tattributes: {'rgb': util.getCanonColor(objStyle.fgColor)}\r\n\t\t\t\t}), util.getXML({\r\n\t\t\t\t\tname: 'bgColor',\r\n\t\t\t\t\tattributes: {'rgb': util.getCanonColor(objStyle.bgColor)}\r\n\t\t\t\t})];\r\n\r\n\t\t\t\treturn util.getXML({\r\n\t\t\t\t\tname: 'patternFill',\r\n\t\t\t\t\tattributes: attributes,\r\n\t\t\t\t\tchildren: children\r\n\t\t\t\t});\r\n\t\t\t};\r\n\t\t\t\r\n\t\t\tvar getGradientTag = function(objStyle) \r\n\t\t\t{\r\n\t\t\t\tvar attributes = {};\r\n\r\n\t\t\t\tif (objStyle.degree) \r\n\t\t\t\t{\r\n\t\t\t\t\tattributes['degree'] = objStyle.degree;\r\n\t\t\t\t} \r\n\t\t\t\telse if (objStyle.left) \r\n\t\t\t\t{\r\n\t\t\t\t\tattributes['type'] = 'path';\r\n\t\t\t\t\tattributes['left'] = objStyle.left;\r\n\t\t\t\t\tattributes['right'] = objStyle.right;\r\n\t\t\t\t\tattributes['top'] = objStyle.top;\r\n\t\t\t\t\tattributes['bottom'] = objStyle.bottom;\r\n\t\t\t\t}\r\n\t\t\t\tvar children = [util.getXML({\r\n\t\t\t\t\tname: 'stop',\r\n\t\t\t\t\tattributes: {'position': 0},\r\n\t\t\t\t\tchildren: [util.getColorTag(objStyle.start)]\r\n\t\t\t\t}), util.getXML({\r\n\t\t\t\t\tname: 'stop',\r\n\t\t\t\t\tattributes: {'position': 1},\r\n\t\t\t\t\tchildren: [util.getColorTag(objStyle.end)]\r\n\t\t\t\t})];\r\n\r\n\t\t\t\treturn util.getXML({\r\n\t\t\t\t\tname: 'gradientFill',\r\n\t\t\t\t\tattributes: attributes,\r\n\t\t\t\t\tchildren: children\r\n\t\t\t\t});\r\n\t\t\t};\r\n\r\n\t\t\t\r\n\t\t\tinitialize();\r\n\t\t\t\r\n\t\t\treturn style;\r\n\t\t};\r\n\t\t\r\n\t\tvar StyleFonts = function(util,xlsxStyle)\r\n\t\t{\r\n\t\t\tvar self =  this;\r\n\t\t\tvar style = new XlsxBaseStyle(util,xlsxStyle);\r\n\t\t\tstyle.formatName = \"font\";\r\n\t\t\tstyle.saveName = \"fonts\";\r\n\t\t\t\r\n\t\t\tvar initialize = function()\r\n\t\t\t{\r\n\t\t\t\tstyle.formats.push({format: style.getStyleObj({})});\r\n\t\t\t\tstyle.idIndex = style.formats.length;\r\n\t\t\t};\r\n\t\t\t\r\n\t\t\tstyle.getStyleObj = function(objStyle)\r\n\t\t\t{\r\n\t\t\t\tvar retValue = {};\r\n\r\n\t\t\t\tif (objStyle['bold']) \r\n\t\t\t\t{\r\n\t\t\t\t\tretValue.bold = !!objStyle.bold;\r\n\t\t\t\t}\r\n\t\t\t\tif (objStyle['italic']) \r\n\t\t\t\t{\r\n\t\t\t\t\tretValue.italic = !!objStyle.italic;\r\n\t\t\t\t}\r\n\t\t\t\tif (objStyle.superscript) \r\n\t\t\t\t{\r\n\t\t\t\t\tretValue.vertAlign = 'superscript';\r\n\t\t\t\t}\r\n\t\t\t\tif (objStyle.subscript) \r\n\t\t\t\t{\r\n\t\t\t\t\tretValue.vertAlign = 'subscript';\r\n\t\t\t\t}\r\n\t\t\t\tif (objStyle.underline) \r\n\t\t\t\t{\r\n\t\t\t\t\tvar arrUnderline = ['double', 'singleAccounting', 'doubleAccounting'];\r\n\t\t\t\t\tif (arrUnderline.indexOf(objStyle.underline) > -1) \r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tretValue.underline = objStyle.underline;\r\n\t\t\t\t\t} \r\n\t\t\t\t\telse \r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tretValue.underline = true;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tif (objStyle['strike']) \r\n\t\t\t\t{\r\n\t\t\t\t\tretValue.strike = !!objStyle.strike;\r\n\t\t\t\t}\r\n\t\t\t\tif (objStyle.outline) \r\n\t\t\t\t{\r\n\t\t\t\t\tretValue.outline = true;\r\n\t\t\t\t}\r\n\t\t\t\tif (objStyle.shadow) \r\n\t\t\t\t{\r\n\t\t\t\t\tretValue.shadow = true;\r\n\t\t\t\t}\r\n\t\t\t\tif (objStyle.size) \r\n\t\t\t\t{\r\n\t\t\t\t\tretValue.size = objStyle.size;\r\n\t\t\t\t}\r\n\t\t\t\tif (objStyle.color) \r\n\t\t\t\t{\r\n\t\t\t\t\tretValue.color = objStyle.color;\r\n\t\t\t\t}\r\n\t\t\t\tif (objStyle.fontName) \r\n\t\t\t\t{\r\n\t\t\t\t\tretValue.fontName = objStyle.fontName;\r\n\t\t\t\t}\r\n\t\t\t\treturn retValue;\r\n\t\t\t};\r\n\t\t\t\r\n\t\t\tstyle.getTag = function(objStyle)\r\n\t\t\t{\r\n\t\t\t\tvar children = [];\r\n\r\n\t\t\t\tif (objStyle.size) \r\n\t\t\t\t{\r\n\t\t\t\t\tchildren.push(util.getXML({\r\n\t\t\t\t\t\tname: 'sz',\r\n\t\t\t\t\t\tattributes: {'val': objStyle.size}\r\n\t\t\t\t\t}));\r\n\t\t\t\t}\r\n\t\t\t\tif (objStyle.fontName) \r\n\t\t\t\t{\r\n\t\t\t\t\tchildren.push(util.getXML({\r\n\t\t\t\t\t\tname: 'name',\r\n\t\t\t\t\t\tattributes: {'val': objStyle.fontName}\r\n\t\t\t\t\t}));\r\n\t\t\t\t}\r\n\t\t\t\tif (objStyle['bold']) \r\n\t\t\t\t{\r\n\t\t\t\t\tif (objStyle.bold) \r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tchildren.push(util.getXML({ name: 'b' }));\r\n\t\t\t\t\t} \r\n\t\t\t\t\telse \r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tchildren.push(util.getXML({ name: 'b', attributes: {'val': 0} }));\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tif (objStyle['italic']) \r\n\t\t\t\t{\r\n\t\t\t\t\tif (objStyle.italic) \r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tchildren.push(util.getXML({ name: 'i' }));\r\n\t\t\t\t\t} else \r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tchildren.push(util.getXML({ name: 'i', attributes: {'val': 0}}));\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tif (objStyle.vertAlign) \r\n\t\t\t\t{\r\n\t\t\t\t\tchildren.push(util.getXML({\r\n\t\t\t\t\t\tname: 'vertAlign',\r\n\t\t\t\t\t\tattributes: {'val': objStyle.vertAlign}\r\n\t\t\t\t\t}));\r\n\t\t\t\t}\r\n\t\t\t\tif (objStyle.underline) \r\n\t\t\t\t{\r\n\t\t\t\t\tvar attrs = null;\r\n\t\t\t\t\tif (objStyle.underline !== true) \r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tattrs = {'val': objStyle.underline};\r\n\t\t\t\t\t}\r\n\t\t\t\t\tchildren.push(util.getXML({\r\n\t\t\t\t\t\tname: 'u',\r\n\t\t\t\t\t\tattributes: attrs\r\n\t\t\t\t\t}));\r\n\t\t\t\t}\r\n\t\t\t\tif (objStyle['strike']) \r\n\t\t\t\t{\r\n\t\t\t\t\tif (objStyle.strike) \r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tchildren.push(util.getXML({ name: 'strike' }));\r\n\t\t\t\t\t} \r\n\t\t\t\t\telse \r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tchildren.push(util.getXML({ name: 'strike', attributes: {'val': 0} }));\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tif (objStyle.shadow) \r\n\t\t\t\t{\r\n\t\t\t\t\tchildren.push(util.getXML({ name: 'shadow' }));\r\n\t\t\t\t}\r\n\t\t\t\tif (objStyle.outline) \r\n\t\t\t\t{\r\n\t\t\t\t\tchildren.push(util.getXML({ name: 'outline' }));\r\n\t\t\t\t}\r\n\t\t\t\tif (objStyle.color) \r\n\t\t\t\t{\r\n\t\t\t\t\tchildren.push(util.getColorTag(objStyle.color));\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn util.getXML({\r\n\t\t\t\t\tname: 'font',\r\n\t\t\t\t\tchildren: children\r\n\t\t\t\t});\r\n\t\t\t};\r\n\t\t\t\r\n\t\t\tstyle.merge = function(formatTo,formatFrom)\r\n\t\t\t{\r\n\t\t\t\tvar retValue = {};\r\n\t\t\t\tfor(var key in formatTo)\r\n\t\t\t\t{\r\n\t\t\t\t\tretValue[key] = formatTo[key];\r\n\t\t\t\t}\r\n\t\t\t\tfor(var key in formatFrom)\r\n\t\t\t\t{\r\n\t\t\t\t\tretValue[key] = formatFrom[key];\r\n\t\t\t\t}\r\n\t\t\t\tretValue.color = formatFrom && formatFrom.color || formatTo && formatTo.color;\r\n\t\t\t\treturn retValue;\r\n\t\t\t};\r\n\t\t\t\r\n\t\t\tinitialize();\r\n\t\t\t\r\n\t\t\treturn style;\r\n\t\t};\r\n\t\t\r\n\t\tvar StyleNumberFormat = function(util,xlsxStyle)\r\n\t\t{\r\n\t\t\tvar self =  this;\r\n\t\t\tvar style = new XlsxBaseStyle(util,xlsxStyle);\r\n\t\t\tstyle.formatName = \"numberFormat\";\r\n\t\t\tstyle.saveName = \"numFmts\";\r\n\t\t\t\r\n\t\t\tvar initialize = function()\r\n\t\t\t{\r\n\t\t\t\tfor(var key in util.numberPredifined)\r\n\t\t\t\t{\r\n\t\t\t\t\tstyle.formatsByNames[key] = {format: key, formatId: util.numberPredifined[key].formatId};\r\n\t\t\t\t}\r\n\t\t\t\tstyle.idIndex = 164;\r\n\t\t\t};\r\n\t\t\t\r\n\t\t\tstyle.getStyleObj = function(objStyle)\r\n\t\t\t{\r\n\t\t\t\treturn objStyle;\r\n\t\t\t};\r\n\t\t\t\r\n\t\t\tstyle.getTag = function(objStyle,styleFormat)\r\n\t\t\t{\r\n\t\t\t\tvar attributes = {'numFmtId': styleFormat.formatId,'formatCode': objStyle};\r\n\r\n\t\t\t\treturn util.getXML({\r\n\t\t\t\t\tname: 'numFmt',\r\n\t\t\t\t\tattributes: attributes\r\n\t\t\t\t});\r\n\t\t\t};\r\n\t\t\t\r\n\t\t\tinitialize();\r\n\t\t\t\r\n\t\t\treturn style;\r\n\t\t};\r\n\t\t\r\n\t\tvar XlsxAlignment = function(util)\r\n\t\t{\r\n\t\t\tvar self = this;\r\n\t\t\tvar HORIZONTAL = ['left', 'center', 'right', 'fill', 'justify', 'centerContinuous', 'distributed'];\r\n\t\t\tvar VERTICAL = ['top', 'center', 'bottom', 'justify', 'distributed'];\r\n\r\n\t\t\tvar getStyleObj = function(objStyle) \r\n\t\t\t{\r\n\t\t\t\tif(objStyle)\r\n\t\t\t\t{\r\n\t\t\t\t\tvar retValue = {};\r\n\t\t\t\t\tif (objStyle['horizontal'] && HORIZONTAL.indexOf(objStyle.horizontal) > -1) \r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tretValue.horizontal = objStyle.horizontal;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (objStyle['vertical'] && VERTICAL.indexOf(objStyle.vertical) > -1) \r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tretValue.vertical = objStyle.vertical;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (objStyle['indent']) \r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tretValue.indent = objStyle.indent;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (objStyle['justifyLastLine']) \r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tretValue.justifyLastLine = objStyle.justifyLastLine ? 1 : 0;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (objStyle['readingOrder'] && _.includes([0, 1, 2], objStyle.readingOrder)) \r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tretValue.readingOrder = objStyle.readingOrder;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (objStyle['relativeIndent']) \r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tretValue.relativeIndent = objStyle.relativeIndent;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (objStyle['shrinkToFit']) \r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tretValue.shrinkToFit = objStyle.shrinkToFit ? 1 : 0;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (objStyle['textRotation']) \r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tretValue.textRotation = objStyle.textRotation;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (objStyle['wrapText']) \r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tretValue.wrapText = objStyle.wrapText ? 1 : 0;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif(!util.isObjectEmpty(retValue))\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\treturn retValue;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\t\r\n\t\t\t\treturn null;\r\n\t\t\t};\r\n\t\t\t\r\n\t\t\tvar merge = function(objTo,objFrom)\r\n\t\t\t{\r\n\t\t\t\tvar retValue = {};\r\n\t\t\t    for (var key in objFrom) \r\n\t\t\t    { \r\n\t\t\t    \tretValue[key] = objFrom[key]; \r\n\t\t\t    }\r\n\t\t\t    for (var key in objTo) \r\n\t\t\t    { \r\n\t\t\t    \tretValue[key] = objTo[key]; \r\n\t\t\t    }\r\n\t\t\t    return retValue;\r\n\t\t\t};\r\n\t\t\t\r\n\t\t\tvar getTag = function(format) \r\n\t\t\t{\r\n\t\t\t\treturn util.getXML({\r\n\t\t\t\t\tname: 'alignment',\r\n\t\t\t\t\tattributes: format\r\n\t\t\t\t});\r\n\t\t\t};\r\n\t\t\t\r\n\t\t\tself.getStyleObj = getStyleObj;\r\n\t\t\tself.merge = merge;\r\n\t\t\tself.getTag = getTag;\r\n\t\t};\r\n\t\t\r\n\t\tvar XlsxProtection = function(util)\r\n\t\t{\r\n\t\t\tvar self = this;\r\n\r\n\t\t\tvar getStyleObj = function(objStyle) \r\n\t\t\t{\r\n\t\t\t\tif(objStyle)\r\n\t\t\t\t{\r\n\t\t\t\t\tvar retValue = {};\r\n\t\t\t\t\tif (objStyle['locked']) \r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tretValue.locked = objStyle.locked ? 1 : 0;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (objStyle['hidden']) \r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tretValue.hidden = objStyle.hidden ? 1 : 0;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif(!util.isObjectEmpty(retValue))\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\treturn retValue;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\treturn null;\r\n\t\t\t};\r\n\t\t\t\r\n\t\t\tvar merge = function(objTo,objFrom)\r\n\t\t\t{\r\n\t\t\t\tvar retValue = {};\r\n\t\t\t    for (var key in objFrom) \r\n\t\t\t    { \r\n\t\t\t    \tretValue[key] = objFrom[key]; \r\n\t\t\t    }\r\n\t\t\t    for (var key in objTo) \r\n\t\t\t    { \r\n\t\t\t    \tretValue[key] = objTo[key]; \r\n\t\t\t    }\r\n\t\t\t    return retValue;\r\n\t\t\t};\r\n\t\t\t\r\n\t\t\tvar getTag = function(format) \r\n\t\t\t{\r\n\t\t\t\treturn util.getXML({\r\n\t\t\t\t\tname: 'protection',\r\n\t\t\t\t\tattributes: format\r\n\t\t\t\t});\r\n\t\t\t};\r\n\t\t\t\r\n\t\t\tself.getStyleObj = getStyleObj;\r\n\t\t\tself.merge = merge;\r\n\t\t\tself.getTag = getTag;\r\n\t\t};\r\n\t\t\r\n\t\tvar XlsxBaseStyle = function(util,xlsxStyle)\r\n\t\t{\r\n\t\t\tvar self = this;\r\n\t\t\t\r\n\t\t\tself.util = util;\r\n\t\t\tself.xlsxStyle = xlsxStyle;\r\n\t\t\tself.formatName = null;\r\n\t\t\tself.saveName = null;\r\n\t\t\tself.nameIndex = 1;\r\n\t\t\tself.idIndex = 0;\r\n\t\t\tself.formats = [];\r\n\t\t\tself.formatsByData = {};\r\n\t\t\tself.formatsByNames = {};\r\n\t\t\tself.predefined = {};\r\n\t\t\tself.saveEmpty = true;\r\n\t\t\t\r\n\t\t\tself.add = function(style,name,prop)\r\n\t\t\t{\r\n\t\t\t\tprop = prop ? prop : {};\r\n\t\t\t\tif (name && self.formatsByNames[name]) \r\n\t\t\t\t{\r\n\t\t\t\t\tvar objStyle = self.getStyleObj(style,prop);\r\n\t\t\t\t\tvar strStyle = self.util.isObject(objStyle) ? JSON.stringify(objStyle) : objStyle;\r\n\r\n\t\t\t\t\tif (strStyle !== self.formatsByNames[name].stringFormat) \r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tself.addNewStyle(objStyle, strStyle, name);\r\n\t\t\t\t\t}\r\n\t\t\t\t\treturn name;\r\n\t\t\t\t}\r\n\t\t\t\tif (!name && self.util.isString(style)) \r\n\t\t\t\t{\r\n\t\t\t\t\tif (self.formatsByNames[style]) \r\n\t\t\t\t\t{\r\n\t\t\t\t\t\treturn style;\r\n\t\t\t\t\t} \r\n\t\t\t\t\telse if (self.predefined[style]) \r\n\t\t\t\t\t{\r\n\t\t\t\t\t\treturn self.add(self.predefined[style],style);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tvar objStyle = self.getStyleObj(style,prop);\r\n\t\t\t\tvar stringFormat = self.util.isObject(objStyle) ? JSON.stringify(objStyle) : objStyle;\r\n\t\t\t\tvar styleFormat = self.formatsByData[stringFormat];\r\n\r\n\t\t\t\tif (!styleFormat) \r\n\t\t\t\t{\r\n\t\t\t\t\tstyleFormat = self.addNewStyle(objStyle,stringFormat,name);\r\n\t\t\t\t} \r\n\t\t\t\telse if (name && !self.formatsByNames[name]) \r\n\t\t\t\t{\r\n\t\t\t\t\tstyleFormat.name = name;\r\n\t\t\t\t\tself.formatsByNames[name] = styleFormat;\r\n\t\t\t\t}\r\n\t\t\t\treturn styleFormat.name;\r\n\t\t\t};\r\n\t\t\t\r\n\t\t\tself.addNewStyle = function(objStyle,strStyle,name)\r\n\t\t\t{\r\n\t\t\t\tname = name || self.formatName + self.nameIndex++;\r\n\t\t\t\tvar styleFormat = {\r\n\t\t\t\t\tname: name,\r\n\t\t\t\t\tformatId: self.idIndex++,\r\n\t\t\t\t\tformat: objStyle,\r\n\t\t\t\t\tstringFormat: strStyle\r\n\t\t\t\t};\r\n\r\n\t\t\t\tself.formats.push(styleFormat);\r\n\t\t\t\tself.formatsByData[strStyle] = styleFormat;\r\n\t\t\t\tself.formatsByNames[name] = styleFormat;\r\n\r\n\t\t\t\treturn styleFormat;\r\n\t\t\t};\r\n\t\t\t\r\n\t\t\tself.getStyleObj = function(objStyle)\r\n\t\t\t{\r\n\t\t\t\treturn objStyle;\r\n\t\t\t};\r\n\t\t\t\r\n\t\t\tself.getStyle = function(objStyle) \r\n\t\t\t{\r\n\t\t\t\tif (self.util.isString(objStyle)) \r\n\t\t\t\t{\r\n\t\t\t\t\tvar styleFormat = self.formatsByNames[objStyle];\r\n\t\t\t\t\treturn styleFormat ? styleFormat.format : objStyle;\r\n\t\t\t\t}\r\n\t\t\t\treturn objStyle;\r\n\t\t\t};\r\n\t\t\t\r\n\t\t\tself.getStyleID = function(name) \r\n\t\t\t{\r\n\t\t\t\tvar styleFormat = self.formatsByNames[name];\r\n\t\t\t\treturn styleFormat ? styleFormat.formatId : self.getPredefinedID(name);\r\n\t\t\t};\r\n\t\t\t\r\n\t\t\tself.getPredefinedID = function(name) \r\n\t\t\t{\r\n\t\t\t\tif (self.predefined[name]) \r\n\t\t\t\t{\r\n\t\t\t\t\treturn self.getStyleID(self.add(self.predefined[name],name));\r\n\t\t\t\t}\r\n\t\t\t\treturn null;\r\n\t\t\t};\r\n\t\t\t\r\n\t\t\tself.getFinalTag = function()\r\n\t\t\t{\r\n\t\t\t\tif (self.saveEmpty || self.formats.length > 0) \r\n\t\t\t\t{\r\n\t\t\t\t\tvar attributes = {count:self.formats.length};\r\n\t\t\t\t\tvar children = [];\r\n\t\t\t\t\tfor(var index = 0;index < self.formats.length;index++)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tvar format = self.formats[index];\r\n\t\t\t\t\t\tchildren.push(self.getTag(format.format, format));\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\treturn util.getXML({\r\n\t\t\t\t\t\tname: self.saveName,\r\n\t\t\t\t\t\tattributes: attributes,\r\n\t\t\t\t\t\tchildren: children\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t\treturn '';\r\n\t\t\t};\r\n\t\t\t\r\n\t\t\tself.getTag = function(objStyle,prop) \r\n\t\t\t{\r\n\t\t\t\treturn '';\r\n\t\t\t};\r\n\t\t\t\r\n\t\t\tself.merge = function(formatTo,formatFrom)\r\n\t\t\t{\r\n\t\t\t\treturn formatFrom || formatTo;\r\n\t\t\t};\r\n\t\t};\r\n\t\t\r\n\t\tvar XlsxWorkbook = function(util,styles,sharedString,arrSheets,setting)\r\n\t\t{\r\n\t\t\tvar self = this;\r\n\t\t\tvar arrSheet = [];\r\n\t\t\t\r\n\t\t\tvar process = function() \r\n\t\t\t{\r\n\t\t\t\tarrSheet = [];\r\n\t\t\t\tvar sheetValue = \"\";\r\n\t\t\t\tif(arrSheets && arrSheets.length > 0)\r\n\t\t\t\t{\r\n\t\t\t\t\tfor(var count = 0;count < arrSheets.length;count++)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tvar sheetID = count + 1;\r\n\t\t\t\t\t\tvar sheet = new XlsxSheet(util,self,styles,sharedString,arrSheets[count],sheetID,setting);\r\n\t\t\t\t\t\tsheetValue += sheet.process();\r\n\t\t\t\t\t\tarrSheet.push(sheet);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tsheetValue = '<sheets>' + sheetValue + '</sheets>';\r\n\t\t\t\treturn util.getXML({\r\n\t\t\t\t\tname: 'workbook',\r\n\t\t\t\t\tns: 'spreadsheetml',\r\n\t\t\t\t\tattributes: {'xmlns:r': util.schemas.r,'xmlns:mx': util.schemas.mx,'xmlns:mc': util.schemas.mc,'xmlns:mv': util.schemas.mv,'xmlns:x14': util.schemas.x14,'xmlns:x14ac': util.schemas.x14ac,'xmlns:xm': util.schemas.xm},\r\n\t\t\t\t\tchildren: ['<workbookPr/>','<bookViews><workbookView activeTab=\"0\"/></bookViews>', sheetValue, '<definedNames/>', '<calcPr/>']\r\n\t\t\t\t});\r\n\t\t\t};\r\n\t\t\t\r\n\t\t\tvar getSheet = function(index)\r\n\t\t\t{\r\n\t\t\t\tif(arrSheet && arrSheet.length > index)\r\n\t\t\t\t{\r\n\t\t\t\t\treturn arrSheet[index];\r\n\t\t\t\t}\r\n\t\t\t\treturn null;\r\n\t\t\t};\r\n\t\t\t\r\n\t\t\tself.process = process;\r\n\t\t\tself.getSheet = getSheet;\r\n\t\t};\r\n\t\t\r\n\t\tvar XlsxSheet = function(util,xlsxWorkbook,styles,sharedString,objSheet,sheetIndex,setting)\r\n\t\t{\r\n\t\t\t//objSheet properties: {name,columns,dataSource,rowProperties,title,titleStyle,headerStyle,maxCharWidth,freeze,split,viewAttribute,printSetUp}\r\n\t\t\tvar self = this;\r\n\t\t\tvar arrRow = [];\r\n\t\t\tvar sheetData = null;\r\n\t\t\tvar path = null;\r\n\t\t\tvar relationsPath = null;\r\n\t\t\tvar relationship = null;\r\n\t\t\tvar override = null;\r\n\t\t\tvar maxX = 0;\r\n\t\t\tvar maxY = null;\r\n\t\t\tvar isHeaderRequired = false;\r\n\t\t\tvar arrProcessColumns = [];\r\n\t\t\tvar objProcessRows = {};\r\n\t\t\tvar arrProcessData = [];\r\n\t\t\tvar mergedCells = null;\r\n\t\t\tvar sheetViewAttribute = {};\r\n\t\t\tvar sheetViewPane = {};\r\n\t\t\tvar defaultMargin = {left: 0.7,\r\n\t\t\t\t\tright: 0.7,\r\n\t\t\t\t\ttop: 0.75,\r\n\t\t\t\t\tbottom: 0.75,\r\n\t\t\t\t\theader: 0.3,\r\n\t\t\t\t\tfooter: 0.3};\r\n\t\t\tvar printConfig = {};\r\n\t\t\t\r\n\t\t\tvar initialize = function()\r\n\t\t\t{\r\n\t\t\t\tmergedCells = new XlsxMergedCells(util,self);\r\n\t\t\t\tgetObjColumns();\r\n\t\t\t\tgetObjRows();\r\n\t\t\t\tgetData();\r\n\t\t\t\tinitializeSheetView();\r\n\t\t\t\tprocessProperties();\r\n\t\t\t};\r\n\t\t\t\r\n\t\t\tvar getObjColumns = function()\r\n\t\t\t{\r\n\t\t\t\tvar arrCol = objSheet.columns;\r\n\t\t\t\tfor(var index = 0;index < arrCol.length;index++)\r\n\t\t\t\t{\r\n\t\t\t\t\tvar column = util.cloneObject(arrCol[index]);\r\n\t\t\t\t\tif(column.headerText)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tisHeaderRequired = true;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (column.style) \r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tcolumn.style = styles.addFormat(column.style);\r\n\t\t\t\t\t\tvar style = styles.addFillOutFormat(column.style);\r\n\t\t\t\t\t\tcolumn.styleID = styles.getStyleID(style);\r\n\t\t\t\t\t}\r\n\t\t\t\t\tarrProcessColumns.push(column);\r\n\t\t\t\t}\r\n\t\t\t};\r\n\t\t\t\r\n\t\t\tvar getObjRows = function()\r\n\t\t\t{\r\n\t\t\t\tvar objRows = objSheet.rowProperties;\r\n\t\t\t\tvar dataIndex = 0;\r\n\t\t\t\tvar setStyle = function(tempRow,tempStyle)\r\n\t\t\t\t{\r\n\t\t\t\t\ttempRow.style = styles.addFormat(tempStyle);\r\n\t\t\t\t\tvar rowStyle = styles.addFillOutFormat(tempRow.style);\r\n\t\t\t\t\ttempRow.styleID = styles.getStyleID(rowStyle);\r\n\t\t\t\t};\r\n\t\t\t\tif(objSheet.title)\r\n\t\t\t\t{\r\n\t\t\t\t\tvar item = {};\r\n\t\t\t\t\tvar titleStyle = {horizontal: 'center',vertical: 'center',font: {bold: true}};\r\n\t\t\t\t\tif(objSheet.titleStyle)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\ttitleStyle = objSheet.titleStyle;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tsetStyle(item,titleStyle);\r\n\t\t\t\t\titem.skipColumnsStyle = true;\r\n\t\t\t\t\titem.type = \"string\";\r\n\t\t\t\t\tobjProcessRows[dataIndex++] = item;\r\n\t\t\t\t}\r\n\t\t\t\tif(isHeaderRequired)\r\n\t\t\t\t{\r\n\t\t\t\t\tvar item = {};\r\n\t\t\t\t\tif(objSheet.headerStyle)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tsetStyle(item,objSheet.headerStyle);\r\n\t\t\t\t\t\titem.skipColumnsStyle = true;\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\titem.skipColumnsStyle = false;\r\n\t\t\t\t\t}\r\n\t\t\t\t\titem.type = \"string\";\r\n\t\t\t\t\tobjProcessRows[dataIndex++] = item;\r\n\t\t\t\t}\r\n\t\t\t\tfor(var key in objRows)\r\n\t\t\t\t{\r\n\t\t\t\t\tvar row = util.cloneObject(objRows[key]);\r\n\t\t\t\t\tif (row.style) \r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tsetStyle(row,row.style);\r\n\t\t\t\t\t}\r\n\t\t\t\t\trow.skipColumnsStyle = row.skipColumnsStyle || false;\r\n\t\t\t\t\tvar index = parseInt(key) + dataIndex;\r\n\t\t\t\t\tobjProcessRows[index] = row;\r\n\t\t\t\t}\r\n\t\t\t};\r\n\t\t\t\r\n\t\t\tvar getData = function()\r\n\t\t\t{\r\n\t\t\t\tvar dataSource = objSheet.dataSource;\r\n\t\t\t\tvar tempSource = [];\r\n\t\t\t\tvar dataIndex = 0;\r\n\t\t\t\tif(objSheet.title)\r\n\t\t\t\t{\r\n\t\t\t\t\tvar item = util.getArrayOfSize(arrProcessColumns.length,function(index){\r\n\t\t\t\t\t\tif(index == 0)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\treturn {value: objSheet.title, colspan:arrProcessColumns.length};\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\treturn {value: null};\r\n\t\t\t\t\t});\r\n\t\t\t\t\ttempSource.push(item);\r\n\t\t\t\t\tdataIndex++;\r\n\t\t\t\t}\r\n\t\t\t\tif(isHeaderRequired)\r\n\t\t\t\t{\r\n\t\t\t\t\tvar item = {};\r\n\t\t\t\t\tfor(var index = 0;index < arrProcessColumns.length;index++)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tvar column = arrProcessColumns[index];\r\n\t\t\t\t\t\titem[arrProcessColumns[index].dataField] = {value:(column.headerText || \"\"),style:column.headerCellStyle};\r\n\t\t\t\t\t}\r\n\t\t\t\t\ttempSource.push(item);\r\n\t\t\t\t\tdataIndex++;\r\n\t\t\t\t}\r\n\t\t\t\tvar source = tempSource.concat(dataSource);\r\n\t\t\t\tfor(var index = 0;index < source.length;index++)\r\n\t\t\t\t{\r\n\t\t\t\t\tvar rowData = source[index];\r\n\t\t\t\t\tvar objRow = objProcessRows[index] || {};\r\n\t\t\t\t\tvar rowIndex = parseInt(index) + 1;\r\n\t\t\t\t\tvar row = getRowData(rowData,objRow,rowIndex,source);\r\n\t\t\t\t\tarrProcessData.push(row);\r\n\t\t\t\t\t//maxX = Math.max(maxX, row.length);\r\n\t\t\t\t}\r\n\t\t\t\t\r\n\t\t\t\tmaxY = arrProcessData.length;\r\n\t\t\t};\r\n\t\t\t\r\n\t\t\tvar getRowData = function(rowData,objRow,rowIndex,dataSource)\r\n\t\t\t{\r\n\t\t\t\tvar retValue = [];\r\n\t\t\t\tif(rowData)\r\n\t\t\t\t{\r\n\t\t\t\t\tvar rowStyle = null;\r\n\t\t\t\t\tvar skipColumnsStyle = false;\r\n\t\t\t\t\tvar inserts = [];\r\n\t\t\t\t\tif (!util.isArray(rowData)) \r\n\t\t\t\t\t{\r\n\t\t\t\t\t\trowData = mergeRowDataToRow(rowData,objRow);\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif(rowData)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\trowStyle = rowData.style || null;\r\n\t\t\t\t\t\tskipColumnsStyle = rowData.skipColumnsStyle;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tfor(var index = 0;index < arrProcessColumns.length;index++)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tvar objCol = arrProcessColumns[index];\r\n\t\t\t\t\t\tvar objCell = getCellDetails(rowData,objCol,index);\r\n\t\t\t\t\t\tobjCol[\"cellDetails\"] = objCol[\"cellDetails\"] || {};\r\n\t\t\t\t\t\tobjCol[\"cellDetails\"][rowIndex] = objCell;\r\n\t\t\t\t\t\tif(objCell.isObject)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tif(objCell.isSpanRequired)\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\trowData = mergeCells(dataSource,rowData,arrProcessColumns,parseInt(index),rowIndex - 1,objCell);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\t\r\n\t\t\t\treturn rowData;\r\n\t\t\t};\r\n\t\t\t\r\n\t\t\tvar mergeRowDataToRow = function(rowData,objRow)\r\n\t\t\t{\r\n\t\t\t\trowData.height = rowData.height || objRow.height;\r\n\t\t\t\trowData.outlineLevel = rowData.outlineLevel || objRow.outlineLevel;\r\n\t\t\t\trowData.type = rowData.type || objRow.type;\r\n\t\t\t\trowData.style = rowData.style ? styles.addFormat(rowData.style) : objRow.style;\r\n\t\t\t\trowData.skipColumnsStyle = rowData.skipColumnsStyle || objRow.skipColumnsStyle;\r\n\r\n\t\t\t\treturn rowData;\r\n\t\t\t};\r\n\t\t\t\r\n\t\t\tvar getCellDetails = function(rowData,objCol,index)\r\n\t\t\t{\r\n\t\t\t\tvar value = util.isArray(rowData) ? rowData[index] : rowData[objCol.dataField];\r\n\t\t\t\tvar retValue = {origValue: value, value: value,isObject: false,style: null,isSpanRequired: false};\r\n\t\t\t\tif (!util.isUndefinedOrNull(value) && !util.isDate(value) && util.isObject(value))\r\n\t\t\t\t{\r\n\t\t\t\t\tretValue.isObject = true;\r\n\t\t\t\t\tif (value.style) \r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tretValue.style = value.style;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (value.colspan || value.rowspan) \r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tretValue.isSpanRequired = true;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tretValue.value = value.value;\r\n\t\t\t\t}\r\n\t\t\t\t\r\n\t\t\t\treturn retValue;\r\n\t\t\t};\r\n\t\t\t\r\n\t\t\tvar mergeCells = function(dataSource,rowData,arrCol,colIndex,rowIndex,objCell)\r\n\t\t\t{\r\n\t\t\t\tvar origValue = objCell.origValue;\r\n\t\t\t\tif (origValue.colspan || origValue.rowspan) \r\n\t\t\t\t{\r\n\t\t\t\t\tvar colSpan = (origValue.colspan || 1) - 1;\r\n\t\t\t\t\tvar rowSpan = (origValue.rowspan || 1) - 1;\r\n\t\t\t\t\tif (colSpan || rowSpan) \r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tmergedCells.addMergedCells({ c: colIndex + 1, r: rowIndex + 1 }, { c: colIndex + 1 + colSpan, r: rowIndex + 1 + rowSpan });\r\n\t\t\t\t\t\treturn mergedCells.add(dataSource,rowData,arrCol,colIndex,rowIndex,colSpan,rowSpan,origValue.style);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\treturn rowData;\r\n\t\t\t};\r\n\t\t\t\r\n\t\t\tvar process = function() \r\n\t\t\t{\r\n\t\t\t\tsheetData = processSheetData();\r\n\t\t\t\tsetProp();\r\n\t\t\t\treturn processSheet();\r\n\t\t\t};\r\n\t\t\t\r\n\t\t\tvar processSheetData = function() \r\n\t\t\t{\r\n\t\t\t\tarrRow = [];\r\n\t\t\t\tvar beforeData = \"\";\r\n\t\t\t\tvar rowValue = \"\";\r\n\t\t\t\tvar colValue = \"\";\r\n\t\t\t\tvar afterData = \"\";\r\n\t\t\t\tif(objSheet)\r\n\t\t\t\t{\r\n\t\t\t\t\tvar maxCharWidth = objSheet.maxCharWidth || setting.maxCharWidth;\r\n\t\t\t\t\tcolValue = processColumns(arrProcessColumns,maxCharWidth);\r\n\t\t\t\t\tif(arrProcessColumns && arrProcessColumns.length > 0 && arrProcessData && arrProcessData.length > 0)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tfor(var count = 0;count < arrProcessData.length;count++)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tvar rowIndex = count + 1;\r\n\t\t\t\t\t\t\tvar objRow = objProcessRows[count] || {};\r\n\t\t\t\t\t\t\tvar row = new XlsxRow(util,self,styles,sharedString,arrProcessData[count],arrProcessColumns,rowIndex,objRow);\r\n\t\t\t\t\t\t\trowValue += row.process();\r\n\t\t\t\t\t\t\tarrRow.push(row);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\trowValue = '<sheetData>' + rowValue + '</sheetData>';\r\n\t\t\t\tbeforeData = getBeforeSheetData();\r\n\t\t\t\tafterData = getAfterSheetData();\r\n\t\t\t\t\r\n\t\t\t\treturn util.getXML({\r\n\t\t\t\t\tname: 'worksheet',\r\n\t\t\t\t\tns: 'spreadsheetml',\r\n\t\t\t\t\tattributes: {'xmlns:mc': util.schemas.mc,'xmlns:mv': util.schemas.mv,'xmlns:mx': util.schemas.mx,'xmlns:r': util.schemas.r,'xmlns:x14': util.schemas.x14,'xmlns:x14ac': util.schemas.x14ac,'xmlns:xm': util.schemas.xm},\r\n\t\t\t\t\tchildren: [beforeData,colValue,rowValue,afterData]\r\n\t\t\t\t});\r\n\t\t\t};\r\n\t\t\t\r\n\t\t\tvar getBeforeSheetData = function()\r\n\t\t\t{\r\n\t\t\t\tvar retValue = \"\";\r\n\t\t\t\tretValue += getSheetViewsTag();\r\n\t\t\t\treturn retValue;\r\n\t\t\t};\r\n\t\t\t\r\n\t\t\tvar getAfterSheetData = function()\r\n\t\t\t{\r\n\t\t\t\tvar retValue = \"\";\r\n\t\t\t\tretValue += mergedCells.getTag() + getPrinterTag();\r\n\t\t\t\treturn retValue;\r\n\t\t\t};\r\n\t\t\t\r\n\t\t\tvar processSheet = function() \r\n\t\t\t{\r\n\t\t\t\tvar templateSheet = '<sheet state=\"visible\" name=\"###sheetName###\" sheetId=\"###sheetIndex###\" r:id=\"rId###sheetIndex###\"/>';\r\n\t\t\t\tvar sheet = templateSheet.replaceAll(\"###sheetName###\",objSheet.name || (\"Sheet\" + sheetIndex));\r\n\t\t\t\tsheet = sheet.replaceAll(\"###sheetIndex###\",sheetIndex);\r\n\t\t\t\treturn sheet;\r\n\t\t\t};\r\n\t\t\t\r\n\t\t\tvar processColumns = function(arrCol,maxCharWidth)\r\n\t\t\t{\r\n\t\t\t\tif(arrCol && arrCol.length > 0)\r\n\t\t\t\t{\r\n\t\t\t\t\tvar arrChildren = [];\r\n\t\t\t\t\tfor(var count = 0;count < arrCol.length;count++)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tvar item = arrCol[count];\r\n\t\t\t\t\t\tvar arrAttr = {'min': item.min || count + 1, 'max': item.max || count + 1};\r\n\t\t\t\t\t\tif (item.hidden) \r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tarrAttr['hidden'] = 1;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tif (item.autoFit) \r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tarrAttr['bestFit'] = 1;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tif (item.width) \r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tarrAttr['customWidth'] = 1;\r\n\t\t\t\t\t\t\tarrAttr['width'] = item.width;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\telse if (item.widthInPx) \r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tarrAttr['customWidth'] = 1;\r\n\t\t\t\t\t\t\tarrAttr['width'] = util.pixelToCharWidth(util.charToRealWidth(item.widthInPx,maxCharWidth),maxCharWidth);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\telse if (item.widthInChar) \r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tarrAttr['customWidth'] = 1;\r\n\t\t\t\t\t\t\tarrAttr['width'] = util.charToRealWidth(item.widthInChar,maxCharWidth);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\telse \r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t//arrAttr['width'] = 9.140625;\r\n\t\t\t\t\t\t\tarrAttr['width'] = 10;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tif (item.styleID) \r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tarrAttr['style'] = item.styleID;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tarrChildren.push(util.getXML({\r\n\t\t\t\t\t\t\tname: 'col',\r\n\t\t\t\t\t\t\tattributes: arrAttr\r\n\t\t\t\t\t\t}));\r\n\t\t\t\t\t}\r\n\t\t\t\t\treturn util.getXML({\r\n\t\t\t\t\t\tname: 'cols',\r\n\t\t\t\t\t\tchildren: arrChildren\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t\treturn '';\r\n\t\t\t};\r\n\t\t\t\r\n\t\t\tvar processProperties = function()\r\n\t\t\t{\r\n\t\t\t\tif(objSheet.freeze)\r\n\t\t\t\t{\r\n\t\t\t\t\tvar value = objSheet.freeze;\r\n\t\t\t\t\tfreeze(value.col, value.row, value.cell, value.activePane);\r\n\t\t\t\t}\r\n\t\t\t\telse if(objSheet.name == \"split\") \r\n\t\t\t\t{\r\n\t\t\t\t\tvar value = objSheet.split;\r\n\t\t\t\t\tsplit(value.x, value.y, value.cell, value.activePane);\r\n\t\t\t\t}\r\n\t\t\t\tif(objSheet.viewAttribute)\r\n\t\t\t\t{\r\n\t\t\t\t\tfor(var key in objSheet.viewAttribute)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tsetSheetViewAttribute({name: key,value: objSheet.viewAttribute[key]});\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tif(objSheet.printSetUp)\r\n\t\t\t\t{\r\n\t\t\t\t\tif(objSheet.printSetUp.margin)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tsetMargin(objSheet.printSetUp.margin);\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif(objSheet.printSetUp.orientation)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tsetOrientation(objSheet.printSetUp.orientation);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t};\r\n\t\t\t\r\n\t\t\tvar getRow = function(index)\r\n\t\t\t{\r\n\t\t\t\tif(arrRow && arrRow.length > index)\r\n\t\t\t\t{\r\n\t\t\t\t\treturn arrRow[index];\r\n\t\t\t\t}\r\n\t\t\t\treturn null;\r\n\t\t\t};\r\n\t\t\t\r\n\t\t\tvar setProp = function()\r\n\t\t\t{\r\n\t\t\t\tpath = 'worksheets/sheet' + sheetIndex + '.xml';\r\n\t\t\t\trelationsPath = 'worksheets/_rels/sheet' + sheetIndex + '.xml.rels';\r\n\t\t\t\trelationship = util.getXML({\r\n\t\t\t\t\tname: 'Relationship',\r\n\t\t\t\t\tattributes: {'Id': 'rId' + sheetIndex,'Type': util.schemas.worksheet,'Target': path}\r\n\t\t\t\t});\r\n\t\t\t\toverride = util.getXML({\r\n\t\t\t\t\tname: 'Override',\r\n\t\t\t\t\tattributes: {'PartName': '/xl/' + path,'ContentType': 'application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml'}\r\n\t\t\t\t});\r\n\t\t\t};\r\n\t\t\t\r\n\t\t\tvar getPath = function()\r\n\t\t\t{\r\n\t\t\t\treturn path;\r\n\t\t\t};\r\n\t\t\t\r\n\t\t\tvar getRelationsPath = function()\r\n\t\t\t{\r\n\t\t\t\treturn relationsPath;\r\n\t\t\t};\r\n\t\t\t\r\n\t\t\tvar getSheetData = function()\r\n\t\t\t{\r\n\t\t\t\treturn sheetData;\r\n\t\t\t};\r\n\t\t\t\r\n\t\t\tvar getRelationship = function()\r\n\t\t\t{\r\n\t\t\t\treturn relationship;\r\n\t\t\t};\r\n\t\t\t\r\n\t\t\tvar getOverride = function()\r\n\t\t\t{\r\n\t\t\t\treturn override;\r\n\t\t\t};\r\n\t\t\t\r\n\t\t\tvar initializeSheetView = function()\r\n\t\t\t{\r\n\t\t\t\tvar getBooleanValue = function(item)\r\n\t\t\t\t{\r\n\t\t\t\t\tif(!item || util.getBooleanValue(item.value) == null)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\txlsxUtil.throwNSError(item.name + \" attribute does not have a proper value for Sheet View Attribute\"); \r\n\t\t\t\t\t}\r\n\t\t\t\t\treturn util.getBooleanValue(item.value).toString();\r\n\t\t\t\t};\r\n\t\t\t\t\r\n\t\t\t\tsheetViewAttribute = {\r\n\t\t\t\t\t\tdefaultGridColor: {\r\n\t\t\t\t\t\t\tvalue: null,\r\n\t\t\t\t\t\t\tgetValue: getBooleanValue\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\tcolorId: {\r\n\t\t\t\t\t\t\tvalue: null\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\trightToLeft: {\r\n\t\t\t\t\t\t\tvalue: null,\r\n\t\t\t\t\t\t\tgetValue: getBooleanValue\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\tshowFormulas: {\r\n\t\t\t\t\t\t\tvalue: null,\r\n\t\t\t\t\t\t\tgetValue: getBooleanValue\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\tshowGridLines: {\r\n\t\t\t\t\t\t\tvalue: null,\r\n\t\t\t\t\t\t\tgetValue: getBooleanValue\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\tshowOutlineSymbols: {\r\n\t\t\t\t\t\t\tvalue: null,\r\n\t\t\t\t\t\t\tgetValue: getBooleanValue\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\tshowRowColHeaders: {\r\n\t\t\t\t\t\t\tvalue: null,\r\n\t\t\t\t\t\t\tgetValue: getBooleanValue\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\tshowRuler: {\r\n\t\t\t\t\t\t\tvalue: null,\r\n\t\t\t\t\t\t\tgetValue: getBooleanValue\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\tshowWhiteSpace: {\r\n\t\t\t\t\t\t\tvalue: null,\r\n\t\t\t\t\t\t\tgetValue: getBooleanValue\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\tshowZeros: {\r\n\t\t\t\t\t\t\tvalue: null,\r\n\t\t\t\t\t\t\tgetValue: getBooleanValue\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\ttabSelected: {\r\n\t\t\t\t\t\t\tvalue: null,\r\n\t\t\t\t\t\t\tgetValue: getBooleanValue\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\ttopLeftCell: {\r\n\t\t\t\t\t\t\tvalue: null //A1\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\tview: {\r\n\t\t\t\t\t\t\tvalue: 'normal' //normal | pageBreakPreview | pageLayout\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\twindowProtection: {\r\n\t\t\t\t\t\t\tvalue: null,\r\n\t\t\t\t\t\t\tgetValue: getBooleanValue\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\tzoomScale: {\r\n\t\t\t\t\t\t\tvalue: null //10-400\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\tzoomScaleNormal: {\r\n\t\t\t\t\t\t\tvalue: null //10-400\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\tzoomScalePageLayoutView: {\r\n\t\t\t\t\t\t\tvalue: null //10-400\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\tzoomScaleSheetLayoutView: {\r\n\t\t\t\t\t\t\tvalue: null //10-400\r\n\t\t\t\t\t\t}\r\n\t\t\t\t};\r\n\t\t\t};\r\n\t\t\t\r\n\t\t\tvar setSheetViewAttribute = function(objAttr) \r\n\t\t\t{\r\n\t\t\t\tif(objAttr && objAttr.name)\r\n\t\t\t\t{\r\n\t\t\t\t\tif (objAttr.name == \"freeze\") \r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tfreeze(value.col, value.row, value.cell, value.activePane);\r\n\t\t\t\t\t} \r\n\t\t\t\t\telse if(objAttr.name == \"split\") \r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tsplit(value.x, value.y, value.cell, value.activePane);\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse if (sheetViewAttribute[objAttr.name] && !util.isUndefinedOrNull(objAttr.value)) \r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tif(sheetViewAttribute[objAttr.name].getValue)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tsheetViewAttribute[objAttr.name].value = sheetViewAttribute[objAttr.name].getValue(objAttr);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\telse\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tsheetViewAttribute[objAttr.name].value = objAttr.value;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t};\r\n\t\t\t\r\n\t\t\tvar freeze = function(colNo,rowNo,cell,activePane) \r\n\t\t\t{\r\n\t\t\t\tsheetViewPane = {\r\n\t\t\t\t\tstate: 'frozen',\r\n\t\t\t\t\txSplit: parseInt(colNo),\r\n\t\t\t\t\tySplit: parseInt(rowNo),\r\n\t\t\t\t\ttopLeftCell: util.getCanonCell(cell) || util.getLetterFromCells(parseInt(colNo) + 1, parseInt(rowNo) + 1),\r\n\t\t\t\t\tactivePane: activePane || 'bottomRight'\r\n\t\t\t\t};\r\n\t\t\t};\r\n\t\t\t\r\n\t\t\tvar split = function(xPos,yPos,cell,activePane) \r\n\t\t\t{\r\n\t\t\t\tsheetViewPane = {\r\n\t\t\t\t\tstate: 'split',\r\n\t\t\t\t\txSplit: parseInt(xPos) * 20,\r\n\t\t\t\t\tySplit: parseInt(yPos) * 20,\r\n\t\t\t\t\ttopLeftCell: util.getCanonCell(cell) || 'A1',\r\n\t\t\t\t\tactivePane: activePane || 'bottomRight'\r\n\t\t\t\t};\r\n\t\t\t};\r\n\t\t\t\r\n\t\t\tvar getSheetViewsTag = function()\r\n\t\t\t{\r\n\t\t\t\tvar arrChildren = [];\r\n\t\t\t\tif(sheetViewPane && Object.keys(sheetViewPane).length > 0)\r\n\t\t\t\t{\r\n\t\t\t\t\tvar attr = {state: sheetViewPane.state, xSplit: sheetViewPane.xSplit, ySplit: sheetViewPane.ySplit, topLeftCell: sheetViewPane.topLeftCell, activePane: sheetViewPane.activePane};\r\n\t\t\t\t\tarrChildren.push(util.getXML({\r\n\t\t\t\t\t\tname: 'pane',\r\n\t\t\t\t\t\tattributes:attr\r\n\t\t\t\t\t}));\r\n\t\t\t\t}\r\n\t\t\t\tvar attributes = {workbookViewId: 0};\r\n\t\t\t\tfor(var key in sheetViewAttribute)\r\n\t\t\t\t{\r\n\t\t\t\t\tif(!util.isUndefinedOrNull(sheetViewAttribute[key].value))\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tattributes[key] = sheetViewAttribute[key].value;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\t\r\n\t\t\t\tvar arrSheetView = [util.getXML({\r\n\t\t\t\t\tname: 'sheetView',\r\n\t\t\t\t\tattributes:attributes,\r\n\t\t\t\t\tchildren: arrChildren\r\n\t\t\t\t})];\r\n\t\t\t\t\r\n\t\t\t\treturn util.getXML({\r\n\t\t\t\t\tname: 'sheetViews',\r\n\t\t\t\t\tchildren:arrSheetView\r\n\t\t\t\t});\r\n\t\t\t};\r\n\t\t\t\r\n\t\t\tvar setMargin = function(margin)\r\n\t\t\t{\r\n\t\t\t\tprintConfig.margin = util.setObjectWithDefaults(margin,defaultMargin);\r\n\t\t\t};\r\n\t\t\t\r\n\t\t\tvar setOrientation = function(orientation)\r\n\t\t\t{\r\n\t\t\t\tif (orientation === 'portrait' || orientation === 'landscape')\r\n\t\t\t\t{\r\n\t\t\t\t\tprintConfig.orientation = orientation;\r\n\t\t\t\t}\r\n\t\t\t};\r\n\t\t\t\r\n\t\t\tvar getPrinterTag = function()\r\n\t\t\t{\r\n\t\t\t\tvar retValue = '';\r\n\t\t\t\tif(printConfig)\r\n\t\t\t\t{\r\n\t\t\t\t\tvar margin = printConfig.margin;\r\n\t\t\t\t\tif(margin) \r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tretValue += util.getXML({\r\n\t\t\t\t\t\t\tname: 'pageMargins',\r\n\t\t\t\t\t\t\tattributes: margin\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif(printConfig.orientation)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tretValue += util.getXML({\r\n\t\t\t\t\t\t\tname: 'pageSetup',\r\n\t\t\t\t\t\t\tattributes: {orientation: printConfig.orientation}\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\treturn retValue;\r\n\t\t\t};\r\n\t\t\t\r\n\t\t\tinitialize();\r\n\t\t\t\r\n\t\t\tself.process = process;\r\n\t\t\tself.getRow = getRow;\r\n\t\t\tself.setProp = setProp;\r\n\t\t\tself.getPath = getPath;\r\n\t\t\tself.getRelationsPath = getRelationsPath;\r\n\t\t\tself.getSheetData = getSheetData;\r\n\t\t\tself.getRelationship = getRelationship;\r\n\t\t\tself.getOverride = getOverride;\r\n\t\t\tself.getCellDetails = getCellDetails;\r\n\t\t\tself.freeze = freeze;\r\n\t\t\tself.split = split;\r\n\t\t\tself.setViewAttribute = setSheetViewAttribute;\r\n\t\t\tself.setMargin = setMargin;\r\n\t\t\tself.setOrientation = setOrientation;\r\n\t\t};\r\n\t\t\r\n\t\tvar XlsxRow = function(util,xlsxSheet,styles,sharedString,rowData,arrCol,rowIndex,objRow)\r\n\t\t{\r\n\t\t\tvar self = this;\r\n\t\t\tvar arrCell = [];\r\n\t\t\t\r\n\t\t\tvar process = function() \r\n\t\t\t{\r\n\t\t\t\tarrCell = [];\r\n\t\t\t\tvar cellValue = \"\";\r\n\t\t\t\tif(arrCol && arrCol.length > 0)\r\n\t\t\t\t{\r\n\t\t\t\t\tfor(var count = 0;count < arrCol.length;count++)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tvar objCol = arrCol[count];\r\n\t\t\t\t\t\tvar objCell = objCol[\"cellDetails\"][rowIndex] || xlsxSheet.getCellDetails(rowData,objCol,count);\r\n\t\t\t\t\t\tvar cell = new XlsxCell(util,self,styles,sharedString,objCol,count + 1,rowData,rowIndex,objCell,objRow,objRow.skipColumnsStyle);\r\n\t\t\t\t\t\tcellValue += cell.process();\r\n\t\t\t\t\t\tarrCell.push(cell);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\treturn util.getXML({\r\n\t\t\t\t\tname: 'row',\r\n\t\t\t\t\tattributes: getAttr(),\r\n\t\t\t\t\tchildren: [cellValue]\r\n\t\t\t\t});\r\n\t\t\t};\r\n\t\t\t\r\n\t\t\tvar getAttr = function()\r\n\t\t\t{\r\n\t\t\t\tvar attr = {'r': rowIndex};\r\n\t\t\t\tif (!util.isUndefinedOrNull(objRow.height)) \r\n\t\t\t\t{\r\n\t\t\t\t\tattr[\"customHeight\"] = 1;\r\n\t\t\t\t\tattr[\"ht\"] = objRow.height;\r\n\t\t\t\t}\r\n\t\t\t\tif (objRow.styleID) \r\n\t\t\t\t{\r\n\t\t\t\t\tattr[\"customFormat\"] = 1;\r\n\t\t\t\t\tattr[\"s\"] = objRow.styleID;\r\n\t\t\t\t}\r\n\t\t\t\tif (objRow.outlineLevel) \r\n\t\t\t\t{\r\n\t\t\t\t\tattr[\"outlineLevel\"] = objRow.outlineLevel;\r\n\t\t\t\t}\r\n\t\t\t\treturn attr;\r\n\t\t\t};\r\n\t\t\t\r\n\t\t\tvar getCell = function(index)\r\n\t\t\t{\r\n\t\t\t\tif(arrCell && arrCell.length > index)\r\n\t\t\t\t{\r\n\t\t\t\t\treturn arrCell[index];\r\n\t\t\t\t}\r\n\t\t\t\treturn null;\r\n\t\t\t};\r\n\t\t\t\r\n\t\t\tself.process = process;\r\n\t\t\tself.getCell = getCell;\r\n\t\t\t\r\n\t\t};\r\n\t\t\r\n\t\tvar XlsxCell = function(util,xlsxRow,styles,sharedString,objCol,cellIndex,rowData,rowIndex,objCell,objRow,skipColumnsStyle)\r\n\t\t{\r\n\t\t\tvar self = this;\r\n\t\t\tvar dataType = null;\r\n\t\t\t\r\n\t\t\tinitialize = function()\r\n\t\t\t{\r\n\t\t\t\t\r\n\t\t\t};\r\n\t\t\t\r\n\t\t\tvar process = function() \r\n\t\t\t{\r\n\t\t\t\tvar value = objCell.value;\r\n\t\t\t\tvar cellStyle = objCell.style;\r\n\t\t\t\tvar objValue = objCell.origValue;\r\n\t\t\t\tvar cellType = getCellType(value);\r\n\t\t\t\tvar predefinedStyle = null;\r\n\t\t\t\tfor(var key in util.numberPredifined)\r\n\t\t\t\t{\r\n\t\t\t\t\tif(cellType == key)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tpredefinedStyle = cellType;\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tvar columnStyle = !skipColumnsStyle ? objCol.style : null;\r\n\t\t\t\tvar rowStyle = objRow.style;\r\n\t\t\t\tvar finalCellStyleID = styles.getStyleID(styles.merge(predefinedStyle,columnStyle,rowStyle,cellStyle));\r\n\t\t\t\tvar objCellValue = getCellObj(cellType,value);\r\n\t\t\t\tvar attributes = getAttr(cellIndex - 1,rowIndex,cellType,finalCellStyleID);\r\n\t\t\t\tvar children = \"\";\r\n\t\t\t\tif (!util.isUndefinedOrNull(objCellValue.formula)) \r\n\t\t\t\t{\r\n\t\t\t\t\tchildren = '<v>' + objCellValue.formula + '</v>';\r\n\t\t\t\t}\r\n\t\t\t\telse if (!util.isUndefinedOrNull(objCellValue.value))\r\n\t\t\t\t{\r\n\t\t\t\t\t/*if(cellType == \"string\")\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tchildren = '<is><t>' + objCellValue.value + '</t></is>';\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse\r\n\t\t\t\t\t{*/\r\n\t\t\t\t\t\tchildren = '<v>' + objCellValue.value + '</v>';\r\n\t\t\t\t\t//}\r\n\t\t\t\t}\r\n\t\t\t\treturn util.getXML({\r\n\t\t\t\t\tname: 'c',\r\n\t\t\t\t\tattributes: attributes,\r\n\t\t\t\t\tchildren: [children]\r\n\t\t\t\t});\r\n\t\t\t};\r\n\t\t\t\r\n\t\t\tvar getAttr = function(index,rowIndex,cellType,styleID)\r\n\t\t\t{\r\n\t\t\t\tvar attr = {'r': generatorCellNumber(index, rowIndex)};\r\n\t\t\t\tif (styleID) \r\n\t\t\t\t{\r\n\t\t\t\t\tattr[\"s\"] = styleID;\r\n\t\t\t\t}\r\n\t\t\t\tswitch (cellType)\r\n\t\t\t\t{\r\n\t\t\t\t\tcase \"string\":\r\n\t\t\t\t\t\t//attr[\"t\"] = \"inlineStr\";\r\n\t\t\t\t\t\tattr[\"t\"] = \"s\"; \r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase \"boolean\":\r\n\t\t\t\t\t\tattr[\"t\"] = \"b\"; \r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t\treturn attr;\r\n\t\t\t};\r\n\t\t\t\r\n\t\t\tvar getCellType = function(value)\r\n\t\t\t{\r\n\t\t\t\tif(objCell && objCell.type)\r\n\t\t\t\t{\r\n\t\t\t\t\treturn objCell.type;\r\n\t\t\t\t}\r\n\t\t\t\telse if (rowData && rowData.type) \r\n\t\t\t\t{\r\n\t\t\t\t\treturn rowData.type;\r\n\t\t\t\t}\r\n\t\t\t\telse if (objRow && objRow.type) \r\n\t\t\t\t{\r\n\t\t\t\t\treturn objRow.type;\r\n\t\t\t\t}\r\n\t\t\t\tif(objCol && objCol.type)\r\n\t\t\t\t{\r\n\t\t\t\t\treturn objCol.type;\r\n\t\t\t\t}\r\n\t\t\t\telse if (typeof value === 'number') \r\n\t\t\t\t{\r\n\t\t\t\t\treturn 'number';\r\n\t\t\t\t} \r\n\t\t\t\telse if (typeof value === 'string') \r\n\t\t\t\t{\r\n\t\t\t\t\treturn 'string';\r\n\t\t\t\t}\r\n\t\t\t\telse if(util.isDate(value))\r\n\t\t\t\t{\r\n\t\t\t\t\treturn \"date\";\r\n\t\t\t\t}\r\n\t\t\t\treturn 'string';\r\n\t\t\t};\r\n\t\t\t\r\n\t\t\tvar getCellObj = function(cellType,cellValue) \r\n\t\t\t{\r\n\t\t\t\tvar retValue = {value: null,formula: null,isString: false};\r\n\t\t\t\t\r\n\t\t\t\tvar formulaFunc = function(objRet,value,sharedString)\r\n\t\t\t\t{\r\n\t\t\t\t\tobjRet.formula = util.escapeString(value);\r\n\t\t\t\t\treturn objRet;\r\n\t\t\t\t};\r\n\t\t\t\t\r\n\t\t\t\tvar stringFunc = function(objRet,value,sharedString)\r\n\t\t\t\t{\r\n\t\t\t\t\tobjRet.value = sharedString.add(value);\r\n\t\t\t\t\t//objRet.value = value;\r\n\t\t\t\t\tobjRet.isString = false;\r\n\t\t\t\t\treturn objRet;\r\n\t\t\t\t};\r\n\t\t\t\t\r\n\t\t\t\tvar mapCellType = {string: {func: stringFunc},\r\n\t\t\t\t\t\t\t\t   formula:{func: formulaFunc}};\r\n\t\t\t\tfor(var key in mapCellType)\r\n\t\t\t\t{\r\n\t\t\t\t\tif(cellType == key)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\treturn mapCellType[key].func(retValue,cellValue,sharedString);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tfor(var key in util.numberPredifined)\r\n\t\t\t\t{\r\n\t\t\t\t\tif(cellType == key)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\treturn util.numberPredifined[key].cellObjFunc(retValue,cellValue,sharedString);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tretValue.value = cellValue;\r\n\t\t\t\treturn retValue;\r\n\t\t\t};\r\n\t\t\t\r\n\t\t\tvar generatorCellNumber = function(index, rowNumber)\r\n\t\t\t{\r\n\t\t\t\treturn generateColumnLetter(index) + rowNumber;\r\n\t\t\t};\r\n\t\t\t\r\n\t\t\tvar generateColumnLetter = function(colIndex) \r\n\t\t\t{\r\n\t\t\t\tif (typeof colIndex !== 'number') \r\n\t\t\t\t{\r\n\t\t\t\t\treturn '';\r\n\t\t\t\t}\r\n\t\t\t\tvar prefix = Math.floor(colIndex / 26);\r\n\t\t\t\tvar letter = String.fromCharCode(97 + (colIndex % 26)).toUpperCase();\r\n\t\t\t\tif (prefix === 0) \r\n\t\t\t\t{\r\n\t\t\t\t\treturn letter;\r\n\t\t\t\t}\r\n\t\t\t\treturn generateColumnLetter(prefix - 1) + letter;\r\n\t\t\t};\r\n\t\t\t\r\n\t\t\tinitialize();\r\n\t\t\t\r\n\t\t\tself.process = process;\r\n\t\t};\r\n\t\t\r\n\t\tvar XlsxSharedStrings = function(util)\r\n\t\t{\r\n\t\t\tvar self = this;\r\n\t\t\tvar objString = {};\r\n\t\t\tvar arrString = [];\r\n\t\t\tvar index = 0;\r\n\t\t\tvar regexSpace = /^\\s|\\s$/;\r\n\t\t\t\r\n\t\t\tvar add = function(str) \r\n\t\t\t{\r\n\t\t\t\tvar strIndex = objString[str];\r\n\t\t\t\tif (util.isUndefinedOrNull(strIndex)) \r\n\t\t\t\t{\r\n\t\t\t\t\tstrIndex = index++;\r\n\t\t\t\t\tobjString = strIndex;\r\n\t\t\t\t\tarrString[strIndex] = str;\r\n\t\t\t\t}\r\n\t\t\t\treturn strIndex;\r\n\t\t\t};\r\n\t\t\t\r\n\t\t\tvar getAllString = function()\r\n\t\t\t{\r\n\t\t\t\treturn arrString;\r\n\t\t\t};\r\n\t\t\t\r\n\t\t\tvar hasString = function()\r\n\t\t\t{\r\n\t\t\t\treturn index > 0;\r\n\t\t\t};\r\n\t\t\t\r\n\t\t\tvar getTag = function()\r\n\t\t\t{\r\n\t\t\t\tvar strResult = \"\";\r\n\t\t\t\tfor(var index = 0;index < arrString.length;index++)\r\n\t\t\t\t{\r\n\t\t\t\t\tvar str = util.escapeString(arrString[index]);\r\n\t\t\t\t\tif (regexSpace.test(str)) \r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tstrResult += '<si><t xml:space=\"preserve\">' + str + '</t></si>';\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tstrResult += '<si><t>' + str + '</t></si>';\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tvar retValue = getTagStart(index) + strResult + getTagEnd();\r\n\t\t\t\treset();\r\n\t\t\t\treturn retValue;\r\n\t\t\t};\r\n\t\t\t\r\n\t\t\tvar getTagStart = function(count) \r\n\t\t\t{\r\n\t\t\t\treturn util.xmlPrefix + '<sst xmlns=\"' + util.schemas.spreadsheetml + '\" count=\"' + count + '\" uniqueCount=\"' + count + '\">';\r\n\t\t\t};\r\n\r\n\t\t\tvar getTagEnd = function() \r\n\t\t\t{\r\n\t\t\t\treturn '</sst>';\r\n\t\t\t};\r\n\t\t\t\r\n\t\t\tvar reset = function()\r\n\t\t\t{\r\n\t\t\t\tobjString = {};\r\n\t\t\t\tarrString = [];\r\n\t\t\t\t//not setting index as 0 so that while saving other api can figure out that shared String exists\r\n\t\t\t\t//index = 0;\r\n\t\t\t};\r\n\t\t\t\r\n\t\t\tself.add = add;\r\n\t\t\tself.getAllString = getAllString;\r\n\t\t\tself.getTag = getTag;\r\n\t\t\tself.hasString = hasString;\r\n\t\t};\r\n\t\t\r\n\t\tvar XlsxMergedCells = function(util,sheet)\r\n\t\t{\r\n\t\t\tvar self = this;\r\n\t\t\tvar arrCells = [];\r\n\t\t\t\r\n\t\t\tvar add = function(dataSource,rowData,arrCol,colIndex,rowIndex,colSpan,rowSpan,style)\r\n\t\t\t{\r\n\t\t\t\tif(colSpan)\r\n\t\t\t\t{\r\n\t\t\t\t\tvar getEmptyCell = function(index)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\treturn {value: null,style: style};\r\n\t\t\t\t\t};\r\n\t\t\t\t\tif(!util.isArray(rowData))\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\trowData = convertObjectToArray(rowData,arrCol);\r\n\t\t\t\t\t}\r\n\t\t\t\t\tvar arrTill = copyArray(rowData.slice(0, colIndex + 1));\r\n\t\t\t\t\tvar arrEmpty = util.getArrayOfSize(colSpan,getEmptyCell);\r\n\t\t\t\t\tarrEmpty = copyArray(arrEmpty);\r\n\t\t\t\t\tvar arrAfter = copyArray(rowData.slice(colIndex + 1));\r\n\t\t\t\t\trowData = [].concat(arrTill,arrEmpty,arrAfter);\r\n\t\t\t\t}\r\n\t\t\t\tif(rowSpan) \r\n\t\t\t\t{\r\n\t\t\t\t\tvar index = 1;\r\n\t\t\t\t\tfor(var count = (rowIndex + 1);(count < dataSource.length && index < rowSpan);count++)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tvar item = dataSource[count];\r\n\t\t\t\t\t\tutil.isArray(item) ? (item[colIndex] = \"\") : (item[arrCol[colIndex].dataField] = null);\r\n\t\t\t\t\t\tindex++;\r\n\t\t\t\t\t}\r\n\t\t\t\t\twhile(index < rowSpan)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tvar item = {};\r\n\t\t\t\t\t\tfor(var count = 0;count < arrCol.length;count++)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tif(count == colIndex)\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\titem[arrCol[colIndex].dataField] = {style: style,value: null};\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\telse\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\titem[arrCol[colIndex].dataField] = null;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tdataSource.push(item);\r\n\t\t\t\t\t\tindex++;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\t\r\n\t\t\t\treturn rowData;\r\n\t\t\t};\r\n\t\t\t\r\n\t\t\tvar addMergedCells = function(fromCell,toCell) \r\n\t\t\t{\r\n\t\t\t\tarrCells.push([fromCell, toCell]);\r\n\t\t\t};\r\n\t\t\t\r\n\t\t\tvar getTag = function()\r\n\t\t\t{\r\n\t\t\t\tif (arrCells.length > 0) \r\n\t\t\t\t{\r\n\t\t\t\t\tvar arrChildren = [];\r\n\t\t\t\t\tfor(var index = 0;index < arrCells.length;index++)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tvar mergeCell = arrCells[index];\r\n\t\t\t\t\t\tarrChildren.push(util.getXML({\r\n\t\t\t\t\t\t\tname: 'mergeCell',\r\n\t\t\t\t\t\t\tattributes: {'ref': util.getCanonCell(mergeCell[0]) + ':' + util.getCanonCell(mergeCell[1])}\r\n\t\t\t\t\t\t}));\r\n\t\t\t\t\t}\r\n\t\t\t\t\treturn util.getXML({\r\n\t\t\t\t\t\tname: 'mergeCells',\r\n\t\t\t\t\t\tattributes: {'count': arrCells.length},\r\n\t\t\t\t\t\tchildren: arrChildren\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t};\r\n\t\t\t\r\n\t\t\tvar convertObjectToArray = function(rowData,arrCol)\r\n\t\t\t{\r\n\t\t\t\tvar retValue = Array(arrCol.length);\r\n\t\t\t\tfor(var count = 0;count < arrCol.length;count++)\r\n\t\t\t\t{\r\n\t\t\t\t\tvar objCol = arrCol[count];\r\n\t\t\t\t\tretValue[count] = rowData[objCol.dataField];\r\n\t\t\t\t}\r\n\t\t\t\treturn retValue;\r\n\t\t\t};\r\n\t\t\t\r\n\t\t\tvar copyArray = function(arrSource)\r\n\t\t\t{\r\n\t\t\t\tif (util.isArray(arrSource)) \r\n\t\t\t\t{\r\n\t\t\t\t\tvar retValue = Array(arrSource.length);\r\n\t\t\t\t\tfor (var i = 0; i < arrSource.length; i++) \r\n\t\t\t\t\t{ \r\n\t\t\t\t\t\tretValue[i] = arrSource[i]; \r\n\t\t\t\t\t} \r\n\t\t\t\t\treturn retValue; \r\n\t\t\t\t} \r\n\t\t\t\treturn Array.from(arrSource); \r\n\t\t\t};\r\n\t\t\t\r\n\t\t\tself.add = add;\r\n\t\t\tself.addMergedCells = addMergedCells;\r\n\t\t\tself.getTag = getTag;\r\n\t\t};\r\n\t\t\r\n\t\tvar XlsxUtil = function()\r\n\t\t{\r\n\t\t\tvar self = this;\r\n\t\t\tvar objSheetsProp = {};\r\n\t\t\t\r\n\t\t\tvar xmlPrefix = '<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\\n';\r\n\t\t\tvar schemas = {\r\n\t\t\t\t\t'r': 'http://schemas.openxmlformats.org/officeDocument/2006/relationships',\r\n\t\t\t\t\t'mx': 'http://schemas.microsoft.com/office/mac/excel/2008/main',\r\n\t\t\t\t\t'mc': 'http://schemas.openxmlformats.org/markup-compatibility/2006',\r\n\t\t\t\t\t'mv': 'urn:schemas-microsoft-com:mac:vml',\r\n\t\t\t\t\t'x14': 'http://schemas.microsoft.com/office/spreadsheetml/2009/9/main',\r\n\t\t\t\t\t'x14ac': 'http://schemas.microsoft.com/office/spreadsheetml/2009/9/ac',\r\n\t\t\t\t\t'xm': 'http://schemas.microsoft.com/office/excel/2006/main',\r\n\t\t\t\t\t'spreadsheetml': 'http://schemas.openxmlformats.org/spreadsheetml/2006/main',\r\n\t\t\t\t\t'relationshipPackage': 'http://schemas.openxmlformats.org/package/2006/relationships',\r\n\t\t\t\t\t'worksheet': 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/worksheet',\r\n\t\t\t\t\t'stylesheet': 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/styles',\r\n\t\t\t\t\t'sharedStrings': 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/sharedStrings',\r\n\t\t\t\t\t'contentTypes': 'http://schemas.openxmlformats.org/package/2006/content-types',\r\n\t\t\t\t\t\r\n\t\t\t\t\t'officeDocument': 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument',\r\n\t\t\t\t\t'package': 'http://schemas.openxmlformats.org/package/2006/relationships',\r\n\t\t\t\t\t'table': 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/table',\r\n\t\t\t\t\t'spreadsheetDrawing': 'http://schemas.openxmlformats.org/drawingml/2006/spreadsheetDrawing',\r\n\t\t\t\t\t'drawing': 'http://schemas.openxmlformats.org/drawingml/2006/main',\r\n\t\t\t\t\t'drawingRelationship': 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/drawing',\r\n\t\t\t\t\t'image': 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/image',\r\n\t\t\t\t\t'chart': 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/chart',\r\n\t\t\t\t\t'hyperlink': 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/hyperlink'\r\n\t\t\t};\r\n\t\t\tvar numberPredifined = null;\r\n\t\t\t\r\n\t\t\tvar initialize = function()\r\n\t\t\t{\r\n\t\t\t\tvar getDateTimeCellObj = function(objRet,value,sharedString)\r\n\t\t\t\t{\r\n\t\t\t\t\tvar date = getDateTimeValue(value);\r\n\t\t\t\t\tif(date)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tobjRet.value = date;\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tobjRet.value = sharedString.add(String(value));\r\n\t\t\t\t\t\t//objRet.value = value;\r\n\t\t\t\t\t\tobjRet.isString = true;\r\n\t\t\t\t\t}\r\n\t\t\t\t\treturn objRet;\r\n\t\t\t\t};\r\n\t\t\t\tvar getNumberCellObj = function(objRet,value,sharedString)\r\n\t\t\t\t{\r\n\t\t\t\t\tobjRet.value = value;\r\n\t\t\t\t\tobjRet.isString = false;\r\n\t\t\t\t\treturn objRet;\r\n\t\t\t\t};\r\n\t\t\t\tnumberPredifined = {\r\n\t\t\t\t\t\tdate: {formatId: 14,cellObjFunc:getDateTimeCellObj}, //mm-dd-yy\r\n\t\t\t\t\t\ttime: {formatId: 21,cellObjFunc:getDateTimeCellObj}, //h:mm:ss\r\n\t\t\t\t\t\tinteger: {formatId: 1,cellObjFunc:getNumberCellObj},\r\n\t\t\t\t\t\tdouble: {formatId: 2,cellObjFunc:getNumberCellObj}\r\n\t\t\t\t};\r\n\t\t\t};\r\n\t\t\t\r\n\t\t\tvar getXML = function(config) \r\n\t\t\t{\r\n\t\t\t\tvar retValue = '<' + config.name;\r\n\t\t\t\tvar content = '';\r\n\r\n\t\t\t\tif (config.ns) \r\n\t\t\t\t{\r\n\t\t\t\t\tretValue = xmlPrefix + retValue + ' xmlns=\"' + schemas[config.ns] + '\"';\r\n\t\t\t\t}\r\n\t\t\t\tif (config.attributes) \r\n\t\t\t\t{\r\n\t\t\t\t\tfor(var key in config.attributes)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tretValue += ' ' + key + '=\"' + escapeString(config.attributes[key]) + '\"';\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tif (!isUndefinedOrNull(config.value)) \r\n\t\t\t\t{\r\n\t\t\t\t\tcontent += escapeString(config.value);\r\n\t\t\t\t}\r\n\t\t\t\tif (config.children) \r\n\t\t\t\t{\r\n\t\t\t\t\tcontent += config.children.join('');\r\n\t\t\t\t}\r\n\t\t\t\tif (content) \r\n\t\t\t\t{\r\n\t\t\t\t\tretValue += '>' + content + '</' + config.name + '>';\r\n\t\t\t\t} \r\n\t\t\t\telse \r\n\t\t\t\t{\r\n\t\t\t\t\tretValue += '/>';\r\n\t\t\t\t}\r\n\t\t\t\treturn retValue;\r\n\t\t\t};\r\n\t\t\t\r\n\t\t\tvar escapeString = function(str)\r\n\t\t\t{\r\n\t\t\t\treturn str;\r\n\t\t\t};\r\n\t\t\t\r\n\t\t\tvar addSheetProp = function(prop,value)\r\n\t\t\t{\r\n\t\t\t\tobjSheetsProp[prop] = objSheetsProp[prop] ? (objSheetsProp[prop] + \" \" + value) : value;\r\n\t\t\t};\r\n\t\t\t\r\n\t\t\tvar getSheetProp = function(prop)\r\n\t\t\t{\r\n\t\t\t\treturn objSheetsProp[prop];\r\n\t\t\t};\r\n\t\t\t\r\n\t\t\tvar getCanonColor = function(color) \r\n\t\t\t{\r\n\t\t\t\treturn color[0] === '#' ? 'FF' + color.substr(1) : color;\r\n\t\t\t};\r\n\t\t\t\r\n\t\t\tvar getColorTag = function(color) \r\n\t\t\t{\r\n\t\t\t\tif (isString(color)) \r\n\t\t\t\t{\r\n\t\t\t\t\treturn getXML({\r\n\t\t\t\t\t\tname: 'color',\r\n\t\t\t\t\t\tattributes: {'rgb': getCanonColor(color)}\r\n\t\t\t\t\t});\r\n\t\t\t\t} \r\n\t\t\t\telse \r\n\t\t\t\t{\r\n\t\t\t\t\tvar attributes = {};\r\n\t\t\t\t\tif (color.tint) \r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tattributes['tint'] = color.tint;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (color.auto) \r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tattributes['auto'] = !!color.auto;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (color.theme) \r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tattributes['theme'] = color.theme;\r\n\t\t\t\t\t}\r\n\t\t\t\t\treturn getXML({\r\n\t\t\t\t\t\tname: 'color',\r\n\t\t\t\t\t\tattributes: attributes\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t};\r\n\t\t\t\r\n\t\t\tvar hasInArray = function(arrSource,value)\r\n\t\t\t{\r\n\t\t\t\t return (arrSource.indexOf(value) > -1);\r\n\t\t\t};\r\n\t\t\t\r\n\t\t\tvar isObject = function(refObject)\r\n\t\t\t{\r\n\t\t\t\tif (typeof refObject === 'object' && refObject !== null) \r\n\t\t\t\t{\r\n\t\t\t\t    return true;\r\n\t\t\t\t} \r\n\t\t\t\treturn false;\r\n\t\t\t};\r\n\t\t\t\r\n\t\t\tvar isString = function(object) \r\n\t\t\t{\r\n\t\t\t    return typeof object == \"string\";\r\n\t\t\t};\r\n\t\t\t\r\n\t\t\tvar isDate = function(object) \r\n\t\t\t{\r\n\t\t\t\treturn (Object.prototype.toString.call(object) === \"[object Date]\"); \r\n\t\t\t};\r\n\t\t\t\r\n\t\t\tvar isArray = function(object)\r\n\t\t\t{\r\n\t\t\t\treturn Array.isArray(object);\r\n\t\t\t};\r\n\t\t\t\r\n\t\t\tvar isObjectEmpty = function(obj)\r\n\t\t\t{\r\n\t\t\t\tfor(var key in obj) \r\n\t\t\t\t{\r\n\t\t\t        if(obj.hasOwnProperty(key))\r\n\t\t\t        {\r\n\t\t\t        \treturn false;\r\n\t\t\t        }\r\n\t\t\t    }\r\n\t\t\t    return true;\r\n\t\t\t};\r\n\t\t\t\r\n\t\t\tvar getDateTimeValue = function(value)\r\n\t\t\t{\r\n\t\t\t\tvar timezoneOffset = new Date().getTimezoneOffset() * 60 * 1000;\r\n\t\t\t\tvar dateValue = isDate(value) ? value.valueOf() : value;\r\n\t\t\t\tvar date = 25569.0 + (dateValue - timezoneOffset) / (60 * 60 * 24 * 1000);\r\n\t\t\t\tif (isFinite(date)) \r\n\t\t\t\t{\r\n\t\t\t\t\treturn date;\r\n\t\t\t\t}\r\n\t\t\t\treturn null;\r\n\t\t\t};\r\n\t\t\t\r\n\t\t\tvar cloneObject = function(objSrc)\r\n\t\t\t{\r\n\t\t\t\treturn JSON.parse(JSON.stringify(objSrc));\r\n\t\t\t};\r\n\t\t\t\r\n\t\t\tvar getArrayOfSize = function(length,callback)\r\n\t\t\t{\r\n\t\t\t\tvar index = -1;\r\n\t\t        var retValue = Array(length);\r\n\t\t        if(callback)\r\n\t\t        {\r\n\t\t        \twhile (++index < length) \r\n\t\t\t\t    {\r\n\t\t        \t\tretValue[index] = callback(index);\r\n\t\t\t\t    }\r\n\t\t        }\r\n\t\t        return retValue;\r\n\t\t\t};\r\n\t\t\t\r\n\t\t\tvar getLetterFromCells = function(fromCell,toCell)\r\n\t\t\t{\r\n\t\t\t\tvar alphabet = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';\r\n\t\t\t\tvar retValue = \"\";\r\n\t\t\t\tvar strData = '';\r\n\t\t\t\tvar count = fromCell;\r\n\t\t\t\tvar index = null;\r\n\t\t\t\tdo \r\n\t\t\t\t{\r\n\t\t\t\t\tindex = (count - 1) % 26;\r\n\t\t\t\t\tstrData = alphabet[index] + strData;\r\n\t\t\t\t\tcount = (count - (index + 1)) / 26;\r\n\t\t\t\t} while (count > 0);\r\n\t\t\t\tretValue = strData + (toCell || '');;\r\n\t\t\t\treturn retValue;\r\n\t\t\t};\r\n\t\t\t\r\n\t\t\tvar getCellsFromLetter = function(cell) \r\n\t\t\t{\r\n\t\t\t\tvar retValue = {x: 0,y: 0};\r\n\t\t\t\tvar len = cell.length;\r\n\t\t\t\tfor (var count = 0; count < len; count++) \r\n\t\t\t\t{\r\n\t\t\t\t\tvar charCode = cell.charCodeAt(count);\r\n\t\t\t\t\tif (charCode >= 65) \r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tretValue.x = retValue.x * 26 + charCode - 64;\r\n\t\t\t\t\t} \r\n\t\t\t\t\telse \r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tretValue.y = parseInt(cell.slice(count), 10);\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\treturn retValue;\r\n\t\t\t};\r\n\t\t\t\r\n\t\t\tvar getCanonCell = function(cell) \r\n\t\t\t{\r\n\t\t\t\tif(isObject(cell))\r\n\t\t\t\t{\r\n\t\t\t\t\treturn getLetterFromCells(cell.c || 1, cell.r || 1);\r\n\t\t\t\t}\r\n\t\t\t\treturn cell;\r\n\t\t\t};\r\n\t\t\t\r\n\t\t\tvar getBooleanValue = function(value)\r\n\t\t\t{\r\n\t\t\t\tif(['true', 'yes', '1'].includes(value)) \r\n\t\t\t\t{\r\n\t\t\t\t    return  true;   \r\n\t\t\t\t}\r\n\t\t\t\telse if(['false', 'no', '0'].includes(value)) \r\n\t\t\t\t{\r\n\t\t\t\t    return  false;  \r\n\t\t\t\t}\r\n\t\t\t\treturn false;\r\n\t\t\t};\r\n\t\t\t\r\n\t\t\tvar throwNSError = function(message)\r\n\t\t\t{\r\n\t\t\t \tthrow new Error(\"Error in \" + \"NSXlsxExport\" + \" with details::\" + message);\r\n\t\t\t};\r\n\t\t\t\r\n\t\t\tvar isUndefinedOrNull = function(object) \r\n\t\t\t{\r\n\t\t\t    return (typeof object == \"undefined\" || object === null);\r\n\t\t\t};\r\n\t\t\t\r\n\t\t\tvar setObjectWithDefaults = function(objCurrent,objDefault)\r\n\t\t\t{\r\n\t\t\t\tif(objCurrent)\r\n\t\t\t\t{\r\n\t\t\t\t\tvar objReturn = cloneObject(objCurrent);\r\n\t\t\t\t\tif(objDefault)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tfor(var key in objDefault)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tobjReturn[key] = objDefault[key];\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\treturn objReturn;\r\n\t\t\t\t}\r\n\t\t\t\treturn objDefault;\r\n\t\t\t};\r\n\t\t\t\r\n\t\t\tvar pixelToCharWidth = function(width,maxCharWidth)\r\n\t\t\t{\r\n\t\t\t\tmaxCharWidth = getMaxCharWidth(maxCharWidth);\r\n\t\t\t\tvar charWidth = truncate((((width - 5) / maxCharWidth) * 100) + 0.5) / 100;\r\n\t\t\t\treturn charWidth;\r\n\t\t\t};\r\n\t\t\t\r\n\t\t\tvar charToRealWidth = function(charWidth,maxCharWidth)\r\n\t\t\t{\r\n\t\t\t\tmaxCharWidth = getMaxCharWidth(maxCharWidth);\r\n\t\t\t\tvar width = truncate((((charWidth * maxCharWidth) + 5) / maxCharWidth) * 256) / 256;\r\n\t\t\t\treturn width;\r\n\t\t\t};\r\n\t\t\t\r\n\t\t\tvar getMaxCharWidth = function(maxCharWidth)\r\n\t\t\t{\r\n\t\t\t\t// 6 is for \"Calibri 12\"\r\n\t\t\t\tmaxCharWidth = maxCharWidth ? maxCharWidth : 6;\r\n\t\t\t\treturn maxCharWidth;\r\n\t\t\t};\r\n\t\t\t\r\n\t\t\tvar truncate = function(num)\r\n\t\t\t{\r\n\t\t\t\tif (Math.trunc) \r\n\t\t\t\t{\r\n\t\t\t\t\treturn Math.trunc(num);\r\n\t\t\t\t}\r\n\t\t\t\tif (isNaN(num)) \r\n\t\t\t\t{\r\n\t\t\t\t\treturn NaN;\r\n\t\t\t\t}\r\n\t\t\t\tif (num > 0) \r\n\t\t\t\t{\r\n\t\t\t\t\treturn Math.floor(num);\r\n\t\t\t\t}\r\n\t\t\t\treturn Math.ceil(num);\r\n\t\t\t};\r\n\t\t\t\r\n\t\t\tinitialize();\r\n\t\t\t\r\n\t\t\tself.getXML = getXML;\r\n\t\t\tself.escapeString = escapeString;\r\n\t\t\tself.addSheetProp = addSheetProp;\r\n\t\t\tself.getSheetProp = getSheetProp;\r\n\t\t\tself.getCanonColor = getCanonColor;\r\n\t\t\tself.getColorTag = getColorTag;\r\n\t\t\tself.hasInArray = hasInArray;\r\n\t\t\tself.isObject = isObject;\r\n\t\t\tself.isString = isString;\r\n\t\t\tself.isDate = isDate;\r\n\t\t\tself.isArray = isArray;\r\n\t\t\tself.isObjectEmpty = isObjectEmpty;\r\n\t\t\tself.getDateTimeValue = getDateTimeValue;\r\n\t\t\tself.cloneObject = cloneObject;\r\n\t\t\tself.getArrayOfSize = getArrayOfSize;\r\n\t\t\tself.getLetterFromCells = getLetterFromCells;\r\n\t\t\tself.getCellsFromLetter = getCellsFromLetter;\r\n\t\t\tself.getCanonCell = getCanonCell;\r\n\t\t\tself.getBooleanValue = getBooleanValue;\r\n\t\t\tself.throwNSError = throwNSError;\r\n\t\t\tself.isUndefinedOrNull = isUndefinedOrNull;\r\n\t\t\tself.setObjectWithDefaults = setObjectWithDefaults;\r\n\t\t\tself.pixelToCharWidth = pixelToCharWidth;\r\n\t\t\tself.charToRealWidth = charToRealWidth;\r\n\t\t\tself.xmlPrefix = xmlPrefix;\r\n\t\t\tself.schemas = schemas;\r\n\t\t\tself.numberPredifined = numberPredifined;\r\n\t\t};\r\n\t\t\r\n\t\tself.process = process;\r\n\t\t\r\n\t\tinitialize();\r\n\t};\r\n\t\r\n\treturn NSXlsxExport;\r\n})();\r\nnsModuleExport(this,\"NSXlsxExport\",NSXlsxExport);";
