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?

17
demandé sur Shin 2016-08-27 06:29:56

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.

  1. é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.
  2. 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é.

9
répondu Chewtoy 2017-05-23 12:10:30

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.jsxlsx/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

29
répondu luwojtaszek 2018-08-23 20:24:01

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

5
répondu debugger 2018-07-05 11:08:51

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

1
répondu Pardeep Jain 2017-09-11 00:23:50

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.

0
répondu John Langford 2017-06-08 12:48:37

XLSX bibliothèque pour convertir JSON dans le fichier XLS et télécharger

Démo

Source 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

0
répondu Code Spy 2018-09-20 05:10:47