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
JavaScript
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhjZWwuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1nZW0tc3BhYXMvZXhjZWwvc3JjL19zZXJ2aWNlcy9leGNlbC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxPQUFPLE1BQU0sU0FBUyxDQUFDO0FBQ25DLE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxZQUFZLENBQUM7QUFDbEMsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQWtELFlBQVksRUFBQyxNQUFNLGVBQWUsQ0FBQzs7O0FBTTVGLE1BQU0sT0FBTyxZQUFZO0lBSXZCLFlBQ1UsZUFBZ0MsRUFDaEMsZUFBZ0M7UUFEaEMsb0JBQWUsR0FBZixlQUFlLENBQWlCO1FBQ2hDLG9CQUFlLEdBQWYsZUFBZSxDQUFpQjtRQUV4QyxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDckQsQ0FBQztJQUVELFVBQVUsQ0FDUixjQUFpQyxFQUNqQyxRQUFnQixFQUNoQixnQkFBMEIsRUFBRSxFQUM1QixnQkFBMEIsRUFBRSxFQUM1QixnQkFBeUIsS0FBSztRQUc5QixNQUFNLFFBQVEsR0FBRyxJQUFJLE9BQU8sQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUN4QyxNQUFNLGFBQWEsR0FBYSxFQUFFLENBQUM7UUFFbkMsS0FBSyxNQUFNLEtBQUssSUFBSSxjQUFjLEVBQUUsQ0FBQztZQUVuQyw4RkFBOEY7WUFDOUYsSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUM7Z0JBRTdDLHFDQUFxQztnQkFDckMsSUFBSSxPQUFPLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7Z0JBRXpILDBDQUEwQztnQkFDMUMsSUFBSSxhQUFhLEVBQUUsQ0FBQztvQkFDbEIsS0FBSyxNQUFNLE9BQU8sSUFBSSxPQUFPLEVBQUUsQ0FBQzt3QkFDOUIsS0FBSyxNQUFNLE1BQU0sSUFBSSxPQUFPLEVBQUUsQ0FBQzs0QkFDN0IsSUFBSSxPQUFPLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxJQUFJLFlBQVksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7Z0NBQzlGLE9BQU8sQ0FBQyxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDOzRCQUNwRCxDQUFDO3dCQUNILENBQUM7b0JBQ0gsQ0FBQztnQkFDSCxDQUFDO2dCQUVELFlBQVk7Z0JBQ1osTUFBTSxTQUFTLEdBQUcsUUFBUSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUM7Z0JBRXpELGNBQWM7Z0JBQ2QsSUFBSSxPQUFPLEdBQWEsYUFBYSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDaEcsSUFBSSxhQUFhLEVBQUUsTUFBTSxFQUFFLENBQUM7b0JBQzFCLE9BQU8sR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDOUQsQ0FBQztnQkFDRCxTQUFTLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO2dCQUUxQixXQUFXO2dCQUNYLEtBQUssTUFBTSxHQUFHLElBQUksS0FBSyxDQUFDLFNBQVMsRUFBRSxDQUFDO29CQUNsQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7b0JBQ1gsS0FBSyxNQUFNLE1BQU0sSUFBSSxPQUFPLEVBQUUsQ0FBQzt3QkFDN0IsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLGVBQWUsS0FBSyxLQUFLLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsS0FBSyxPQUFPLEVBQUUsQ0FBQzs0QkFDMUYsR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLE9BQU8sR0FBRyxDQUFDLE1BQU0sQ0FBQyxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO3dCQUNyRyxDQUFDO3dCQUNELENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7b0JBQ3RCLENBQUM7b0JBQ0QsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDdEIsQ0FBQztnQkFFRCxhQUFhLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUV0QyxDQUFDO2lCQUFNLENBQUM7Z0JBQ04sSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQ3hCLDZDQUE2QyxLQUFLLENBQUMsU0FBUyw2QkFBNkIsQ0FDMUYsQ0FBQTtZQUNILENBQUM7UUFFSCxDQUFDO1FBRUQsaUJBQWlCO1FBQ2pCLE1BQU0sS0FBSyxHQUFHLFFBQVEsQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQzFDLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRSxlQUFlLEtBQUssTUFBTSxFQUFFLENBQUM7WUFDOUMsUUFBUSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUU7aUJBQ3hCLElBQUksQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFO2dCQUNmLE1BQU0sQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsS0FBSyxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLGVBQWUsQ0FBQyxDQUFBO1lBQ3pFLENBQUMsQ0FBQyxDQUFDO1FBQ1AsQ0FBQzthQUFNLENBQUM7WUFDTixRQUFRLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FDdEIsRUFBQyxnQkFBZ0IsRUFBRSxFQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLGVBQWUsRUFBRSxFQUFDLEVBQUMsQ0FDakUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRTtnQkFDaEIsTUFBTSxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxLQUFLLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsZUFBZSxDQUFDLENBQUE7WUFDekUsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDO0lBQ0gsQ0FBQzsrR0F2RlUsWUFBWTttSEFBWixZQUFZLGNBRlgsTUFBTTs7NEZBRVAsWUFBWTtrQkFIeEIsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBFeGNlbEpTIGZyb20gJ2V4Y2VsanMnO1xyXG5pbXBvcnQge3NhdmVBc30gZnJvbSAnZmlsZS1zYXZlcic7XHJcbmltcG9ydCB7SW5qZWN0YWJsZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7U25hY2tiYXJTZXJ2aWNlLCBTZXR0aW5nc01vZGVsLCBTZXR0aW5nc1NlcnZpY2UsIFV0aWxzU2VydmljZX0gZnJvbSBcIm5neC1nZW0tc3BhYXNcIjtcclxuaW1wb3J0IHtFeGNlbFNoZWV0TW9kZWx9IGZyb20gXCIuLi9fbW9kZWxzL2V4Y2VsLm1vZGVsXCI7XHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBFeGNlbFNlcnZpY2Uge1xyXG5cclxuICBwcml2YXRlIHNldHRpbmdzOiBTZXR0aW5nc01vZGVsO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgc2V0dGluZ3NTZXJ2aWNlOiBTZXR0aW5nc1NlcnZpY2UsXHJcbiAgICBwcml2YXRlIHNuYWNrYmFyU2VydmljZTogU25hY2tiYXJTZXJ2aWNlLFxyXG4gICkge1xyXG4gICAgdGhpcy5zZXR0aW5ncyA9IHRoaXMuc2V0dGluZ3NTZXJ2aWNlLmdldFNldHRpbmdzKCk7XHJcbiAgfVxyXG5cclxuICBleHBvcnRGaWxlKFxyXG4gICAgc2hlZXRzVG9FeHBvcnQ6IEV4Y2VsU2hlZXRNb2RlbFtdLFxyXG4gICAgZmlsZU5hbWU6IHN0cmluZyxcclxuICAgIGNvbHNUb0luY2x1ZGU6IHN0cmluZ1tdID0gW10sXHJcbiAgICBjb2xzVG9FeGNsdWRlOiBzdHJpbmdbXSA9IFtdLFxyXG4gICAgaXNUb1N0cmluZ2lmeTogYm9vbGVhbiA9IGZhbHNlLFxyXG4gICkge1xyXG5cclxuICAgIGNvbnN0IHdvcmtib29rID0gbmV3IEV4Y2VsSlMuV29ya2Jvb2soKTtcclxuICAgIGNvbnN0IHNoZWV0c0NyZWF0ZWQ6IHN0cmluZ1tdID0gW107XHJcblxyXG4gICAgZm9yIChjb25zdCBzaGVldCBvZiBzaGVldHNUb0V4cG9ydCkge1xyXG5cclxuICAgICAgLy8gY2hlY2sgdGhhdCBhIHNoZWV0IHdpdGggdGhlIHNhbWUgbmFtZSBoYXMgbm90IGJlZW4gY3JlYXRlZCB5ZXQgKHRocm93cyBhbiBlcnJvciBpbiBFeGNlbEpTKVxyXG4gICAgICBpZiAoIXNoZWV0c0NyZWF0ZWQuaW5jbHVkZXMoc2hlZXQuc2hlZXROYW1lKSkge1xyXG5cclxuICAgICAgICAvLyBJRiBOT1QgQU4gQVJSQVkgVEhFTiBXUkFQIElOIEFSUkFZXHJcbiAgICAgICAgbGV0IGFyckRhdGEgPSBBcnJheS5pc0FycmF5KHNoZWV0LnNoZWV0RGF0YSkgPyBVdGlsc1NlcnZpY2UuY29weShzaGVldC5zaGVldERhdGEpIDogVXRpbHNTZXJ2aWNlLmNvcHkoW3NoZWV0LnNoZWV0RGF0YV0pO1xyXG5cclxuICAgICAgICAvLyBTT01FIENPTFVNTlMgQ09OVEFJTiBPQkpFQ1RTOiBTVFJJTkdJRllcclxuICAgICAgICBpZiAoaXNUb1N0cmluZ2lmeSkge1xyXG4gICAgICAgICAgZm9yIChjb25zdCBjdXJEYXRhIG9mIGFyckRhdGEpIHtcclxuICAgICAgICAgICAgZm9yIChjb25zdCBjdXJDb2wgaW4gY3VyRGF0YSkge1xyXG4gICAgICAgICAgICAgIGlmIChjdXJEYXRhLmhhc093blByb3BlcnR5KGN1ckNvbCkgJiYgVXRpbHNTZXJ2aWNlLmNoZWNrSlNPTihKU09OLnN0cmluZ2lmeShjdXJEYXRhW2N1ckNvbF0pKSkge1xyXG4gICAgICAgICAgICAgICAgY3VyRGF0YVtjdXJDb2xdID0gSlNPTi5zdHJpbmdpZnkoY3VyRGF0YVtjdXJDb2xdKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIGFkZCBzaGVldFxyXG4gICAgICAgIGNvbnN0IHdvcmtzaGVldCA9IHdvcmtib29rLmFkZFdvcmtzaGVldChzaGVldC5zaGVldE5hbWUpO1xyXG5cclxuICAgICAgICAvLyBhZGQgaGVhZGVyc1xyXG4gICAgICAgIGxldCBoZWFkZXJzOiBzdHJpbmdbXSA9IGNvbHNUb0luY2x1ZGU/Lmxlbmd0aCA/IGNvbHNUb0luY2x1ZGUgOiBPYmplY3Qua2V5cyhzaGVldC5zaGVldERhdGFbMF0pO1xyXG4gICAgICAgIGlmIChjb2xzVG9FeGNsdWRlPy5sZW5ndGgpIHtcclxuICAgICAgICAgIGhlYWRlcnMgPSBoZWFkZXJzLmZpbHRlcigoaCkgPT4gIWNvbHNUb0V4Y2x1ZGUuaW5jbHVkZXMoaCkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB3b3Jrc2hlZXQuYWRkUm93KGhlYWRlcnMpO1xyXG5cclxuICAgICAgICAvLyBhZGQgZGF0YVxyXG4gICAgICAgIGZvciAoY29uc3Qgcm93IG9mIHNoZWV0LnNoZWV0RGF0YSkge1xyXG4gICAgICAgICAgbGV0IHIgPSBbXTtcclxuICAgICAgICAgIGZvciAoY29uc3QgaGVhZGVyIG9mIGhlYWRlcnMpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuc2V0dGluZ3MuZXhwb3J0RXh0ZW5zaW9uID09PSAnY3N2JyAmJiB0aGlzLnNldHRpbmdzLmRlY2ltYWxTZXBhcmF0b3IgPT09ICdjb21tYScpIHtcclxuICAgICAgICAgICAgICByb3dbaGVhZGVyXSA9IHR5cGVvZiByb3dbaGVhZGVyXSA9PT0gJ251bWJlcicgPyAoJycgKyByb3dbaGVhZGVyXSkucmVwbGFjZSgnLicsICcsJykgOiByb3dbaGVhZGVyXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByLnB1c2gocm93W2hlYWRlcl0pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgd29ya3NoZWV0LmFkZFJvdyhyKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHNoZWV0c0NyZWF0ZWQucHVzaChzaGVldC5zaGVldE5hbWUpO1xyXG5cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnNuYWNrYmFyU2VydmljZS5lcnJvcihcclxuICAgICAgICAgIGBEdXBsaWNhdGUgc2hlZXQgbmFtZXM6IGEgc2hlZXQgd2l0aCBuYW1lIFwiJHtzaGVldC5zaGVldE5hbWV9XCIgaGFzIGFscmVhZHkgYmVlbiBjcmVhdGVkIWBcclxuICAgICAgICApXHJcbiAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gQ0xFQU4gRklMRU5BTUVcclxuICAgIGNvbnN0IGZOYW1lID0gZmlsZU5hbWUucmVwbGFjZSgvIC9nLCAnXycpO1xyXG4gICAgaWYgKHRoaXMuc2V0dGluZ3M/LmV4cG9ydEV4dGVuc2lvbiA9PT0gJ3hsc3gnKSB7XHJcbiAgICAgIHdvcmtib29rLnhsc3gud3JpdGVCdWZmZXIoKVxyXG4gICAgICAgIC50aGVuKChidWZmZXIpID0+IHtcclxuICAgICAgICAgIHNhdmVBcyhuZXcgQmxvYihbYnVmZmVyXSksIGZOYW1lICsgJy4nICsgdGhpcy5zZXR0aW5ncy5leHBvcnRFeHRlbnNpb24pXHJcbiAgICAgICAgfSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB3b3JrYm9vay5jc3Yud3JpdGVCdWZmZXIoXHJcbiAgICAgICAge2Zvcm1hdHRlck9wdGlvbnM6IHtkZWxpbWl0ZXI6IHRoaXMuc2V0dGluZ3MuZ2V0Q3N2RGVsaW1pdGVyKCl9fVxyXG4gICAgICApLnRoZW4oKGJ1ZmZlcikgPT4ge1xyXG4gICAgICAgIHNhdmVBcyhuZXcgQmxvYihbYnVmZmVyXSksIGZOYW1lICsgJy4nICsgdGhpcy5zZXR0aW5ncy5leHBvcnRFeHRlbnNpb24pXHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbn1cclxuIl19