120 votes

Comment créer un fichier Excel avec Nodejs ?

Je suis un programmeur nodejs . J'ai maintenant un tableau de données que je veux enregistrer au format Excel. Comment dois-je m'y prendre ?

J'ai trouvé quelques bibliothèques Node. Mais la plupart d'entre elles sont des analyseurs Excel plutôt que des rédacteurs Excel. J'utilise un serveur Linux. J'ai donc besoin de quelque chose qui peut fonctionner sur Linux. S'il vous plaît laissez-moi savoir s'il y a des bibliothèques utiles que vous connaissez.

Ou existe-t-il un moyen de convertir un fichier CSV en fichier xls (par programmation) ?

10voto

Nilesh Pawar Points 567

Utilisation de fs nous pouvons créer un fichier Excel/CSV à partir de données JSON.

Étape 1 : Stocker les données JSON dans une variable (ici, c'est en jsn variable).

Étape 2 : Créer une variable de type chaîne vide (ici c'est données ).

Étape 3 : Ajouter chaque propriété de jsn à des données variables de type chaîne, tandis que l'ajout de put '\t' entre 2 cellules et ' \n après avoir complété la ligne.

Code :

var fs = require('fs');

var jsn = [{
    "name": "Nilesh",
    "school": "RDTC",
    "marks": "77"
   },{
    "name": "Sagar",
    "school": "RC",
    "marks": "99.99"
   },{
    "name": "Prashant",
    "school": "Solapur",
    "marks": "100"
 }];

var data='';
for (var i = 0; i < jsn.length; i++) {
    data=data+jsn[i].name+'\t'+jsn[i].school+'\t'+jsn[i].marks+'\n';
 }
fs.appendFile('Filename.xls', data, (err) => {
    if (err) throw err;
    console.log('File created');
 });

Output

9voto

Maciej Jankowski Points 538

XLSx dans le nouvel Office n'est qu'une collection zippée de fichiers XML et autres. Vous pouvez donc le générer et le zipper en conséquence.

Bonus : vous pouvez créer un très beau modèle avec des styles et ainsi de suite :

  1. Créez un modèle dans "votre tableur préféré".
  2. Enregistrez-la en tant que ODS ou XLSx
  3. Décompressez le contenu
  4. Utilisez-le comme base et remplir content.xml (ou xl/worksheets/sheet1.xml ) avec vos données
  5. Fermez le tout avant de servir

Cependant j'ai trouvé ODS (openoffice) beaucoup plus accessible (excel peut toujours l'ouvrir), voici ce que j'ai trouvé en content.xml

<table:table-row table:style-name="ro1">
    <table:table-cell office:value-type="string" table:style-name="ce1">
        <text:p>here be a1</text:p>
    </table:table-cell>
    <table:table-cell office:value-type="string" table:style-name="ce1">
        <text:p>here is b1</text:p>
    </table:table-cell>
    <table:table-cell table:number-columns-repeated="16382"/>
</table:table-row>

6voto

rajpoot rehan Points 199

installer exceljs

npm i exceljs --save

importation exceljs

var Excel = require('exceljs');
var workbook = new Excel.Workbook();

créer un classeur

var options = {
                filename: __dirname+'/Reports/'+reportName,
                useStyles: true,
                useSharedStrings: true
            };

            var workbook = new Excel.stream.xlsx.WorkbookWriter(options);

après avoir créé la feuille de travail

var worksheet = workbook.addWorksheet('Rate Sheet',{properties:{tabColor:{argb:'FFC0000'}}});

dans le tableau worksheet.column vous passez le nom de la colonne dans l'en-tête et la clé du tableau passe dans la clé

worksheet.columns = [
            { header: 'column name', key: 'array key', width: 35},
            { header: 'column name', key: 'array key', width: 35},
            { header: 'column name', key: 'array key', width: 20},

            ];

après avoir utilisé la boucle forEach, ajouter les lignes une par une dans le fichier exel.

array.forEach(function(row){ worksheet.addRow(row); })

Vous pouvez également effectuer une boucle sur chaque ligne et cellule de l'exel.

worksheet.eachRow(function(row, rowNumber) {
    console.log('Row ' + rowNumber + ' = ' + JSON.stringify(row.values));
});
row.eachCell(function(cell, colNumber) {
    console.log('Cell ' + colNumber + ' = ' + cell.value);
});

4voto

tmanolatos Points 109

Ou - en s'appuyant sur la réponse de @Jamaica Geek, en utilisant Express - pour éviter d'enregistrer et de lire un fichier :

  res.attachment('file.xls');

  var header="Sl No"+"\t"+" Age"+"\t"+"Name"+"\n";
  var row1 = [0,21,'BOB'].join('\t')
  var row2 = [0,22,'bob'].join('\t');

  var c = header + row1 + row2;
  return res.send(c);

3voto

Seenu69 Points 148

Utilisez la bibliothèque exceljs pour créer et écrire dans des feuilles excel existantes.

Vous pouvez consulter ce tutoriel pour une explication détaillée.

enlace

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X