Comment exporter JSON vers CSV ou Excel-Angular 2
Dire que mon json est comme ceci:
var readyToExport = [
{id: 1, name: 'a'},
{id: 2, name: 'b'},
{id: 3, name: 'c'}
];
Comment puis-je exporter ce JSON dans le fichier CSV ou Excel dans Angular2?
le navigateur que j'utilise Est Chrome.
peut-être Angular2 n'est pas pertinent, cependant, y a-t-il un plugin tiers qui peut être injecté dans Angular2 et effectuer cette tâche?
6 réponses
le fait que vous utilisez Angular n'est pas si important, bien qu'il s'ouvre pour un peu plus de libs.
vous avez essentiellement deux options.
- écrire votre propre convertisseur json2csv, ce qui n'est pas si difficile. Vous avez déjà le JSON, que vous pouvez tourner vers les objets JS, puis itérer juste sur chaque objet et obtenir le champ correct pour la colonne courante.
- Vous pouvez utiliser une lib comme https://github.com/zemirco/json2csv qui le fait pour vous.
aussi, cette question répond probablement à votre question comment convertir JSON en format CSV et stocker dans une variable
CSV est le format de base pour les programmes de type Excel. Ne pas aller jouer avec xls (x) à moins que vous ne devez vraiment. Il fera de votre cerveau blessé.
j'ai implémenté excel export en utilisant ces deux bibliothèques: serveur de fichiers et xlsx.
Vous pouvez l'ajouter à votre projet existant avec:
npm install file-saver --save
npm install xlsx --save
ExcelService example:
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);
}
}
Vous pouvez trouver des exemple de travail sur mon github: https://github.com/luwojtaszek/ngx-excel-export
[Style les cellules]
Si vous voulez le style des cellules (f.e. ajouter du texte emballage, centrage du contenu de la cellule,etc.) vous pouvez le faire en utilisant des bibliothèques de style xlsx et xlsx.
1) Ajouter des dépendances
npm install file-saver --save
npm install xlsx --save
npm install xlsx-style --save
2) Remplacer cpexcel.js fichier en xlsx de style répertoire dist.
à Cause de ce bug: https://github.com/protobi/js-xlsx/issues/78 il est nécessaire de remplacer xlsx-style/dist/cpexcel.js
xlsx/dist/cpexcel.js
dans le répertoire node_modules.
3) Implémenter 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);
}
}
exemple pratique: https://github.com/luwojtaszek/ngx-excel-export/tree/xlsx-style
[mise à JOUR - 23.08.2018]
cela fonctionne très bien avec le plus récent angle 6.
yarn install xlsx --save
ExcelService example:
import {Injectable} from '@angular/core';
import * as XLSX from 'xlsx';
@Injectable()
export class ExcelService {
constructor() {
}
static toExportFileName(excelFileName: string): string {
return `${excelFileName}_export_${new Date().getTime()}.xlsx`;
}
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']};
XLSX.writeFile(workbook, ExcelService.toExportFileName(excelFileName));
}
}
j'ai mis à jour mon repo: https://github.com/luwojtaszek/ngx-excel-export
Vous pouvez utiliser XLSX bibliothèque pour Angular2+.
Suivant le guide fourni il y a:
public export() {
const readyToExport = [
{id: 1, name: 'a'},
{id: 2, name: 'b'},
{id: 3, name: 'c'}
];
const workBook = XLSX.utils.book_new(); // create a new blank book
const workSheet = XLSX.utils.json_to_sheet(readyToExport);
XLSX.utils.book_append_sheet(workBook, workSheet, 'data'); // add the worksheet to the book
XLSX.writeFile(workBook, 'temp.xlsx'); // initiate a file download in browser
}
Testé avec des angulaires 5.2.0 et XLSX 0.13.1
vous pouvez exporter votre JSON au format CSV en utilisant primeng basé sur angular2, en dehors du format CSV il y a trop d'optoin disponibles pour appliquer sur JSON,
pour convertir votre JSON en format CSV voir ici
lien mis à jour https://www.primefaces.org/primeng/#/datatable/export
j'ai utilisé la bibliothèque angular2-csv pour ceci:https://www.npmjs.com/package/angular2-csv
cela a très bien fonctionné pour moi à une exception près. Il y a un problème connu (https://github.com/javiertelioz/angular2-csv/issues/10) avec le caractère BOM s'insérant au début du fichier ce qui provoque l'affichage d'un caractère garbage avec ma version D'Excel.
XLSX bibliothèque pour convertir JSON dans le fichier XLS et télécharger
DémoSource lien
Méthode
Inclure la bibliothèque
<script type="text/javascript" src="//unpkg.com/xlsx/dist/xlsx.full.min.js"></script>
Code JavaScript
var createXLSLFormatObj = [];
/* XLS Head Columns */
var xlsHeader = ["EmployeeID", "Full Name"];
/* XLS Rows Data */
var xlsRows = [{
"EmployeeID": "EMP001",
"FullName": "Jolly"
},
{
"EmployeeID": "EMP002",
"FullName": "Macias"
},
{
"EmployeeID": "EMP003",
"FullName": "Lucian"
},
{
"EmployeeID": "EMP004",
"FullName": "Blaze"
},
{
"EmployeeID": "EMP005",
"FullName": "Blossom"
},
{
"EmployeeID": "EMP006",
"FullName": "Kerry"
},
{
"EmployeeID": "EMP007",
"FullName": "Adele"
},
{
"EmployeeID": "EMP008",
"FullName": "Freaky"
},
{
"EmployeeID": "EMP009",
"FullName": "Brooke"
},
{
"EmployeeID": "EMP010",
"FullName": "FreakyJolly.Com"
}
];
createXLSLFormatObj.push(xlsHeader);
$.each(xlsRows, function(index, value) {
var innerRowData = [];
$("tbody").append('<tr><td>' + value.EmployeeID + '</td><td>' + value.FullName + '</td></tr>');
$.each(value, function(ind, val) {
innerRowData.push(val);
});
createXLSLFormatObj.push(innerRowData);
});
/* File Name */
var filename = "FreakyJSON_To_XLS.xlsx";
/* Sheet Name */
var ws_name = "FreakySheet";
if (typeof console !== 'undefined') console.log(new Date());
var wb = XLSX.utils.book_new(),
ws = XLSX.utils.aoa_to_sheet(createXLSLFormatObj);
/* Add worksheet to workbook */
XLSX.utils.book_append_sheet(wb, ws, ws_name);
/* Write workbook and Download */
if (typeof console !== 'undefined') console.log(new Date());
XLSX.writeFile(wb, filename);
if (typeof console !== 'undefined') console.log(new Date());
vous pouvez vous référer à ce code pour l'utiliser dans L'angle 2 Composante