UNPKG

ngx-gem-spaas

Version:

This library contains services, components, images and styles to provide a unified look and way-of-working throughout GEM SPaaS.

79 lines 13.2 kB
import * as ExcelJS from 'exceljs'; import { saveAs } from 'file-saver'; import { Injectable } from '@angular/core'; import { UtilsService } from "ngx-gem-spaas"; import * as i0 from "@angular/core"; import * as i1 from "ngx-gem-spaas"; export class ExcelService { constructor(settingsService, snackbarService) { this.settingsService = settingsService; this.snackbarService = snackbarService; this.settings = this.settingsService.getSettings(); } exportFile(sheetsToExport, fileName, colsToInclude = [], colsToExclude = [], isToStringify = false) { const workbook = new ExcelJS.Workbook(); const sheetsCreated = []; for (const sheet of sheetsToExport) { // check that a sheet with the same name has not been created yet (throws an error in ExcelJS) if (!sheetsCreated.includes(sheet.sheetName)) { // IF NOT AN ARRAY THEN WRAP IN ARRAY let arrData = Array.isArray(sheet.sheetData) ? UtilsService.copy(sheet.sheetData) : UtilsService.copy([sheet.sheetData]); // SOME COLUMNS CONTAIN OBJECTS: STRINGIFY if (isToStringify) { for (const curData of arrData) { for (const curCol in curData) { if (curData.hasOwnProperty(curCol) && UtilsService.checkJSON(JSON.stringify(curData[curCol]))) { curData[curCol] = JSON.stringify(curData[curCol]); } } } } // add sheet const worksheet = workbook.addWorksheet(sheet.sheetName); // add headers let headers = colsToInclude?.length ? colsToInclude : Object.keys(sheet.sheetData[0]); if (colsToExclude?.length) { headers = headers.filter((h) => !colsToExclude.includes(h)); } worksheet.addRow(headers); // add data for (const row of sheet.sheetData) { let r = []; for (const header of headers) { if (this.settings.exportExtension === 'csv' && this.settings.decimalSeparator === 'comma') { row[header] = typeof row[header] === 'number' ? ('' + row[header]).replace('.', ',') : row[header]; } r.push(row[header]); } worksheet.addRow(r); } sheetsCreated.push(sheet.sheetName); } else { this.snackbarService.error(`Duplicate sheet names: a sheet with name "${sheet.sheetName}" has already been created!`); } } // CLEAN FILENAME const fName = fileName.replace(/ /g, '_'); if (this.settings?.exportExtension === 'xlsx') { workbook.xlsx.writeBuffer() .then((buffer) => { saveAs(new Blob([buffer]), fName + '.' + this.settings.exportExtension); }); } else { workbook.csv.writeBuffer({ formatterOptions: { delimiter: this.settings.getCsvDelimiter() } }).then((buffer) => { saveAs(new Blob([buffer]), fName + '.' + this.settings.exportExtension); }); } } static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ExcelService, deps: [{ token: i1.SettingsService }, { token: i1.SnackbarService }], target: i0.ɵɵFactoryTarget.Injectable }); } static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ExcelService, providedIn: 'root' }); } } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ExcelService, decorators: [{ type: Injectable, args: [{ providedIn: 'root' }] }], ctorParameters: () => [{ type: i1.SettingsService }, { type: i1.SnackbarService }] }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhjZWwuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1nZW0tc3BhYXMvZXhjZWwvc3JjL19zZXJ2aWNlcy9leGNlbC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxPQUFPLE1BQU0sU0FBUyxDQUFDO0FBQ25DLE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxZQUFZLENBQUM7QUFDbEMsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQWtELFlBQVksRUFBQyxNQUFNLGVBQWUsQ0FBQzs7O0FBTTVGLE1BQU0sT0FBTyxZQUFZO0lBSXZCLFlBQ1UsZUFBZ0MsRUFDaEMsZUFBZ0M7UUFEaEMsb0JBQWUsR0FBZixlQUFlLENBQWlCO1FBQ2hDLG9CQUFlLEdBQWYsZUFBZSxDQUFpQjtRQUV4QyxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDckQsQ0FBQztJQUVELFVBQVUsQ0FDUixjQUFpQyxFQUNqQyxRQUFnQixFQUNoQixnQkFBMEIsRUFBRSxFQUM1QixnQkFBMEIsRUFBRSxFQUM1QixnQkFBeUIsS0FBSztRQUc5QixNQUFNLFFBQVEsR0FBRyxJQUFJLE9BQU8sQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUN4QyxNQUFNLGFBQWEsR0FBYSxFQUFFLENBQUM7UUFFbkMsS0FBSyxNQUFNLEtBQUssSUFBSSxjQUFjLEVBQUUsQ0FBQztZQUVuQyw4RkFBOEY7WUFDOUYsSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUM7Z0JBRTdDLHFDQUFxQztnQkFDckMsSUFBSSxPQUFPLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxJQUFJ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Q3hCLElBQUksQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFO2dCQUNmLE1BQU0sQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsS0FBSyxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLGVBQWUsQ0FBQyxDQUFBO1lBQ3pFLENBQUMsQ0FBQyxDQUFDO1FBQ1AsQ0FBQzthQUFNLENBQUM7WUFDTixRQUFRLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FDdEIsRUFBQyxnQkFBZ0IsRUFBRSxFQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLGVBQWUsRUFBRSxFQUFDLEVBQUMsQ0FDakUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRTtnQkFDaEIsTUFBTSxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxLQUFLLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsZUFBZSxDQUFDLENBQUE7WUFDekUsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDO0lBQ0gsQ0FBQzsrR0F2RlUsWUFBWTttSEFBWixZQUFZLGNBRlgsTUFBTTs7NEZBRVAsWUFBWTtrQkFIeEIsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBFeGNlbEpTIGZyb20gJ2V4Y2VsanMnO1xyXG5pbXBvcnQge3NhdmVBc30gZnJvbSAnZmlsZS1zYXZlcic7XHJcbmltcG9ydCB7SW5qZWN0YWJsZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7U25hY2tiYXJTZXJ2aWNlLCBTZXR0aW5nc01vZGVsLCBTZXR0aW5nc1NlcnZpY2UsIFV0aWxzU2VydmljZX0gZnJvbSBcIm5neC1nZW0tc3BhYXNcIjtcclxuaW1wb3J0IHtFeGNlbFNoZWV0TW9kZWx9IGZyb20gXCIuLi9fbW9kZWxzL2V4Y2VsLm1vZGVsXCI7XHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBFeGNlbFNlcnZpY2Uge1xyXG5cclxuICBwcml2YXRlIHNldHRpbmdzOiBTZXR0aW5nc01vZGVsO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgc2V0dGluZ3NTZXJ2aWNlOiBTZXR0aW5nc1NlcnZpY2UsXHJcbiAgICBwcml2YXRlIHNuYWNrYmFyU2VydmljZTogU25hY2tiYXJTZXJ2aWNlLFxyXG4gICkge1xyXG4gICAgdGhpcy5zZXR0aW5ncyA9IHRoaXMuc2V0dGluZ3NTZXJ2aWNlLmdldFNldHRpbmdzKCk7XHJcbiAgfVxyXG5cclxuICBleHBvcnRGaWxlKFxyXG4gICAgc2hlZXRzVG9FeHBvcnQ6IEV4Y2VsU2hlZXRNb2RlbFtdLFxyXG4gICAgZmlsZU5hbWU6IHN0cmluZyxcclxuICAgIGNvbHNUb0luY2x1ZGU6IHN0cmluZ1tdID0gW10sXHJcbiAgICBjb2xzVG9FeGNsdWRlOiBzdHJpbmdbXSA9IFtdLFxyXG4gICAgaXNUb1N0cmluZ2lmeTogYm9vbGVhbiA9IGZhbHNlLFxyXG4gICkge1xyXG5cclxuICAgIGNvbnN0IHdvcmtib29rID0gbmV3IEV4Y2VsSlMuV29ya2Jvb2soKTtcclxuICAgIGNvbnN0IHNoZWV0c0NyZWF0ZWQ6IHN0cmluZ1tdID0gW107XHJcblxyXG4gICAgZm9yIChjb25zdCBzaGVldCBvZiBzaGVldHNUb0V4cG9ydCkge1xyXG5cclxuICAgICAgLy8gY2hlY2sgdGhhdCBhIHNoZWV0IHdpdGggdGhlIHNhbWUgbmFtZSBoYXMgbm90IGJlZW4gY3JlYXRlZCB5ZXQgKHRocm93cyBhbiBlcnJvciBpbiBFeGNlbEpTKVxyXG4gICAgICBpZiAoIXNoZWV0c0NyZWF0ZWQuaW5jbHVkZXMoc2hlZXQuc2hlZXROYW1lKSkge1xyXG5cclxuICAgICAgICAvLyBJRiBOT1QgQU4gQVJSQVkgVEhFTiBXUkFQIElOIEFSUkFZXHJcbiAgICAgICAgbGV0IGFyckRhdGEgPSBBcnJheS5pc0FycmF5KHNoZWV0LnNoZWV0RGF0YSkgPyBVdGlsc1NlcnZpY2UuY29weShzaGVldC5zaGVldERhdGEpIDogVXRpbHNTZXJ2aWNlLmNvcHkoW3NoZWV0LnNoZWV0RGF0YV0pO1xyXG5cclxuICAgICAgICAvLyBTT01FIENPTFVNTlMgQ09OVEFJTiBPQkpFQ1RTOiBTVFJJTkdJRllcclxuICAgICAgICBpZiAoaXNUb1N0cmluZ2lmeSkge1xyXG4gICAgICAgICAgZm9yIChjb25zdCBjdXJEYXRhIG9mIGFyckRhdGEpIHtcclxuICAgICAgICAgICAgZm9yIChjb25zdCBjdXJDb2wgaW4gY3VyRGF0YSkge1xyXG4gICAgICAgICAgICAgIGlmIChjdXJEYXRhLmhhc093blByb3BlcnR5KGN1ckNvbCkgJiYgVXRpbHNTZXJ2aWNlLmNoZWNrSlNPTihKU09OLnN0cmluZ2lmeShjdXJEYXRhW2N1ckNvbF0pKSkge1xyXG4gICAgICAgICAgICAgICAgY3VyRGF0YVtjdXJDb2xdID0gSlNPTi5zdHJpbmdpZnkoY3VyRGF0YVtjdXJDb2xdKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIGFkZCBzaGVldFxyXG4gICAgICAgIGNvbnN0IHdvcmtzaGVldCA9IHdvcmtib29rLmFkZFdvcmtzaGVldChzaGVldC5zaGVldE5hbWUpO1xyXG5cclxuICAgICAgICAvLyBhZGQgaGVhZGVyc1xyXG4gICAgICAgIGxldCBoZWFkZXJzOiBzdHJpbmdbXSA9IGNvbHNUb0luY2x1ZGU/Lmxlbmd0aCA/IGNvbHNUb0luY2x1ZGUgOiBPYmplY3Qua2V5cyhzaGVldC5zaGVldERhdGFbMF0pO1xyXG4gICAgICAgIGlmIChjb2xzVG9FeGNsdWRlPy5sZW5ndGgpIHtcclxuICAgICAgICAgIGhlYWRlcnMgPSBoZWFkZXJzLmZpbHRlcigoaCkgPT4gIWNvbHNUb0V4Y2x1ZGUuaW5jbHVkZXMoaCkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB3b3Jrc2hlZXQuYWRkUm93KGhlYWRlcnMpO1xyXG5cclxuICAgICAgICAvLyBhZGQgZGF0YVxyXG4gICAgICAgIGZvciAoY29uc3Qgcm93IG9mIHNoZWV0LnNoZWV0RGF0YSkge1xyXG4gICAgICAgICAgbGV0IHIgPSBbXTtcclxuICAgICAgICAgIGZvciAoY29uc3QgaGVhZGVyIG9mIGhlYWRlcnMpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuc2V0dGluZ3MuZXhwb3J0RXh0ZW5zaW9uID09PSAnY3N2JyAmJiB0aGlzLnNldHRpbmdzLmRlY2ltYWxTZXBhcmF0b3IgPT09ICdjb21tYScpIHtcclxuICAgICAgICAgICAgICByb3dbaGVhZGVyXSA9IHR5cGVvZiByb3dbaGVhZGVyXSA9PT0gJ251bWJlcicgPyAoJycgKyByb3dbaGVhZGVyXSkucmVwbGFjZSgnLicsICcsJykgOiByb3dbaGVhZGVyXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByLnB1c2gocm93W2hlYWRlcl0pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgd29ya3NoZWV0LmFkZFJvdyhyKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHNoZWV0c0NyZWF0ZWQucHVzaChzaGVldC5zaGVldE5hbWUpO1xyXG5cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnNuYWNrYmFyU2VydmljZS5lcnJvcihcclxuICAgICAgICAgIGBEdXBsaWNhdGUgc2hlZXQgbmFtZXM6IGEgc2hlZXQgd2l0aCBuYW1lIFwiJHtzaGVldC5zaGVldE5hbWV9XCIgaGFzIGFscmVhZHkgYmVlbiBjcmVhdGVkIWBcclxuICAgICAgICApXHJcbiAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gQ0xFQU4gRklMRU5BTUVcclxuICAgIGNvbnN0IGZOYW1lID0gZmlsZU5hbWUucmVwbGFjZSgvIC9nLCAnXycpO1xyXG4gICAgaWYgKHRoaXMuc2V0dGluZ3M/LmV4cG9ydEV4dGVuc2lvbiA9PT0gJ3hsc3gnKSB7XHJcbiAgICAgIHdvcmtib29rLnhsc3gud3JpdGVCdWZmZXIoKVxyXG4gICAgICAgIC50aGVuKChidWZmZXIpID0+IHtcclxuICAgICAgICAgIHNhdmVBcyhuZXcgQmxvYihbYnVmZmVyXSksIGZOYW1lICsgJy4nICsgdGhpcy5zZXR0aW5ncy5leHBvcnRFeHRlbnNpb24pXHJcbiAgICAgICAgfSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB3b3JrYm9vay5jc3Yud3JpdGVCdWZmZXIoXHJcbiAgICAgICAge2Zvcm1hdHRlck9wdGlvbnM6IHtkZWxpbWl0ZXI6IHRoaXMuc2V0dGluZ3MuZ2V0Q3N2RGVsaW1pdGVyKCl9fVxyXG4gICAgICApLnRoZW4oKGJ1ZmZlcikgPT4ge1xyXG4gICAgICAgIHNhdmVBcyhuZXcgQmxvYihbYnVmZmVyXSksIGZOYW1lICsgJy4nICsgdGhpcy5zZXR0aW5ncy5leHBvcnRFeHRlbnNpb24pXHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbn1cclxuIl19