intelica-library-ui 0.1.70 → 0.1.71

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -2517,28 +2517,28 @@ class HtmlToExcelService {
2517
2517
  let Table = document.getElementById(idTabla);
2518
2518
  if (Table == null)
2519
2519
  return;
2520
- Table.innerHTML = "";
2520
+ Table.innerHTML = '';
2521
2521
  Table.innerHTML += html;
2522
2522
  const ws = XLSX.utils.table_to_sheet(Table, { raw: false });
2523
2523
  const wb = XLSX.utils.book_new();
2524
2524
  XLSX.utils.book_append_sheet(wb, ws, tabname);
2525
- XLSX.writeFile(wb, filename + "." + extension);
2525
+ XLSX.writeFile(wb, filename + '.' + extension);
2526
2526
  }
2527
- Logo = "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";
2527
+ Logo = 'iVBORw0KGgoAAAANSUhEUgAAAPAAAAA+CAYAAAAVt5ZWAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAACYVSURBVHgB7X0LdBzVmeZ/b1W3ZNmGNsHGIbPjlh8EHIxbwa/dc8ZqZZnZbDKzljcw4WFbLbLJSU6SdStLzgHColYOBLJhkJwhGzKbM2rbARISsNjMZJjAidvkJLEtg2QgOGActRnAlg2hsbH16rp3/v/equrq7upWC8u2sPuDdqnrcau6qr77//d/XQanGX2xSKjGgCi3ICyzcCEICENWSpEFJi0BzGJpMQYZJrI7rnzqpX6ooooqKoYJk4y+eCQ03eLNhuCrLUs0gWBhKSQAw41Mgv6P4X8SFwZDKuN36Fry1EubnDbu+8xfNX+67kgIxiB1xY/701BFFVX4gsEkYf8ty6KmZBuEJddKC0KKtAJpauEfFv5pSYZLiVIYlxK/40EWZCwL2q76eX/Sbae1oRGP6MHtIeQ7yKxModROXvFo/2aooooq8nDKBCbiGoy1I9eiUpGSiCs1aVFDRvIhiSWtl7id0T5ISvqeqpU8Nv/xvoNOWy9/7uoWpHiSRLJqC5nsLEVWpmkbg7Hk4sf3HYQqqqji/RP4ldsjEVMEOpFsjURSRTrSjXF8S0siqaT19kd9p49FRIRWVI1T3vZe/sLH25lgCTpYE161p5aKwKpjUG2lUTXvuOrnLyShiirOc7wvAg98Y2WnFGIjkdYlrkNUlLS4ZIq8RELhEFK+IwT77vAx0dXQ059x2qIx84wh3i4li2u1GzTxLacDcKSwbksTmyQyElmMNjU8+Yc0VFHFeYoJEXjgnmiYjY5tE2PZCDhkI/YKJSwZaBVaKtXZISCNdwVsGrJEoiGZIy5h3xcjYYMZ27CdiOoMhIfwDpFFTpIr1VtqldzpICArEkuefrEDqqjiPETFBB74zjVRnh3bBmPZC63RLBJUKO4qw7JNZBrj5ogHapxrGCI2/3t9RWPW/V9d3igtK8kkV1ZqR/oqguZJYMgR2iW2V1ID7BgNxb6SeqZq5KrivENFbqTXH/hkixwVSZFlelyq5C1TX/RfTBHP/ocWO5DKiUUPPpvya+/AV67eiPTvAuVMco5h6kBpN+AsIe875C81jzuq5K3ifMW4BH7jB/+tHcasBIlERp5c9NwqqpH0tTVol4QAKdzYseiBPSm/tvbFI2HTMruRdFHFfCKwQ0nNX1slsMlsj7H1GpZHa/t7Yukvnz9j6nMo2hwKnpyxkTEew2vIoArQc2T3j6rq+xTB3FXXh4UMtOO7EaXng5rapqO9W5NwDqOsCn3oh2tbcECblKNjIEbwg0s5Mgo4BrZVXVuVRS0W/04sus+fuNcntoX/cvjXLY3Dz8SRlCFHVc6Nb6WSwG57yvosc2Ndj/rsqM6WJTuW/uL5hPc8fddHwjUj0D2CVm40lKVhkjFn5YY+vGER7zq8wuSRXVtboYpJQzgaC504YTUXrsfxWgY7zB6/Y4i8Uga30+H5W2Tb4K6tXXCOoqQEPtJ9XcSSSN6spb4rUYv/Ckfy0v0EtsPiIrHo3mLiNn/9oUhNINB4ARtdEx15umnlyC7Ik6PSbQS5y3K6MXUpwpayLCd1nSPtb21Lf7G36KEExwD90TIakLC9rznS4LV2nyrmrFjXXEhe+7pic1fFOg7vTKahiknB8DCEOGfdxVtYGv/xJbCUASJ8uHg9a8fF+UXgQ92oihgCDVbSIRHKR8YUeVFh3j808909783e9PjxxdtNYLP+InZDLMB5KBAMLuVmIBwwzQj6kUJhKw3XiV/CLPGuTVJpm6ttvjItTb2qsgNbTc/bl0sYyDJ285Kf5/uQCb+/NtKOB8Tsg8NBS9ILsBYmCXgHQqyUvpJVL04aphjmrloXtSwWLlw/Nt3oyaSSk9a5TQXg84n4PR9cF4JzGL4E5gFIoFo7T9urFH2ViBwcCcL3X53P9hy/JGSa5p1mQLaDEdCs5ERwqRzANWIYPgW/lavFXpLSSvPVRGRK4uYG0PZa5tiwmMvm3LAa1yppLXcMA1vrJ1Vf+mwkjockVOimOotqofnFT18Vv/Kfn5+U3tcwZFpfbzGGZ8CUTMIQgsc4h5bC9bXDkAIaw59DQMGCz4C1+GxKwzkMXrjiyE9uamEG2+B8p1f2+CiD7/5+Ntzwm4/K3/1plk1q5BWNYaXF6GOhW0mgw7cp8CLcWfsIrOZ71dvuMXC5A26nY2B5YlfmDcg1p1XXkcG92hY/trfJj7z7boi0oFrQ6V3nOeWdfZ+8PAyTgMM7f5TCaykyWGHn0nGuSbMPIuxxblFHigbHc9o+kSeBDz1yfRgXCW1ZZnB8BOCh52vhx3+YLodEAEyTgjIUUZkmsVBhz0TcxbWDbO3Ml+CjwUFteJIes7KEnHvI625y4LVIs9xKbGIHiu/WxT/1N0i9dFMkjufqzGuPOe2r9maZrIbIPSmq9OGdWxJzV61PS8FiQFZOQyQHf+dvVKnizGNw15aGS1auR22M0Xg4Y0qeeKM3eU6nqOYR2DQDG5FhYXr997zB4H//ajq8eZwB55IRecmEpdL/iLjCIhUN5vD34CtzXpBX1L7FpMiXuA6c8Wz+GmdfbclS1jFwlpCxJO9Y/NBzJdXfl9dF2oVkCadxKe32PJ0B06J+zfN/uaTxqqde2AGTgMM7lVsiCVVMSdiS+Jw1WhXCJfChR2Jhxq2Nr/8J4I4nTeh93SUZgSnJq5dK4n7IHJLr/2w/+0ToTZBZLZGZO5j1hF44flzmGqW0eHQprYI5mHMMtpHCrqF18UN96VIX/Uos0iksFlfcFcWdg1QqgGv8wh4Ix8cATVBFFecYXAIbaLjasoex7/+WwbFhvU4xF0Hk5Vwwkrp1XMq/nfcW+8xHjrA6GEHy6n2ZxxUkIW/cSzKb5bmcPTtI6cZupDnw1kXd/r5kwr5YJIy2sm0opCNaagvnHJ4zOr4p0HGeyscM0b5rrow2PP1iybanCihYBIZrQ2hpymRSPdWx9RSB+1wQmZ0/TsMUgUvgLz5m9f/mj3ye+oJqtDIfM06GJLUkqXvDgmPhz13+LpvBxlQwhyKvLU9dyxQow45LI6n0WfxHSK+GCw6n0Ub9DtLwuyenX9DV0JUq+cLu/3xDI/YfSWwwrMfSwt2WcyF7rNAyZ8mmzgWJT+OiFJwC5qzYkPBbf2T3Ft/1H1l+Y2SMmUUBCTgkSduquMLFy9ZFucFaGI3dhmy3x1AQLlmxIYOmwh5hyc1v7flRCsaBikQSwZjzHX/2Ur/90L8fx9+SKXdNlSCE56vJBpolh0a8x5SQEgLttknjE0hjx70X1bXk0d6HT/s4tNS9Rlt8f6ngj3Igwta8NzMGBqzBdzXiPhfEJSs30DuHv0n2V/psSp3DfG9GhBnQjM9+Xt49lGhjQaGGLzF6P+CJsenHe/w6dFbJiQ79w980opqclJY1T4yhupwl8lr6Q0QWwo3MYk58s7Qr6JAcVJYuFVXFpJ11ZGcfpUxpttY/uDNd7vz7vxC5X0qjDaSdWkhBWVmhz2XZUVoS8pMchDcBgsEz8qKGLz+VOqUXCR+c9FuPxhPf+zh7+fqYb0CChB2Du7dEdfRQALezKIwDivjibKzjcJne/2L0+xqSb4f3A/uaKtmVOhzDoACJ8a/bbhwt+GOthyuUXHNXxfC+iAGfTWm81/V+x5S61/hGJo/s2lyxJdoNlwUeh8p9yGnkR9uRZyvrKPI67ImcQ4pkYehu2VhoCugAa6QbCRq1qedSXpPUjo2ybVFc76QzlMCWtjmh7B5OoZcq2eH7pdVlgko3BAPPD1F9TnDPx9DBqcjpabTAK+VKYOxf2r78dOq0S4GJgCRGVpjbK32AFPElZZBI33T4LKpwc1ata2do3YUJgUXx2gfmrFiXmMqx46pjOsm3wcSDP8LM5NsuWb6+a7B3a1upnVQ0H+PkFQmrFRWJT885GE/MWbmheXQab3Jcl7zU3oObr21nkO0DKpVjM0F5ZfWgVf3l3V9qt49Wjyley+fycMU7qG61LXpgT7RUwoOD/V/6eNxkBsUeR3X7dgvuCaVzVvurx2hmq/U6KpN1LH16coI5Jg0M5mVZ5eT1QMX7hqKxsxJdNGfl+u6JkzcH9QKuWNcOUxDUMRkGfz/PJAfO4hQvX+r5oMwh0oXhFEDhvDVD1ja3zcId0BccHXzohgGJNxt5EHKGuNq7k0smlM53zzhTQebIZNuk6Qvp8x2czZi/qGtPWTJRxtL+L1+9HX9tJ54i5LFVgx3LZfcSHsjc+Z0xMK1DAb1p6ZP5CQ9TBOGiF0Wqh3vQXpY9NnhSxOEMA/2rnaQFwCnCJnEzTCFUpFVU+Hzw3dtRKrCHgoFoOFG2ff0ZByzq2GPyVOijP13fifrmRgrUULvpREHbDEVqsC13NUOZ1/Zsr3Isymr8ax/9xDQZjF96/2/HvbADX10WR6NAO7Ya0jYqR7oCuIEhAPk2btf07XQazNl189J/ef6Mv+gTBY3R0MC2+fCuZMpZ95HlMTTIiDjezZYSh23ET6JwpQnZtJBBV0XF49eATwIGnrWNCSPvJcMnXvLFpPEltlbyXpKRhUvegwaflGFByDIghO9QDM/fCL4Sh3ejlEpNhQg2bYcoQ160DeBwLeF9PjRGR/EQtRMlws56iso7XMKg6e7DZAceF3XaxoN6GDN6sP10/nXFovY9LPkO4D3sUgQmH7BhZLfhk4g4tmIntiIXuqz9wa531b4CmR8h6blS2MFNs6P+3p0pGAckdQNgqrGuE8yhBbzzo50zONlJBeqyfUJX0ZYy8bF/PnN5wu8X+DBbB3duSRaut6OHYnNXbSALZHvxcRCai+O1wwXWT3tsnHC+Yy9N3oTiDCp6YXory57SLzgrpfamKVRx0PNye5BSxihhdYL2AORdv61FJOAsw05B9NkAGXS+tB3eVWyZtzPPaH0Sn1GCnhE9S799i4/9UQq1mTYhjNTRMlFieI4UqHtY+h1AVTrGj/50XdQMij7G2VJb0jE73MKb5CelLCCqx0jkNqnFcBp51jr/271NlZD3wNeWxQM41gUaa4NtSWY5JZk5IR6OAQscd5He5nw819Hxsf9fmrx90fBZGT8WA1+Ocdw2FLpZSuUSnEfhDMCyAlHwH7cReZvsF80X9KIP7t66tsRv2AhnGVqz8B+TSkO0VuJWo2eE96F+Ii44ihY7WmGIJ7WP7/5mv20kyTmONZNICPVS58axUvtRnfgp6Y1QduzRrrRz/sjgbt9kw3UNC+/tTUIZNMe7Q+23fTv+6i3L0WjAOvEG2OeHXMiWe5Fqiz6fqy3nfL25fdTato/19CdKnXfvX32shQcvmApqdXoCSeZP+K5lbB6cAaBrpt3/9LLiHGiU+K3F67QWAWcRJX8bqsJHJhDjfrpzwTkXSb/15Oc3UfL+uV3pgkmvZddOBLRduwr2wFcHGTuSkSmTc7KGmYlL7y09ziXS8kCweSYfaYnCc5HV2Z2uJHT8xq6JDDyldpyLVWNbWTjktS8BDhqMrb3s8f6SvdqLn1ocEVneVao3O5MQpUjpA1J30f/XCWcBs//TjRGw/KXvRCQOveCoNqYK/caWwU85uOb9otxvI6EGZxDeKC9CYaSXVrs3+B0aNt1yGCw3itT16kRO+uUUaXAylWjdqydnZp49dlHXz96+/AnDALbq+r8J100PoE0gGDYNqOc8eKHBjaVonm+SnIXny9fgs/JpuEgeAzdZ37WH2ZZmWxN3s5PyxrmQ61zsy8J9Kel47WU/LV1Ch8grgdw2MoQXfyGcZbDxLc1TAizLw/6+SpkuFZVWGrJoDXryl8LZwpgR8XOi4puXGjwD1VW0JZ61UP0ub5QXwRvphS/4EzqSTKJwLNa6TCV3hQ54JCls/wp3nOkEa3irY5zIcnjoYBj+6eh/CBmmmTAMlgBugmEYFJzFDJoECf+lBonrNXIE1hu/hiv5gNsGdyK2wKu2O5fleWtcjVqr9UzmKlnit02Lf9JXViV+sTkSkVmxHWiuJR/JXkU58Ij/ehbFTjMKE0JxT0BVNOAsAdVn33Oj1rkXTiN0FBvvhnH8wUx5DxjF/MeQ0Glc5TtkMsFRkUUuWorgWnuZ3Zz94j9+8CLYOjAXhmSNVCmGlBuMHmohUPCyLP4dUH8zYhoq4P952j72qWAfTGejro/YDbcsvmgPvaQTieHZbnup0OUhsqxt8cPPJaEMXlwbacFL6MIfFvI7XxXlcbrL0VD7FPRwNtxJVFzRtwSPZZy2iL33F8WmEC61ASUwy6gXvDAO0VnY0u/wCRPu6p0tX8jMZNiDUIkZlVpII2D8AxcWs5DLzLKUMnx5zVFonvEiXBYYLBq3us4ndyHzwiGl59zMk9qr6M/YM7gidsXDpdMNCS9dG4lLS3a6vLX9YtjCQaiiIpR6yScTtcOqk5gyQwrBs6el06o4WITBu7i8sNKIMBMlFFqPZciHs5pU+HlkXy388IWZMGShw8cgqxEatxilGFKoB2eUzCAYV0avWvTkXzvr9+yTM17Reb621JV2KEjxmBbAGWfnIrike3pXByBNn/HvXv6Pz45rRd53LSX7y4S7wjO+5wzegSoqRRrOUbASgSsoicIwySgbLKL8zbBpuJZ3FWoiOqCHpK+giqhr/EhtqppTLltkHoPfPM7hzu218OzhAKWbkcqspC75EBjH8a1A1ZlZyuiFEhg+Ped1uG72AZjm5Am7UtQeWntdQjbcbwzcSvH6q5Ru5BeTaQtdEVf8sHz8dF9zJFRTCzTXUhSs3B3yas8owasSuELgE0gzHxFsR491wCTgbJXjxWFePwogv00UvVapi6/Cc5mJEppMmnHlS0/7bbQDeujTg1b87eCT/WXiy03WrqVg15hzCPWrARPJG5DHR9QaFfssdAK95Aan5H5p6ZgPuWDmCfaF+a/BldPfYdKy9CRkNjyS1LOmEDIXeunal520Ydl1YproaOh6rqya9cqNkYigZH9LhvP9w54W8Y+syKahioqARsmUN+/ahZTNhyeQojcVMX260TM0JLqLtzCV5jmZGV+McV9ruxB87dHeU+vAOONoqhbAvMGR399tQtuTQacyh/b46jpYuryORdJXsjojC1/86CH2wPJ9sOTC404DoNOSIHcwONq4X29uk1dtzgV/YQ+fxlVNl/3gubaGrvIF2v8Qi8SFAdvxyLCWGAUpD45/Gf9veOql02akONegJUNxFBUZn1TxuA8w0kpd9Y9y0znak4pI8Tkgc3QSCu5xaYmDju/1OBqKN/6TAQ/uNtQ5POqTko52PSzkrgVLLx6C/xd9Df57+E/uFbnwqMJ+8tZbfoflBL/X3bzpWHDGxxc9OI7KHIuEXr450s2AcixZyO5p7PPmn1nqdTugionCN+iE4qNJUkGFuGTlTfGJ7H8mQNFkJbZEK017pCAM8omfzhRPfd/8iydwwzBT9MebxwBaH+Ww/QB37baQL0CV9K0zLfj26gz8/SeOwoenWzk3kxuzLPPJnEclVWMrz4XkDotB+Yb7ldT9v8/Gy5XXIez7H5FoncH78KhYXluFcNVoVWW6Kn2BVDcRq3TfadOMJPgYs0gKUyLAeKQkv6cevxmdlex/JlEuvY/SHi9Zvr6zHDHptwSHLtiO96K9Zkj0lfxtPoE7lYaSUgdRTiMwZ61NZnY+uD71pcdY9M1jeU7ffPGL+MR8C74ZHWEz0NKsZ0HIXaGz8I436TCnSkcuT1e6A1yaGBy00TmDOnNiQWfvJhgHffFIaPoQb8dj4spy7RqrCuYv9LqP7O/C4BXHt54LKDNbwcY5V6/rpxIwqvbT0PQYegH7D/vUdiJVc+6qda3Sv1RPWFXaWLk+SRFDOMxKjxkiY2bNsEFBCFRPKl9yhG0Sn9WqIl5QnDZ6Ufp83TacxZGYzZcsW78JLTv9WVPbTwJWIIr2rzUoEJo9g8KSvw1fvSdwv6LnIA3eXe5eqNI7Q6qCR8mAF5VO+GTaaD10HM3VQixlBsxCF8w8rmZBUsW1QhfVgfz8Mit605IxXcY1C14p6kl2cDVhN7xKG7QdN5FnEGyXvMR1OwwwY/Wd5etiEfZ/aXmjHLGSQKZ+xz1lk1OCJ2g75112x7+4Ld3wZPGcSucyiMB+08GoAA0qAUPxtUN6nTSUJEr5tUOSau6qDR1+aW2qPUr0ZyyGUgtq6H4bUA5TisQ0zkd1uRWHYdtK7BIGg3VihwSGDOo1JevYABUVREkca/BalikZATtAv45U3QvsAFNUHI8xkcF7GGaChX06P18oAifuVSejT6pwh3ceX7d0dNjqUeFV2Vy4sl02R2X522JUSpupqpqr4xjKi4rMqc94oQepVtXC+3ePKxVJ6s6wzHa8hjiI/BcyV4lSl9/K197zRgMpOM9g556moKLicyxaLipKz0qxAUqReEJQlRfNMEwRPzPFGiOJ1yKJu+EUo8+Q25sK3UL0HLB9JKg/iakDNAyqdmL3DP4dYJr29TlfaRx5dN3GsVHZjycIF5LREamOXNUToBFso1Qu7Eqr1t5a0Pgj2Vhdw8K/K0/eaLw71B2/OT5TqnzhuGPHdlzWhSj0tTlGOFxmsAftgPMQprDaoMLkifFK9aj8ZC4rbs8XusJFgx5/Th0Qiem64P12KhSQQUn9JSpy1NWZ8VLj7fHb5U34R9pvc0kCv/2YqoHUxZgb4ZFzruarzDaHc5XvnAFoTs2Wuj40/gA0kTUs/E5vvL6MkYrmFr75lu+1/0/+y4HV7AWyMIcVcVnOI8S8SjpzpK/MJ7G2kKUhwJqueHLyJ/z+IOCN3of7TZnFF2DcFzMdkOPbCAZ/t7WLXvQJp2UScakCye4t0ak6l7IqQLBrSz1dJ1RKZEUw6BipK5/UT7aEwV1bm/wmyCvTtt3ZlS6aUFRWdqA7Fpox0+rGB7RG2lJWCVCXOTkS0V/CDgCxt0jXakQGLKeIJYN3cdm24NulE/3Xfn1LI5Msig1EV8Nz0Wtgl47o8gZlFCb621FeTu0fYa9zwaBnzGCtkzXRNxMTm+mOAiHAgqJjTKh8OtLaWsgMnyg+L9oq0lAhiMQ4LmuSkma9V4XpdGCBlqR7GZfJieb3gir5E0uo2lA02ZsK+cvLmDkIFCTEZMoURmoik4yV+s3l6naVutcTuU8OnPmvqC6VJUUzVzOBKNVaq9cS0ngt/Uzy1GgdTKi2lx6KxJLufaNnwdx2KRb6IA4/UwbjPd46XGhs68DfV9RpFlk43nq85VfYUlRaevpQlRmcxcvFAauKslJBHEIVdQd7KejvbFYvcTvN2gB2sXdGdY9O1m0iiRuNdYagFkIBKxgyAjzCOIsYzJzHA2Yj7jdrIXsT/gvvhQXwujZ86WLwWrIKFf6GS+ZMl6LqQuti7rgvFXhX1wiUwZTBT2LxY/3jWrWrqOKDjCICv/1YLI606JRCV03XRBaKmERgIiYRVRHZovVEYJqpQf+tZ2zIwgvHLoAHDi2Rf5IXYO9ogokfwzQY9pTkfAaD45IbknPO6vgYfCr4HDQaL2iJb8/cwPT5c7MtEGntGRcccufNxJDFzsaCZ9goxK7oOT9V5irOLzC/lW89tuFXSJQmLemkJioSWlgo6hwJ7JCXpK2lpTBNs0Jph/cfWAAvDX2I1BoirzRMk6mloQnsfMjtcE3dy/Dpmj5Ul0ddgjrOKOklKnUnlj3mLSSwnlolg5eYWPxwVepWcf7Ad2oVg/Obs9Iiy69dbE6FtGtzFq3QRisQzhgUV703xuFnA3Pg8TfmwDDqyYYhAFVkVHktRmovU3CNT/Ky4BGm84UPKxXYMZXlTuLAXuF4l4W9I+R2lDRViyFji7dWpW4V5xdYqQ2HHl0fM6TsVmQhH7CSsnosrNRoUqezWq3ufZPDXc9dLI+O1pKqzFDiKpWZawlsf7TqPDMgoWXuPviLuoNK1XYlqm0dY7Y12Y2y8qrNEvImMuOCZSwpOy7/x+cmNf2riio+KGDlNg7+ZF2CCdGuCYRUoYm8hTMWlvDuySz8oL8OHnm5DsezXDpENc0AQ7JKU6nO7phX3vjnb8Bfz36dTZPDIEa16u34iaUrWcGJArFVZYfAUtqTeTOd68u6TtRlOwozlZ7/r0saraGxgw2pP6ShiirOcbDxdjj6yI3tyJx2Iq+wtPQlAu95g8Odv66Th04YOoCa5uDlHEj6eqUufRpmj8Ati/8NLjZPghwd05J3zNIdAXHWTjl1picFPZew1s01cVnOeKUiqjoKM5UomT+AnY3I8r1X/aI/CVVUcR5gXAITBrden0Dm3Cmp6BWS+P/8JgAP/76GNklvG0RgtCyjBNbkvXQmwG3L34bIRSc0YRVxs8rwJYjIlshZm221mUjqJvcL7BUcMlPpH8k6Fn0vf3I0SimsHYWNcgziYgzaruypkreKcw8UThyqrQ1lhoczXq2zIgITBjf/bfu7QyLR9q81sOfNktHqkizLoTqD3bRkFD770RNAmUvKfzymJwUn4qLPWCKJmfYp69hpV5UmYS7skBFbhUbtvcs0ZnQURm+9/IVIC6Ni7WMSRkZk61WP9p9X2UZnEvtupfmrAnHsn1so95qCNPAxbVr4reLgnP23LsufALzMvgPfWLkde+gwqlmbFtyjO+eBW1dFJRfdqNWl6u/elRecQS/yzNpAAr2Pa3TT0I8vzxOFbTvtMsFpip+03W4Y26X64On5d/c2ufuWOZ+DV+9Y0cwF+BbYLzzuwO3Lu1CTXCOk1bbwnmfdd/LAN5bFmeQb6ZoXfGv3Wmf9H29fMaDa8VyrA7rvNUbhJPAyNWKNtV5xb3+6bCy0F5e0PNqxOjmjdc+bZkqX4QE3zdD7W66+1GIPf+Y9+HzDMMyssU+n5DTzRlU5CcRgm6apCK2a74Hp+neOJ2nHNCMQXvT3e9q85B346vLG/V9etp0xI4n7ZJghm6rkPX1QLxEPbucG22jH2x3EZYQz1v3qbVc3e/d99bYVzWqeXXrhmMzoj973wO3L2gvbRgWrnqK4GOedr9y+PJc2h+vQcVlfuP+FdcE+dR1chmwnSLO6jtuXx/zaLfoxtE4y3/V+5/M0GFLH+nwKj6PZNfU2np8YIblaT9d84LZl8bxr8rlW576791IXV0jTd9RyY7RPxQQmHN6ZTA7u2tx0ZPeWhsFdW9iR3Vs5Tew0Mo3P2vnFY7Ne/Fq2p/s6Cy69QF2tc3E6X0iIPHEvneBl9zfktiKbqcduWnh/b/TSv8tN1zLw9eWNr/6vZdstTkHhMoq99uaTF4iGy5L91UT904hao4aydMJIik3MnF6P0iNMAfaCy1avhKEXDj2HSkpZTHTMv6t3Fn2kHf9LSfK0T6nzmMC2kYQttZ0kqPOiM9NoUNcR4PXUvp90n0xQ+/Pv3s3ow+zMNrwfrfQdt0VhgijqsHwQYIGE/Xv76b7juZpZYLQBqbR20V17ErSPCacIFQD+k3XNnM/sltRL2dM7OP5isGtL6lhlnQFsJxAzchRLIZxsBAqefBcXHQvu680b56qeCALdgqpNaqKncdH60X/oS0EVpxUDiUgIhyhRfJAZfFFdqVF/V/HMkwEzGMFHG8Y/084LRlhw1+4EqrSN+NyjQWaSxC52+0n1TMMXTDOpWIP/3FG1wxnIBjL4NoXkqNh+4PYVm7PD2dSie3Pn+kCApCn+BrvDaii1Gw4TWmiJnWHbokQq88rXl0eyw4pjGRqm4O9OTUgC++Htn23YyE2VDB1izJt/ZF+rHcoMbkEOOyNQSjtNQuUYZZDa32Sj2LvflzNS3XLrPdGDd69urzFqBnC/KO6I+8kOg01vWPRA+XpZVUwSnEm3JBs3YB9747D+SxbtK0EX1Jd+6isoidRKLzYu48Kw1vjtU5/ozzAwaOy411ZF20ldpzHkeNJsKgG9KpuBElqcDmscmFkzTUsjwHro96oPV9OzwCkT+EPXbtkEOPimyhoqJ1hKt6KzneXHAAqLYNnFsYi46BJiEtWhe3cnbnrtmgv/47pvNX/ic51d37nz1oHPX/yb7aAKtJMFGvdDgi+6b0+ifpx6WVVMIkjq6XFseDyScGY6Q5mwV1VWarGERr1TiUysLKSl5FrVBlYyL5kkP6qSEVKdSYUFrY2FTeZvYMqa2bDnq/6bybP8/rAMXv9ap8MquZejqrOsmkuZB3lU5wbncMoqNGH2dSrtKXrokVgYTctxZGYUb+5SNyRSJ/uTbYrZWYjs0ddmwQ//+KHQCJu2MVhT23LlX68OD7ER+WdBxuJLDsAV09/KZN8bS1rS2IwPLAVVnBWQ1ENVdRNJO1L50FjUge66fiOoajyFjp0Yc8v+ErlQVU5RSigZX1DNU5ZZlBad9lgubQSNVKlzLbh7VxceT2msUb/tjkUWB12bh4eHU8PD0DNzWiCKqmZYyCKPShI/7Ybg3Wj9VfHxaDNRRLCY9FXR0aAz79VbPcYwxjIL7xm/Ysz7QX1iZ/rAN1Z2oIwrPXUsFc+XMkokR8t2yBq2duCvjHoL0k8KgR18+AaVJ6p6lEPd14dBDEdRXYii2otuArkUP6Fn36qBb/Z9BA6dNNXUwhzdTBb6h8fMbM/y2WPsayvf6b8Y8OEA669v+9eqpJ0CQGNR4sAdy2l2x40cWDcP5rbNrAvsAE0WjQBrhTG5nQirrdEu0iwg19KLW/ZkgZG1MBakOPxw4Sa0vCoLMr6/3TXYg9RMz9uc9H7hwVF0LwZblKqtyg6DEz6/Y9HdJcfMYbRwd7vfpMolPm3eDdVh3bGiEbXLZr/t1CEeuGMFaqjQzqjmmAExZ5vFBanhk0tgLz7cqgqWJaHgxpbDy/jpfhCqmIJYcFdvHF+2lBA0tSi6cHBMzIMiuTDRm6cS2wStJ7cOSrQorZMg+nlgRrI+4TP0YaILVefQu8PDWoqjxB9ILF8rRhm91GnvrmgYSw0kog3W6IlmJGWErkM1wXhy4d35RjVqx7kOXRJKBRqhv7bY+DYMw+mgDHYUXZsUvgIE3Uabsc0dokRhBsGghwlIF24XXKQ4TUeES3elOdoqR4NqSlPnHnihDICJVUlr1Iqq38FEhu7lIvte/jsfmAD77UjohwAAAABJRU5ErkJggg==';
2528
2528
  ColumnAligment = {
2529
- vertical: "middle",
2530
- horizontal: "center",
2529
+ vertical: 'middle',
2530
+ horizontal: 'center',
2531
2531
  wrapText: true,
2532
2532
  };
2533
- async ExportToExcel(excelName, reportTitle, filterTitle, rowsSerializate, columns, filters, subtitles = [], showTotalRow = false) {
2533
+ async ExportToExcel(excelName, reportTitle, filterTitle, rowsSerializate, columns, filters, subtitles = [], showTotalRow = false, headerGroups = []) {
2534
2534
  const workbook = new Workbook();
2535
2535
  const worksheet = workbook.addWorksheet(reportTitle);
2536
2536
  worksheet.views = [{ showGridLines: false }];
2537
2537
  const imageId = workbook.addImage({
2538
2538
  base64: this.Logo,
2539
- extension: "png",
2539
+ extension: 'png',
2540
2540
  });
2541
- this.SetReportPage(rowsSerializate, worksheet, columns, imageId, subtitles, showTotalRow);
2541
+ this.SetReportPage(rowsSerializate, worksheet, columns, imageId, subtitles, showTotalRow, headerGroups);
2542
2542
  this.SetTitle(worksheet, reportTitle);
2543
2543
  if (filters.length > 0) {
2544
2544
  const worksheetFilter = workbook.addWorksheet(filterTitle);
@@ -2549,123 +2549,187 @@ class HtmlToExcelService {
2549
2549
  saveAs(new Blob([buffer]), excelName);
2550
2550
  }
2551
2551
  SetTitle(worksheet, reportTitle) {
2552
- worksheet.mergeCells("D1:I5");
2553
- const titleCell = worksheet.getCell("D1");
2552
+ worksheet.mergeCells('D1:I5');
2553
+ const titleCell = worksheet.getCell('D1');
2554
2554
  titleCell.value = reportTitle;
2555
2555
  titleCell.font = {
2556
- name: "Arial",
2556
+ name: 'Arial',
2557
2557
  bold: true,
2558
2558
  size: 20,
2559
- color: { argb: "203764" },
2559
+ color: { argb: '203764' },
2560
2560
  };
2561
- titleCell.alignment = { vertical: "middle", horizontal: "center" };
2561
+ titleCell.alignment = this.ColumnAligment;
2562
2562
  }
2563
- SetReportPage(rowsSerializate, worksheet, columns, imageId, subtitles = [], showTotalRow = false) {
2563
+ SetReportPage(rowsSerializate, worksheet, columns, imageId, subtitles = [], showTotalRow = false, headerGroups = []) {
2564
2564
  let columnsCell = [];
2565
2565
  let cells = [];
2566
2566
  let rows = JSON.parse(rowsSerializate);
2567
- //Inserción de filas para imagen
2568
2567
  const imageRows = 5;
2569
2568
  const numberRows = rows.length;
2570
2569
  for (let i = 0; i < subtitles.length + imageRows; i++) {
2571
- worksheet.addRow([""]);
2570
+ worksheet.addRow(['']);
2572
2571
  }
2573
- //Inserción de nombre de columnas
2574
- let columnsNames = [];
2575
2572
  let startRow = imageRows + 1 + subtitles.length;
2573
+ const groupedIndices = new Set();
2574
+ if (headerGroups.length > 0) {
2575
+ for (const group of headerGroups) {
2576
+ const startChar = this.getExcelColumnLetter(group.startColumn);
2577
+ const endChar = this.getExcelColumnLetter(group.endColumn);
2578
+ const range = `${startChar}${startRow}:${endChar}${startRow}`;
2579
+ worksheet.mergeCells(range);
2580
+ const cellGroup = `${startChar}${startRow}`;
2581
+ const cell = worksheet.getCell(cellGroup);
2582
+ cell.value = group.name;
2583
+ cell.font = {
2584
+ name: 'Arial',
2585
+ bold: true,
2586
+ size: 10,
2587
+ color: { argb: 'FFFFFF' },
2588
+ };
2589
+ cell.fill = {
2590
+ type: 'pattern',
2591
+ pattern: 'solid',
2592
+ fgColor: { argb: '17375e' },
2593
+ };
2594
+ cell.alignment = {
2595
+ vertical: 'middle',
2596
+ horizontal: 'center',
2597
+ wrapText: true,
2598
+ };
2599
+ for (let i = group.startColumn; i <= group.endColumn; i++) {
2600
+ groupedIndices.add(i);
2601
+ }
2602
+ }
2603
+ }
2576
2604
  for (let i = 0; i < columns.length; i++) {
2577
- let cell = `${String.fromCharCode(65 + i)}${startRow}`;
2578
- columnsNames.push(columns[i].displayColumnName);
2579
- columnsCell.push(cell);
2605
+ const colLetter = this.getExcelColumnLetter(i);
2606
+ const topCell = `${colLetter}${startRow}`;
2607
+ const bottomCell = `${colLetter}${startRow + 1}`;
2608
+ if (groupedIndices.has(i)) {
2609
+ columnsCell.push(bottomCell);
2610
+ worksheet.getCell(bottomCell).value = columns[i].displayColumnName;
2611
+ worksheet.getCell(bottomCell).alignment = {
2612
+ vertical: 'middle',
2613
+ horizontal: 'center',
2614
+ wrapText: true,
2615
+ };
2616
+ }
2617
+ else {
2618
+ worksheet.mergeCells(`${topCell}:${bottomCell}`);
2619
+ const cell = worksheet.getCell(topCell);
2620
+ cell.value = columns[i].displayColumnName;
2621
+ cell.font = {
2622
+ name: 'Arial',
2623
+ bold: true,
2624
+ size: 10,
2625
+ color: { argb: 'FFFFFF' },
2626
+ };
2627
+ cell.alignment = this.ColumnAligment;
2628
+ cell.fill = {
2629
+ type: 'pattern',
2630
+ pattern: 'solid',
2631
+ fgColor: { argb: '17375e' },
2632
+ };
2633
+ }
2580
2634
  }
2581
- worksheet.addRow(columnsNames);
2582
- //Inserción y formato de sumatorias
2635
+ startRow += 2;
2583
2636
  if (showTotalRow) {
2584
- const sums = columns.map(col => {
2637
+ const sums = columns.map((col) => {
2638
+ if (col.columnName === '')
2639
+ return 'Total';
2585
2640
  if (!col.totalRowValue)
2586
2641
  return null;
2587
- return rows.reduce((acc, row) => {
2588
- const value = parseFloat(row[col.columnName]) || 0;
2589
- return acc + value;
2590
- }, 0);
2642
+ return col.totalRowValue
2643
+ ? { formula: `"${col.totalRowValue}"`, result: col.totalRowValue }
2644
+ : null;
2591
2645
  });
2592
- const sumRow = columns.map((col, index) => {
2593
- if (col.columnName === "")
2594
- return "Total";
2595
- if (!col.totalRowValue)
2596
- return "";
2597
- return (sums[index]?.toLocaleString(undefined, {
2598
- minimumFractionDigits: 2,
2599
- maximumFractionDigits: 2,
2600
- }) || "0.00");
2646
+ const insertedRow = worksheet.insertRow(startRow, sums);
2647
+ insertedRow.eachCell((cell, colNumber) => {
2648
+ const column = columns[colNumber - 1];
2649
+ cell.font = {
2650
+ name: 'Arial',
2651
+ bold: true,
2652
+ size: 10,
2653
+ color: { argb: 'FF7F00' },
2654
+ };
2655
+ cell.alignment = {
2656
+ vertical: 'middle',
2657
+ horizontal: column?.alignHorizontal ?? 'left',
2658
+ };
2659
+ cell.border = { bottom: { style: 'thin', color: { argb: 'FF7F00' } } };
2660
+ if (typeof cell.value === 'number') {
2661
+ cell.numFmt = '0.00';
2662
+ }
2601
2663
  });
2602
- startRow = startRow + 1;
2603
- worksheet.insertRow(startRow, sumRow);
2604
2664
  columns.forEach((col, index) => {
2605
- const cellAddress = `${String.fromCharCode(65 + index)}${startRow}`;
2665
+ const cellAddress = `${this.getExcelColumnLetter(index)}${startRow}`;
2606
2666
  const cell = worksheet.getCell(cellAddress);
2607
2667
  cell.font = {
2608
- name: "Arial",
2668
+ name: 'Arial',
2609
2669
  bold: true,
2610
2670
  size: 10,
2611
- color: { argb: "FF7F00" },
2671
+ color: { argb: 'FF7F00' },
2612
2672
  };
2613
2673
  cell.alignment = {
2614
- vertical: "middle",
2615
- horizontal: col.isNumber ? "right" : "left",
2674
+ vertical: 'middle',
2675
+ horizontal: col.alignHorizontal ?? 'left',
2616
2676
  };
2617
- cell.border = { bottom: { style: "thin", color: { argb: "FF7F00" } } };
2677
+ cell.border = { bottom: { style: 'thin', color: { argb: 'FF7F00' } } };
2618
2678
  });
2679
+ startRow++;
2619
2680
  }
2620
2681
  //Inserción de filas
2621
2682
  for (let rowIndex = 0; rowIndex < numberRows; rowIndex++) {
2622
- let rowCells = [];
2623
- let rowValues = [];
2624
- let index = rowIndex + startRow + 1;
2625
- for (let columIndex = 0; columIndex < columns.length; columIndex++) {
2626
- let cell = `${String.fromCharCode(65 + columIndex)}${index}`;
2627
- rowCells.push(cell);
2628
- if (columIndex == 0) {
2629
- rowValues.push(`${rowIndex + 1}`);
2630
- continue;
2631
- }
2632
- rowValues.push(rows[rowIndex][columns[columIndex].columnName]);
2683
+ const rowValues = [];
2684
+ for (let colIndex = 0; colIndex < columns.length; colIndex++) {
2685
+ rowValues.push(colIndex === 0
2686
+ ? `${rowIndex + 1}`
2687
+ : rows[rowIndex][columns[colIndex].columnName]);
2633
2688
  }
2634
- worksheet.addRow(rowValues);
2635
- cells.push({ index: index, cells: rowCells });
2689
+ const insertedRow = worksheet.addRow(rowValues);
2690
+ insertedRow.eachCell((cell, colNumber) => {
2691
+ const col = columns[colNumber - 1];
2692
+ cell.alignment = {
2693
+ vertical: 'middle',
2694
+ horizontal: col.alignHorizontal ?? 'left',
2695
+ wrapText: true,
2696
+ };
2697
+ });
2636
2698
  }
2637
2699
  //Formato nombre de columnas
2638
- columnsCell.map(key => {
2639
- worksheet.getCell(key).fill = {
2640
- type: "pattern",
2641
- pattern: "solid",
2642
- fgColor: { argb: "17375e" },
2643
- bgColor: { argb: "17375e" },
2700
+ columnsCell.forEach((cellRef) => {
2701
+ const cell = worksheet.getCell(cellRef);
2702
+ cell.fill = {
2703
+ type: 'pattern',
2704
+ pattern: 'solid',
2705
+ fgColor: { argb: '17375e' },
2644
2706
  };
2645
- worksheet.getCell(key).font = {
2646
- name: "Arial",
2707
+ cell.font = {
2708
+ name: 'Arial',
2647
2709
  bold: true,
2648
2710
  size: 10,
2649
- color: { argb: "FFFFFF" },
2711
+ color: { argb: 'FFFFFF' },
2650
2712
  };
2651
- worksheet.getCell(key).alignment = this.ColumnAligment;
2713
+ cell.alignment = this.ColumnAligment;
2652
2714
  });
2653
2715
  //Formato de filas
2654
- cells.forEach(element => {
2655
- element.cells.map(key => {
2656
- if (element.index % 2 !== 1) {
2657
- worksheet.getCell(key).fill = {
2658
- type: "pattern",
2659
- pattern: "solid",
2660
- fgColor: { argb: "D9D9D9" },
2661
- bgColor: { argb: "D9D9D9" },
2716
+ const firstDataRow = startRow;
2717
+ worksheet.eachRow((row, rowIndex) => {
2718
+ if (rowIndex < firstDataRow)
2719
+ return;
2720
+ const isEven = (rowIndex - firstDataRow) % 2 === 0;
2721
+ row.eachCell((cell) => {
2722
+ if (isEven) {
2723
+ cell.fill = {
2724
+ type: 'pattern',
2725
+ pattern: 'solid',
2726
+ fgColor: { argb: 'D9D9D9' },
2662
2727
  };
2663
2728
  }
2664
- worksheet.getCell(key).font = {
2665
- name: "Arial",
2666
- bold: false,
2729
+ cell.font = {
2730
+ name: 'Arial',
2667
2731
  size: 10,
2668
- color: { argb: "203764" },
2732
+ color: { argb: '203764' },
2669
2733
  };
2670
2734
  });
2671
2735
  });
@@ -2673,64 +2737,67 @@ class HtmlToExcelService {
2673
2737
  worksheet.addImage(imageId, {
2674
2738
  tl: { col: 0.5, row: 1.5 },
2675
2739
  ext: { width: 218, height: 58 },
2676
- editAs: "absolute",
2740
+ editAs: 'absolute',
2677
2741
  });
2678
- this.AdjustColumnWidth(worksheet, columns);
2679
2742
  //Subtitulos: Se inserta al final para evitar altere el autoajuste de las columnas
2680
2743
  for (let i = 0; i < subtitles.length; i++) {
2681
- const range = `${String.fromCharCode(65)}${6 + i}:${String.fromCharCode(79)}${6 + i}`;
2744
+ const range = `A${6 + i}:${this.getExcelColumnLetter(columns.length - 1)}${6 + i}`;
2682
2745
  worksheet.mergeCells(range);
2683
- const cell = worksheet.getCell(`${String.fromCharCode(65)}${6 + i}`);
2684
- const subtitle = subtitles[i];
2685
- cell.value = subtitle;
2746
+ const cell = worksheet.getCell(`A${6 + i}`);
2747
+ cell.value = subtitles[i];
2686
2748
  cell.font = {
2687
- name: "Arial",
2749
+ name: 'Arial',
2688
2750
  bold: true,
2689
2751
  italic: true,
2690
2752
  size: 10,
2691
- color: { argb: "203764" },
2753
+ color: { argb: '203764' },
2754
+ };
2755
+ cell.alignment = {
2756
+ vertical: 'middle',
2757
+ horizontal: 'left',
2758
+ wrapText: true,
2692
2759
  };
2693
- cell.alignment = { vertical: "middle", horizontal: "left", wrapText: true };
2694
2760
  }
2761
+ this.AdjustColumnWidth(worksheet, columns);
2695
2762
  }
2696
2763
  SetFilterPage(filterTitle, worksheetFilter, filters) {
2697
2764
  let widtFilter = 30;
2698
2765
  worksheetFilter.addRow([filterTitle]);
2699
- worksheetFilter.mergeCells(["A1", "B2"]);
2700
- worksheetFilter.columns.forEach(column => {
2766
+ worksheetFilter.mergeCells(['A1', 'B2']);
2767
+ worksheetFilter.columns.forEach((column) => {
2701
2768
  column.width = widtFilter;
2702
2769
  column.alignment = this.ColumnAligment;
2703
2770
  widtFilter *= 3;
2704
2771
  });
2705
- ["A1", "B1"].map(key => {
2772
+ ['A1', 'B1'].map((key) => {
2706
2773
  worksheetFilter.getCell(key).fill = {
2707
- type: "pattern",
2708
- pattern: "solid",
2709
- fgColor: { argb: "FF7F00" },
2710
- bgColor: { argb: "FF7F00" },
2774
+ type: 'pattern',
2775
+ pattern: 'solid',
2776
+ fgColor: { argb: 'FF7F00' },
2777
+ bgColor: { argb: 'FF7F00' },
2711
2778
  };
2712
2779
  worksheetFilter.getCell(key).font = {
2713
- name: "Arial",
2780
+ name: 'Arial',
2714
2781
  bold: true,
2715
2782
  size: 12,
2716
- color: { argb: "FFFFFF" },
2783
+ color: { argb: 'FFFFFF' },
2717
2784
  };
2718
2785
  });
2719
2786
  filters.forEach((element, index) => {
2720
2787
  let row = worksheetFilter.addRow([element.key, element.value]);
2721
- let color = index % 2 === 1 ? "D9D9D9" : "FFFFFF";
2722
- row.eachCell(cell => {
2788
+ let color = index % 2 === 1 ? 'D9D9D9' : 'FFFFFF';
2789
+ row.eachCell((cell) => {
2723
2790
  cell.fill = {
2724
- type: "pattern",
2725
- pattern: "solid",
2791
+ type: 'pattern',
2792
+ pattern: 'solid',
2726
2793
  fgColor: { argb: color },
2727
2794
  bgColor: { argb: color },
2728
2795
  };
2729
2796
  cell.font = {
2730
- name: "Arial",
2797
+ name: 'Arial',
2731
2798
  bold: false,
2732
2799
  size: 10,
2733
- color: { argb: "203764" },
2800
+ color: { argb: '203764' },
2734
2801
  };
2735
2802
  });
2736
2803
  });
@@ -2741,9 +2808,11 @@ class HtmlToExcelService {
2741
2808
  return;
2742
2809
  if (columns[index] == undefined)
2743
2810
  return;
2744
- let columnWidth = columns[index].width ?? Math.max(...column.values.map(v => (v ? v.toString().length : 0)).filter(v => typeof v === "number"), columns[index].displayColumnName.length) * 1.2;
2811
+ let columnWidth = columns[index].width ??
2812
+ Math.max(...column.values
2813
+ .map((v) => (v ? v.toString().length : 0))
2814
+ .filter((v) => typeof v === 'number'), columns[index].displayColumnName.length) * 1.2;
2745
2815
  column.width = Math.min(Math.max(columnWidth, 5), 100);
2746
- column.alignment = columns[index].isNumber ? { vertical: "middle", horizontal: "right", wrapText: true } : { vertical: "middle", horizontal: "left", wrapText: true };
2747
2816
  });
2748
2817
  worksheet.eachRow((row, rowIndex) => {
2749
2818
  if (rowIndex === 1)
@@ -2751,7 +2820,7 @@ class HtmlToExcelService {
2751
2820
  let maxLines = 1;
2752
2821
  row.eachCell((cell, colNumber) => {
2753
2822
  if (cell.value) {
2754
- let text = typeof cell.value === "object" ? cell.text : cell.value.toString();
2823
+ let text = typeof cell.value === 'object' ? cell.text : cell.value.toString();
2755
2824
  let columnWidth = worksheet.getColumn(colNumber).width ?? 10;
2756
2825
  let charsPerLine = columnWidth * 1.2;
2757
2826
  let estimatedLines = Math.ceil(text.length / charsPerLine);
@@ -2761,27 +2830,29 @@ class HtmlToExcelService {
2761
2830
  row.height = Math.min(Math.max(15 * maxLines, 15), 30);
2762
2831
  });
2763
2832
  }
2764
- async ExportToExcelRawData({ excelName, reportTitle, filterTitle, rowsSerializate, columns, filters, orderColumn = false }) {
2833
+ async ExportToExcelRawData({ excelName, reportTitle, filterTitle, rowsSerializate, columns, filters, orderColumn = false, }) {
2765
2834
  const workbook = new Workbook();
2766
2835
  const worksheet = workbook.addWorksheet(reportTitle);
2767
2836
  const rows = JSON.parse(rowsSerializate);
2768
2837
  worksheet.views = [{ showGridLines: false }];
2769
- const allColumns = orderColumn ? [{ displayColumnName: "N°" }, ...columns] : columns;
2838
+ const allColumns = orderColumn
2839
+ ? [{ displayColumnName: 'N°' }, ...columns]
2840
+ : columns;
2770
2841
  allColumns.forEach((col, index) => {
2771
2842
  const columnLetter = this.getExcelColumnLetter(index);
2772
2843
  const headerCell = worksheet.getCell(`${columnLetter}1`);
2773
2844
  headerCell.value = col.displayColumnName;
2774
- headerCell.alignment = { horizontal: "center", vertical: "middle" };
2775
- headerCell.font = { name: "Arial", bold: true, size: 10 };
2845
+ headerCell.alignment = { horizontal: 'center', vertical: 'middle' };
2846
+ headerCell.font = { name: 'Arial', bold: true, size: 10 };
2776
2847
  });
2777
- const maxLengths = allColumns.map(col => col.displayColumnName.length);
2848
+ const maxLengths = allColumns.map((col) => col.displayColumnName.length);
2778
2849
  rows.forEach((rowData, rowIndex) => {
2779
2850
  const rowValues = allColumns.map((col, colIndex) => {
2780
2851
  if (orderColumn && colIndex === 0) {
2781
2852
  return (rowIndex + 1).toString();
2782
2853
  }
2783
2854
  const originalColIndex = orderColumn ? colIndex - 1 : colIndex;
2784
- return rowData[columns[originalColIndex].columnName]?.toString() || "";
2855
+ return rowData[columns[originalColIndex].columnName]?.toString() || '';
2785
2856
  });
2786
2857
  rowValues.forEach((value, i) => {
2787
2858
  const length = value.length;
@@ -2803,7 +2874,7 @@ class HtmlToExcelService {
2803
2874
  saveAs(new Blob([buffer]), excelName);
2804
2875
  }
2805
2876
  getExcelColumnLetter(columnNumber) {
2806
- let letter = "";
2877
+ let letter = '';
2807
2878
  while (columnNumber >= 0) {
2808
2879
  letter = String.fromCharCode(65 + (columnNumber % 26)) + letter;
2809
2880
  columnNumber = Math.floor(columnNumber / 26) - 1;
@@ -2811,12 +2882,12 @@ class HtmlToExcelService {
2811
2882
  return letter;
2812
2883
  }
2813
2884
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.1", ngImport: i0, type: HtmlToExcelService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
2814
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.1", ngImport: i0, type: HtmlToExcelService, providedIn: "root" });
2885
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.1", ngImport: i0, type: HtmlToExcelService, providedIn: 'root' });
2815
2886
  }
2816
2887
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.1", ngImport: i0, type: HtmlToExcelService, decorators: [{
2817
2888
  type: Injectable,
2818
2889
  args: [{
2819
- providedIn: "root",
2890
+ providedIn: 'root',
2820
2891
  }]
2821
2892
  }] });
2822
2893