UNPKG

ngx-mat-dynamic-table

Version:
38 lines 6.09 kB
import { Injectable } from '@angular/core'; import * as FileSaver from 'file-saver'; import * as XLSX from 'xlsx'; import { pick, map, get as _get, partialRight, values } from 'lodash'; export class XlsxExportService { constructor() { this.fileType = 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=UTF-8'; this.fileExtension = '.xlsx'; } exportExcel(jsonData, headers, fileName) { const columnHeaders = values(headers); const ws = XLSX.utils.json_to_sheet(map(this.renameKeys(jsonData, headers), partialRight(pick, columnHeaders)), { header: columnHeaders }); const wb = { Sheets: { 'data': ws }, SheetNames: ['data'] }; const excelBuffer = XLSX.write(wb, { bookType: 'xlsx', type: 'array' }); this.saveExcelFile(excelBuffer, fileName); } saveExcelFile(buffer, fileName) { const data = new Blob([buffer], { type: this.fileType }); FileSaver.saveAs(data, fileName + this.fileExtension); } renameKeys(jsonData, headers) { return jsonData.map(j => { let renamed = {}; // Get all the keys of the headers Object.keys(headers).forEach(key => { // make the header value the new key of the renamed object. // use the key of the header with lodash get function to get nested objects. renamed[headers[key]] = _get(j, key); }); return renamed; }); } } XlsxExportService.decorators = [ { type: Injectable } ]; XlsxExportService.ctorParameters = () => []; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoieGxzeC1leHBvcnQuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIuLi8uLi8uLi9wcm9qZWN0cy9uZ3gtbWF0LWR5bmFtaWMtdGFibGUvc3JjLyIsInNvdXJjZXMiOlsibGliL2NvbXBvbmVudHMveGxzeC10YWJsZS1leHBvcnQvc2VydmljZS94bHN4LWV4cG9ydC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxLQUFLLFNBQVMsTUFBTSxZQUFZLENBQUM7QUFDeEMsT0FBTyxLQUFLLElBQUksTUFBTSxNQUFNLENBQUM7QUFDN0IsT0FBTyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsR0FBRyxJQUFJLElBQUksRUFBRSxZQUFZLEVBQVcsTUFBTSxFQUFFLE1BQU0sUUFBUSxDQUFDO0FBRy9FLE1BQU0sT0FBTyxpQkFBaUI7SUFLNUI7UUFIQSxhQUFRLEdBQUcsaUZBQWlGLENBQUM7UUFDN0Ysa0JBQWEsR0FBRyxPQUFPLENBQUM7SUFFUixDQUFDO0lBRVYsV0FBVyxDQUFDLFFBQWUsRUFBRSxPQUFZLEVBQUUsUUFBZ0I7UUFDaEUsTUFBTSxhQUFhLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3RDLE1BQU0sRUFBRSxHQUFtQixJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRLEVBQUUsT0FBTyxDQUFDLEVBQUUsWUFBWSxDQUFDLElBQUksRUFBRSxhQUFhLENBQUMsQ0FBQyxFQUFFLEVBQUUsTUFBTSxFQUFFLGFBQWEsRUFBRSxDQUFDLENBQUM7UUFDM0osTUFBTSxFQUFFLEdBQWtCLEVBQUUsTUFBTSxFQUFFLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLFVBQVUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7UUFDM0UsTUFBTSxXQUFXLEdBQVEsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLEVBQUUsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO1FBQzdFLElBQUksQ0FBQyxhQUFhLENBQUMsV0FBVyxFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBRTVDLENBQUM7SUFFTyxhQUFhLENBQUMsTUFBVyxFQUFFLFFBQWdCO1FBQ2pELE1BQU0sSUFBSSxHQUFTLElBQUksSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7UUFDL0QsU0FBUyxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsUUFBUSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUN4RCxDQUFDO0lBRUQsVUFBVSxDQUFDLFFBQWUsRUFBRSxPQUFZO1FBQ3RDLE9BQU8sUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRTtZQUN0QixJQUFJLE9BQU8sR0FBRyxFQUFFLENBQUM7WUFDakIsa0NBQWtDO1lBQ2xDLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFO2dCQUNqQywyREFBMkQ7Z0JBQzNELDRFQUE0RTtnQkFDNUUsT0FBTyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7WUFDdkMsQ0FBQyxDQUFDLENBQUM7WUFDSCxPQUFPLE9BQU8sQ0FBQztRQUNqQixDQUFDLENBQUMsQ0FBQTtJQUNKLENBQUM7OztZQWpDRixVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgKiBhcyBGaWxlU2F2ZXIgZnJvbSAnZmlsZS1zYXZlcic7XHJcbmltcG9ydCAqIGFzIFhMU1ggZnJvbSAneGxzeCc7XHJcbmltcG9ydCB7IHBpY2ssIG1hcCwgZ2V0IGFzIF9nZXQsIHBhcnRpYWxSaWdodCwgbWFwS2V5cywgdmFsdWVzIH0gZnJvbSAnbG9kYXNoJztcclxuXHJcbkBJbmplY3RhYmxlKClcclxuZXhwb3J0IGNsYXNzIFhsc3hFeHBvcnRTZXJ2aWNlIHtcclxuXHJcbiAgZmlsZVR5cGUgPSAnYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwuc2hlZXQ7Y2hhcnNldD1VVEYtOCc7XHJcbiAgZmlsZUV4dGVuc2lvbiA9ICcueGxzeCc7XHJcblxyXG4gIGNvbnN0cnVjdG9yKCkgeyB9XHJcblxyXG4gIHB1YmxpYyBleHBvcnRFeGNlbChqc29uRGF0YTogYW55W10sIGhlYWRlcnM6IGFueSwgZmlsZU5hbWU6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgY29uc3QgY29sdW1uSGVhZGVycyA9IHZhbHVlcyhoZWFkZXJzKTtcclxuICAgIGNvbnN0IHdzOiBYTFNYLldvcmtTaGVldCA9IFhMU1gudXRpbHMuanNvbl90b19zaGVldChtYXAodGhpcy5yZW5hbWVLZXlzKGpzb25EYXRhLCBoZWFkZXJzKSwgcGFydGlhbFJpZ2h0KHBpY2ssIGNvbHVtbkhlYWRlcnMpKSwgeyBoZWFkZXI6IGNvbHVtbkhlYWRlcnMgfSk7XHJcbiAgICBjb25zdCB3YjogWExTWC5Xb3JrQm9vayA9IHsgU2hlZXRzOiB7ICdkYXRhJzogd3MgfSwgU2hlZXROYW1lczogWydkYXRhJ10gfTtcclxuICAgIGNvbnN0IGV4Y2VsQnVmZmVyOiBhbnkgPSBYTFNYLndyaXRlKHdiLCB7IGJvb2tUeXBlOiAneGxzeCcsIHR5cGU6ICdhcnJheScgfSk7XHJcbiAgICB0aGlzLnNhdmVFeGNlbEZpbGUoZXhjZWxCdWZmZXIsIGZpbGVOYW1lKTtcclxuXHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNhdmVFeGNlbEZpbGUoYnVmZmVyOiBhbnksIGZpbGVOYW1lOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGNvbnN0IGRhdGE6IEJsb2IgPSBuZXcgQmxvYihbYnVmZmVyXSwgeyB0eXBlOiB0aGlzLmZpbGVUeXBlIH0pO1xyXG4gICAgRmlsZVNhdmVyLnNhdmVBcyhkYXRhLCBmaWxlTmFtZSArIHRoaXMuZmlsZUV4dGVuc2lvbik7XHJcbiAgfVxyXG5cclxuICByZW5hbWVLZXlzKGpzb25EYXRhOiBhbnlbXSwgaGVhZGVyczogYW55KTogYW55W10ge1xyXG4gICAgcmV0dXJuIGpzb25EYXRhLm1hcChqID0+IHtcclxuICAgICAgbGV0IHJlbmFtZWQgPSB7fTtcclxuICAgICAgLy8gR2V0IGFsbCB0aGUga2V5cyBvZiB0aGUgaGVhZGVyc1xyXG4gICAgICBPYmplY3Qua2V5cyhoZWFkZXJzKS5mb3JFYWNoKGtleSA9PiB7XHJcbiAgICAgICAgLy8gbWFrZSB0aGUgaGVhZGVyIHZhbHVlIHRoZSBuZXcga2V5IG9mIHRoZSByZW5hbWVkIG9iamVjdC5cclxuICAgICAgICAvLyB1c2UgdGhlIGtleSBvZiB0aGUgaGVhZGVyIHdpdGggbG9kYXNoIGdldCBmdW5jdGlvbiB0byBnZXQgbmVzdGVkIG9iamVjdHMuXHJcbiAgICAgICAgcmVuYW1lZFtoZWFkZXJzW2tleV1dID0gX2dldChqLCBrZXkpO1xyXG4gICAgICB9KTtcclxuICAgICAgcmV0dXJuIHJlbmFtZWQ7XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbn1cclxuIl19