Zaimplementowałem program Excel Export przy użyciu tych dwóch bibliotek: file-server i xlsx.
Można go dodać do istniejącego projektu z: przykład
npm install file-saver --save
npm install xlsx --save
ExcelService:
import { Injectable } from '@angular/core';
import * as FileSaver from 'file-saver';
import * as XLSX from 'xlsx';
const EXCEL_TYPE = 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=UTF-8';
const EXCEL_EXTENSION = '.xlsx';
@Injectable()
export class ExcelService {
constructor() { }
public exportAsExcelFile(json: any[], excelFileName: string): void {
const worksheet: XLSX.WorkSheet = XLSX.utils.json_to_sheet(json);
const workbook: XLSX.WorkBook = { Sheets: { 'data': worksheet }, SheetNames: ['data'] };
const excelBuffer: any = XLSX.write(workbook, { bookType: 'xlsx', type: 'buffer' });
this.saveAsExcelFile(excelBuffer, excelFileName);
}
private saveAsExcelFile(buffer: any, fileName: string): void {
const data: Blob = new Blob([buffer], {
type: EXCEL_TYPE
});
FileSaver.saveAs(data, fileName + '_export_' + new Date().getTime() + EXCEL_EXTENSION);
}
}
można znaleźć przykład działa na moim github: https://github.com/luwojtaszek/ngx-excel-export
[Styling komórki ]
Jeśli chcesz uporządkować komórki (np. dodaj zawijanie tekstu, wyśrodkowanie zawartości komórki itp.) możesz to zrobić, używając bibliotek w stylu xlsx i xlsx.
1) Dodaj wymagane zależności
npm install file-saver --save
npm install xlsx --save
npm install xlsx-style --save
2) zastąpić plik xlsx cpexcel.js w stylu katalogu gmina.
Z powodu tego błędu: https://github.com/protobi/js-xlsx/issues/78 wymagane jest zastąpienie xlsx-style/dist/cpexcel.js
przez xlsx/dist/cpexcel.js
w katalogu node_modules.
3) Wdrożenie ExcelService
import { Injectable } from '@angular/core';
import * as FileSaver from 'file-saver';
import * as XLSX from 'xlsx';
import * as XLSXStyle from 'xlsx-style';
const EXCEL_TYPE = 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=UTF-8';
const EXCEL_EXTENSION = '.xlsx';
@Injectable()
export class ExcelService {
constructor() { }
public exportAsExcelFile(json: any[], excelFileName: string): void {
const worksheet: XLSX.WorkSheet = XLSX.utils.json_to_sheet(json);
this.wrapAndCenterCell(worksheet.B2);
const workbook: XLSX.WorkBook = { Sheets: { 'data': worksheet }, SheetNames: ['data'] };
// Use XLSXStyle instead of XLSX write function which property writes cell styles.
const excelBuffer: any = XLSXStyle.write(workbook, { bookType: 'xlsx', type: 'buffer' });
this.saveAsExcelFile(excelBuffer, excelFileName);
}
private wrapAndCenterCell(cell: XLSX.CellObject) {
const wrapAndCenterCellStyle = { alignment: { wrapText: true, vertical: 'center', horizontal: 'center' } };
this.setCellStyle(cell, wrapAndCenterCellStyle);
}
private setCellStyle(cell: XLSX.CellObject, style: {}) {
cell.s = style;
}
private saveAsExcelFile(buffer: any, fileName: string): void {
const data: Blob = new Blob([buffer], {
type: EXCEL_TYPE
});
FileSaver.saveAs(data, fileName + '_export_' + new Date().getTime() + EXCEL_EXTENSION);
}
}
przykład robocza: https://github.com/luwojtaszek/ngx-excel-export/tree/xlsx-style
Istnieje kilka sposobów, aby wyeksportować do pliku CSV lub Excel; fakt, że używasz Angular jest prawdopodobnie nieistotny. Ważniejsze będzie to, jakiej przeglądarki używasz, ponieważ tworzenie plików po stronie klienta nie jest bardzo jednolite w różnych przeglądarkach. –
Używam przeglądarki Chrome, jakiejkolwiek wtyczki innej firmy, której mogę użyć do wykonania tego zadania? – Vicheanak
Możesz używać wtyczki ngCsv - Eksportuj do CSV używając AngularJS. Link tutaj: http://ngmodules.org/modules/ng-csv –