UNPKG

@koalarx/ui

Version:

Koala UI is a Design System developed in Angular whose objective is to facilitate and make your development faster and simpler, making this framework your greatest ally.

127 lines 20.7 kB
import * as Excel from "exceljs/dist/exceljs.min.js"; import * as fs from 'file-saver'; import { Injectable } from "@angular/core"; import { koala } from "@koalarx/utils"; import * as i0 from "@angular/core"; export class KoalaXlsxService { async convertJsonToXlsx(json, config) { const title = config.title; const header = []; Object.keys(json[0]).forEach(name => { header.push((config.normalizeHeader === true || config.normalizeHeader === null || config.normalizeHeader === undefined ? koala(name).string().normalize().getValue().toUpperCase() : name)); }); const workbook = new Excel.Workbook(); const worksheet = workbook.addWorksheet(config.sheetName); if (config.password) { await worksheet.protect(config.password, { selectLockedCells: false, selectUnlockedCells: false, scenarios: false }); } if (config.title) { const titleRow = worksheet.addRow([title]); titleRow.alignment = { horizontal: 'center' }; if (config.titleFontColor) { titleRow.font = { bold: true, color: { argb: config.titleFontColor.replace('#', '') } }; } if (config.titleBackgroundColor) { titleRow.fill = { type: 'pattern', pattern: 'solid', fgColor: { argb: config.titleBackgroundColor.replace('#', '') }, bgColor: { argb: config.titleBackgroundColor.replace('#', '') } }; } worksheet.mergeCells(`A1:${worksheet.getCell(1, Object.keys(json[0]).length).address}`); } const headerRow = worksheet.addRow(header); headerRow.eachCell((cell, number) => { if (config.headerBackgroundColor) { cell.fill = { type: 'pattern', pattern: 'solid', fgColor: { argb: config.headerBackgroundColor.replace('#', '') }, bgColor: { argb: config.headerBackgroundColor.replace('#', '') } }; } if (config.headerFontColor) { cell.font = { color: { argb: config.headerFontColor.replace('#', '') } }; } }); json.forEach(item => { const data = []; Object.values(item).forEach(value => data.push(value)); worksheet.addRow(data); }); workbook.xlsx.writeBuffer().then((data) => { const blob = new Blob([data], { type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' }); fs.saveAs(blob, config.filename + '.xlsx'); }); } async convertJsonToXlsxWithTabs(tabs, config) { const header = []; const workbook = new Excel.Workbook(); tabs.forEach(tab => { const title = tab?.titleName ?? config.title; Object.keys(tab.json[0]).forEach(name => { header.push((config.normalizeHeader === true || config.normalizeHeader === null || config.normalizeHeader === undefined ? koala(name).string().normalize().getValue().toUpperCase() : name)); }); const worksheet = workbook.addWorksheet(tab?.sheetName ?? config.sheetName); if (config.title) { const titleRow = worksheet.addRow([title]); titleRow.alignment = { horizontal: 'center' }; if (config.titleFontColor) { titleRow.font = { bold: true, color: { argb: config.titleFontColor.replace('#', '') } }; } if (config.titleBackgroundColor) { titleRow.fill = { type: 'pattern', pattern: 'solid', fgColor: { argb: config.titleBackgroundColor.replace('#', '') }, bgColor: { argb: config.titleBackgroundColor.replace('#', '') } }; } worksheet.mergeCells(`A1:${worksheet.getCell(1, Object.keys(tab.json[0]).length).address}`); } const headerRow = worksheet.addRow(header); headerRow.eachCell((cell, number) => { if (config.headerBackgroundColor) { cell.fill = { type: 'pattern', pattern: 'solid', fgColor: { argb: config.headerBackgroundColor.replace('#', '') }, bgColor: { argb: config.headerBackgroundColor.replace('#', '') } }; } if (config.headerFontColor) { cell.font = { color: { argb: config.headerFontColor.replace('#', '') } }; } }); tab.json.forEach(item => { const data = []; Object.values(item).forEach(value => data.push(value)); worksheet.addRow(data); }); }); workbook.xlsx.writeBuffer().then((data) => { const blob = new Blob([data], { type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' }); fs.saveAs(blob, config.filename + '.xlsx'); }); } } KoalaXlsxService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: KoalaXlsxService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); KoalaXlsxService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: KoalaXlsxService, providedIn: "any" }); i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: KoalaXlsxService, decorators: [{ type: Injectable, args: [{ providedIn: "any" }] }] }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia29hbGEueGxzeC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29tbW9uL3NyYy9saWIvc2VydmljZXMveGxzeC9rb2FsYS54bHN4LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLEtBQUssTUFBTSw2QkFBNkIsQ0FBQztBQUVyRCxPQUFPLEtBQUssRUFBRSxNQUFNLFlBQVksQ0FBQztBQUVqQyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTNDLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7QUFHdkMsTUFBTSxPQUFPLGdCQUFnQjtJQUVwQixLQUFLLENBQUMsaUJBQWlCLENBQUMsSUFBVyxFQUFFLE1BQWdDO1FBQzFFLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUM7UUFDM0IsTUFBTSxNQUFNLEdBQUcsRUFBRSxDQUFDO1FBRWxCLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQ2xDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FDVixNQUFNLENBQUMsZUFBZSxLQUFLLElBQUksSUFBSSxNQUFNLENBQUMsZUFBZSxLQUFLLElBQUksSUFBSSxNQUFNLENBQUMsZUFBZSxLQUFLLFNBQVMsQ0FBQyxDQUFDO2dCQUM1RyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsU0FBUyxFQUFFLENBQUMsUUFBUSxFQUFFLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztnQkFDM0QsSUFBSSxDQUNMLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO1FBRUgsTUFBTSxRQUFRLEdBQXlCLElBQUksS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQzVELE1BQU0sU0FBUyxHQUFHLFFBQVEs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QUN4QyxNQUFNLElBQUksR0FBRyxJQUFJLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUMsSUFBSSxFQUFFLG1FQUFtRSxFQUFDLENBQUMsQ0FBQztZQUMzRyxFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsUUFBUSxHQUFHLE9BQU8sQ0FBQyxDQUFDO1FBQzdDLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQzs7NkdBdklVLGdCQUFnQjtpSEFBaEIsZ0JBQWdCLGNBREosS0FBSzsyRkFDakIsZ0JBQWdCO2tCQUQ1QixVQUFVO21CQUFDLEVBQUMsVUFBVSxFQUFFLEtBQUssRUFBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIEV4Y2VsIGZyb20gXCJleGNlbGpzL2Rpc3QvZXhjZWxqcy5taW4uanNcIjtcbmltcG9ydCAqIGFzIEV4Y2VsUHJvcGVyIGZyb20gXCJleGNlbGpzXCI7XG5pbXBvcnQgKiBhcyBmcyBmcm9tICdmaWxlLXNhdmVyJztcblxuaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQgeyBLb2FsYVhsc3hDb25maWdJbnRlcmZhY2UgfSBmcm9tIFwiLi9rb2FsYS54bHN4LWNvbmZpZy5pbnRlcmZhY2VcIjtcbmltcG9ydCB7IGtvYWxhIH0gZnJvbSBcIkBrb2FsYXJ4L3V0aWxzXCI7XG5cbkBJbmplY3RhYmxlKHtwcm92aWRlZEluOiBcImFueVwifSlcbmV4cG9ydCBjbGFzcyBLb2FsYVhsc3hTZXJ2aWNlIHtcblxuICBwdWJsaWMgYXN5bmMgY29udmVydEpzb25Ub1hsc3goanNvbjogYW55W10sIGNvbmZpZzogS29hbGFYbHN4Q29uZmlnSW50ZXJmYWNlKSB7XG4gICAgY29uc3QgdGl0bGUgPSBjb25maWcudGl0bGU7XG4gICAgY29uc3QgaGVhZGVyID0gW107XG5cbiAgICBPYmplY3Qua2V5cyhqc29uWzBdKS5mb3JFYWNoKG5hbWUgPT4ge1xuICAgICAgaGVhZGVyLnB1c2goKFxuICAgICAgICBjb25maWcubm9ybWFsaXplSGVhZGVyID09PSB0cnVlIHx8IGNvbmZpZy5ub3JtYWxpemVIZWFkZXIgPT09IG51bGwgfHwgY29uZmlnLm5vcm1hbGl6ZUhlYWRlciA9PT0gdW5kZWZpbmVkID9cbiAgICAgICAga29hbGEobmFtZSkuc3RyaW5nKCkubm9ybWFsaXplKCkuZ2V0VmFsdWUoKS50b1VwcGVyQ2FzZSgpIDpcbiAgICAgICAgbmFtZVxuICAgICAgKSk7XG4gICAgfSk7XG5cbiAgICBjb25zdCB3b3JrYm9vazogRXhjZWxQcm9wZXIuV29ya2Jvb2sgPSBuZXcgRXhjZWwuV29ya2Jvb2soKTtcbiAgICBjb25zdCB3b3Jrc2hlZXQgPSB3b3JrYm9vay5hZGRXb3Jrc2hlZXQoY29uZmlnLnNoZWV0TmFtZSk7XG4gICAgaWYgKGNvbmZpZy5wYXNzd29yZCkge1xuICAgICAgYXdhaXQgd29ya3NoZWV0LnByb3RlY3QoY29uZmlnLnBhc3N3b3JkLCB7XG4gICAgICAgIHNlbGVjdExvY2tlZENlbGxzOiBmYWxzZSxcbiAgICAgICAgc2VsZWN0VW5sb2NrZWRDZWxsczogZmFsc2UsXG4gICAgICAgIHNjZW5hcmlvczogZmFsc2VcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmIChjb25maWcudGl0bGUpIHtcbiAgICAgIGNvbnN0IHRpdGxlUm93ID0gd29ya3NoZWV0LmFkZFJvdyhbdGl0bGVdKTtcbiAgICAgIHRpdGxlUm93LmFsaWdubWVudCA9IHtob3Jpem9udGFsOiAnY2VudGVyJ307XG4gICAgICBpZiAoY29uZmlnLnRpdGxlRm9udENvbG9yKSB7XG4gICAgICAgIHRpdGxlUm93LmZvbnQgPSB7Ym9sZDogdHJ1ZSwgY29sb3I6IHthcmdiOiBjb25maWcudGl0bGVGb250Q29sb3IucmVwbGFjZSgnIycsICcnKX19O1xuICAgICAgfVxuICAgICAgaWYgKGNvbmZpZy50aXRsZUJhY2tncm91bmRDb2xvcikge1xuICAgICAgICB0aXRsZVJvdy5maWxsID0ge1xuICAgICAgICAgIHR5cGU6ICdwYXR0ZXJuJyxcbiAgICAgICAgICBwYXR0ZXJuOiAnc29saWQnLFxuICAgICAgICAgIGZnQ29sb3I6IHthcmdiOiBjb25maWcudGl0bGVCYWNrZ3JvdW5kQ29sb3IucmVwbGFjZSgnIycsICcnKX0sXG4gICAgICAgICAgYmdDb2xvcjoge2FyZ2I6IGNvbmZpZy50aXRsZUJhY2tncm91bmRDb2xvci5yZXBsYWNlKCcjJywgJycpfVxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgd29ya3NoZWV0Lm1lcmdlQ2VsbHMoYEExOiR7d29ya3NoZWV0LmdldENlbGwoMSwgT2JqZWN0LmtleXMoanNvblswXSkubGVuZ3RoKS5hZGRyZXNzfWApO1xuICAgIH1cblxuICAgIGNvbnN0IGhlYWRlclJvdyA9IHdvcmtzaGVldC5hZGRSb3coaGVhZGVyKTtcbiAgICBoZWFkZXJSb3cuZWFjaENlbGwoKGNlbGwsIG51bWJlcikgPT4ge1xuICAgICAgaWYgKGNvbmZpZy5oZWFkZXJCYWNrZ3JvdW5kQ29sb3IpIHtcbiAgICAgICAgY2VsbC5maWxsID0ge1xuICAgICAgICAgIHR5cGU6ICdwYXR0ZXJuJyxcbiAgICAgICAgICBwYXR0ZXJuOiAnc29saWQnLFxuICAgICAgICAgIGZnQ29sb3I6IHthcmdiOiBjb25maWcuaGVhZGVyQmFja2dyb3VuZENvbG9yLnJlcGxhY2UoJyMnLCAnJyl9LFxuICAgICAgICAgIGJnQ29sb3I6IHthcmdiOiBjb25maWcuaGVhZGVyQmFja2dyb3VuZENvbG9yLnJlcGxhY2UoJyMnLCAnJyl9XG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICBpZiAoY29uZmlnLmhlYWRlckZvbnRDb2xvcikge1xuICAgICAgICBjZWxsLmZvbnQgPSB7XG4gICAgICAgICAgY29sb3I6IHthcmdiOiBjb25maWcuaGVhZGVyRm9udENvbG9yLnJlcGxhY2UoJyMnLCAnJyl9XG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBqc29uLmZvckVhY2goaXRlbSA9PiB7XG4gICAgICBjb25zdCBkYXRhID0gW107XG4gICAgICBPYmplY3QudmFsdWVzKGl0ZW0pLmZvckVhY2godmFsdWUgPT4gZGF0YS5wdXNoKHZhbHVlKSk7XG4gICAgICB3b3Jrc2hlZXQuYWRkUm93KGRhdGEpO1xuICAgIH0pO1xuXG4gICAgd29ya2Jvb2sueGxzeC53cml0ZUJ1ZmZlcigpLnRoZW4oKGRhdGEpID0+IHtcbiAgICAgIGNvbnN0IGJsb2IgPSBuZXcgQmxvYihbZGF0YV0sIHt0eXBlOiAnYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwuc2hlZXQnfSk7XG4gICAgICBmcy5zYXZlQXMoYmxvYiwgY29uZmlnLmZpbGVuYW1lICsgJy54bHN4Jyk7XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgY29udmVydEpzb25Ub1hsc3hXaXRoVGFicyh0YWJzOiB7XG4gICAgdGl0bGVOYW1lPzogc3RyaW5nO1xuICAgIHNoZWV0TmFtZT86IHN0cmluZztcbiAgICBqc29uOiBhbnlbXVxuICB9W10sIGNvbmZpZzogS29hbGFYbHN4Q29uZmlnSW50ZXJmYWNlKSB7XG4gICAgY29uc3QgaGVhZGVyID0gW107XG4gICAgY29uc3Qgd29ya2Jvb2s6IEV4Y2VsUHJvcGVyLldvcmtib29rID0gbmV3IEV4Y2VsLldvcmtib29rKCk7XG5cbiAgICB0YWJzLmZvckVhY2godGFiID0+IHtcbiAgICAgIGNvbnN0IHRpdGxlID0gdGFiPy50aXRsZU5hbWUgPz8gY29uZmlnLnRpdGxlO1xuICAgICAgT2JqZWN0LmtleXModGFiLmpzb25bMF0pLmZvckVhY2gobmFtZSA9PiB7XG4gICAgICAgIGhlYWRlci5wdXNoKChcbiAgICAgICAgICBjb25maWcubm9ybWFsaXplSGVhZGVyID09PSB0cnVlIHx8IGNvbmZpZy5ub3JtYWxpemVIZWFkZXIgPT09IG51bGwgfHwgY29uZmlnLm5vcm1hbGl6ZUhlYWRlciA9PT0gdW5kZWZpbmVkID9cbiAgICAgICAgICAgIGtvYWxhKG5hbWUpLnN0cmluZygpLm5vcm1hbGl6ZSgpLmdldFZhbHVlKCkudG9VcHBlckNhc2UoKSA6XG4gICAgICAgICAgICBuYW1lXG4gICAgICAgICkpO1xuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IHdvcmtzaGVldCA9IHdvcmtib29rLmFkZFdvcmtzaGVldCh0YWI/LnNoZWV0TmFtZSA/PyBjb25maWcuc2hlZXROYW1lKTtcblxuICAgICAgaWYgKGNvbmZpZy50aXRsZSkge1xuICAgICAgICBjb25zdCB0aXRsZVJvdyA9IHdvcmtzaGVldC5hZGRSb3coW3RpdGxlXSk7XG4gICAgICAgIHRpdGxlUm93LmFsaWdubWVudCA9IHtob3Jpem9udGFsOiAnY2VudGVyJ307XG4gICAgICAgIGlmIChjb25maWcudGl0bGVGb250Q29sb3IpIHtcbiAgICAgICAgICB0aXRsZVJvdy5mb250ID0ge2JvbGQ6IHRydWUsIGNvbG9yOiB7YXJnYjogY29uZmlnLnRpdGxlRm9udENvbG9yLnJlcGxhY2UoJyMnLCAnJyl9fTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY29uZmlnLnRpdGxlQmFja2dyb3VuZENvbG9yKSB7XG4gICAgICAgICAgdGl0bGVSb3cuZmlsbCA9IHtcbiAgICAgICAgICAgIHR5cGU6ICdwYXR0ZXJuJyxcbiAgICAgICAgICAgIHBhdHRlcm46ICdzb2xpZCcsXG4gICAgICAgICAgICBmZ0NvbG9yOiB7YXJnYjogY29uZmlnLnRpdGxlQmFja2dyb3VuZENvbG9yLnJlcGxhY2UoJyMnLCAnJyl9LFxuICAgICAgICAgICAgYmdDb2xvcjoge2FyZ2I6IGNvbmZpZy50aXRsZUJhY2tncm91bmRDb2xvci5yZXBsYWNlKCcjJywgJycpfVxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgd29ya3NoZWV0Lm1lcmdlQ2VsbHMoYEExOiR7d29ya3NoZWV0LmdldENlbGwoMSwgT2JqZWN0LmtleXModGFiLmpzb25bMF0pLmxlbmd0aCkuYWRkcmVzc31gKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgaGVhZGVyUm93ID0gd29ya3NoZWV0LmFkZFJvdyhoZWFkZXIpO1xuICAgICAgaGVhZGVyUm93LmVhY2hDZWxsKChjZWxsLCBudW1iZXIpID0+IHtcbiAgICAgICAgaWYgKGNvbmZpZy5oZWFkZXJCYWNrZ3JvdW5kQ29sb3IpIHtcbiAgICAgICAgICBjZWxsLmZpbGwgPSB7XG4gICAgICAgICAgICB0eXBlOiAncGF0dGVybicsXG4gICAgICAgICAgICBwYXR0ZXJuOiAnc29saWQnLFxuICAgICAgICAgICAgZmdDb2xvcjoge2FyZ2I6IGNvbmZpZy5oZWFkZXJCYWNrZ3JvdW5kQ29sb3IucmVwbGFjZSgnIycsICcnKX0sXG4gICAgICAgICAgICBiZ0NvbG9yOiB7YXJnYjogY29uZmlnLmhlYWRlckJhY2tncm91bmRDb2xvci5yZXBsYWNlKCcjJywgJycpfVxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNvbmZpZy5oZWFkZXJGb250Q29sb3IpIHtcbiAgICAgICAgICBjZWxsLmZvbnQgPSB7XG4gICAgICAgICAgICBjb2xvcjoge2FyZ2I6IGNvbmZpZy5oZWFkZXJGb250Q29sb3IucmVwbGFjZSgnIycsICcnKX1cbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgdGFiLmpzb24uZm9yRWFjaChpdGVtID0+IHtcbiAgICAgICAgY29uc3QgZGF0YSA9IFtdO1xuICAgICAgICBPYmplY3QudmFsdWVzKGl0ZW0pLmZvckVhY2godmFsdWUgPT4gZGF0YS5wdXNoKHZhbHVlKSk7XG4gICAgICAgIHdvcmtzaGVldC5hZGRSb3coZGF0YSk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIHdvcmtib29rLnhsc3gud3JpdGVCdWZmZXIoKS50aGVuKChkYXRhKSA9PiB7XG4gICAgICBjb25zdCBibG9iID0gbmV3IEJsb2IoW2RhdGFdLCB7dHlwZTogJ2FwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnNoZWV0J30pO1xuICAgICAgZnMuc2F2ZUFzKGJsb2IsIGNvbmZpZy5maWxlbmFtZSArICcueGxzeCcpO1xuICAgIH0pO1xuICB9XG59XG4iXX0=