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) ?

140voto

mikemaccana Points 7470

excel4node est un créateur de fichiers Excel natif et maintenu construit à partir de la spécification officielle . Il est similaire à, mais plus entretenu que mxexcel-builder mentionné dans l'autre réponse.

// Require library
var excel = require('excel4node');

// Create a new instance of a Workbook class
var workbook = new excel.Workbook();

// Add Worksheets to the workbook
var worksheet = workbook.addWorksheet('Sheet 1');
var worksheet2 = workbook.addWorksheet('Sheet 2');

// Create a reusable style
var style = workbook.createStyle({
  font: {
    color: '#FF0800',
    size: 12
  },
  numberFormat: '$#,##0.00; ($#,##0.00); -'
});

// Set value of cell A1 to 100 as a number type styled with paramaters of style
worksheet.cell(1,1).number(100).style(style);

// Set value of cell B1 to 300 as a number type styled with paramaters of style
worksheet.cell(1,2).number(200).style(style);

// Set value of cell C1 to a formula styled with paramaters of style
worksheet.cell(1,3).formula('A1 + B1').style(style);

// Set value of cell A2 to 'string' styled with paramaters of style
worksheet.cell(2,1).string('string').style(style);

// Set value of cell A3 to true as a boolean type styled with paramaters of style but with an adjustment to the font size.
worksheet.cell(3,1).bool(true).style(style).style({font: {size: 14}});

workbook.write('Excel.xlsx');

64voto

Jamaica Geek Points 1507

Je viens de trouver une solution simple. Cela fonctionne -

Créez simplement un fichier avec des tabulations comme délimiteurs (similaire au CSV mais remplacez la virgule par une tabulation). Enregistrez-le avec l'extension .XLS . Le fichier peut être ouvert dans Excel.

Un peu de code pour aider

var fs = require('fs');
var writeStream = fs.createWriteStream("file.xls");

var header="Sl No"+"\t"+" Age"+"\t"+"Name"+"\n";
var row1 = "0"+"\t"+" 21"+"\t"+"Rob"+"\n";
var row2 = "1"+"\t"+" 22"+"\t"+"bob"+"\n";

writeStream.write(header);
writeStream.write(row1);
writeStream.write(row2);

writeStream.close();

Cela crée le fichier au format XLS. Cela ne fonctionne pas si vous essayez XLSX au lieu de XLS .

28voto

defraggled Points 49

Bien que cette question ait plusieurs réponses, elles sont peut-être aujourd'hui un peu dépassées.

Les nouveaux lecteurs préféreront peut-être considérer le xlsx ou "sheetsJS". paquet qui semble maintenant être de loin le paquet de nœuds le plus populaire pour ce cas d'utilisation.

La meilleure réponse actuelle recommande excel4node , qui semble assez bon - mais ce dernier paquet semble moins maintenu (et beaucoup moins populaire) que le premier.

Répondre directement à la question, en utilisant xlsx :

const XLSX = require('xlsx');

/* create a new blank workbook */
const wb = XLSX.utils.book_new();

// Do stuff, write data
//
//

// write the workbook object to a file
XLSX.writeFile(workbook, 'out.xlsx');

25voto

Hesham Yassin Points 362

Utilice msexcel-builder . Installez-le avec :

npm install msexcel-builder

Entonces:

// Create a new workbook file in current working-path 
var workbook = excelbuilder.createWorkbook('./', 'sample.xlsx')

// Create a new worksheet with 10 columns and 12 rows 
var sheet1 = workbook.createSheet('sheet1', 10, 12);

// Fill some data 
sheet1.set(1, 1, 'I am title');
for (var i = 2; i < 5; i++)
  sheet1.set(i, 1, 'test'+i);

// Save it 
workbook.save(function(ok){
  if (!ok) 
    workbook.cancel();
  else
    console.log('congratulations, your workbook created');
});

19voto

Frosty Z Points 8935

Vous devez vérifier ExcelJS

Fonctionne avec les formats CSV et XLSX.

Idéal pour lire/écrire des flux XLSX. Je l'ai utilisé pour transmettre un téléchargement XLSX à un objet de réponse Express, en gros comme ceci :

app.get('/some/route', function(req, res) {
  res.writeHead(200, {
    'Content-Disposition': 'attachment; filename="file.xlsx"',
    'Transfer-Encoding': 'chunked',
    'Content-Type': 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'
  })
  var workbook = new Excel.stream.xlsx.WorkbookWriter({ stream: res })
  var worksheet = workbook.addWorksheet('some-worksheet')
  worksheet.addRow(['foo', 'bar']).commit()
  worksheet.commit()
  workbook.commit()
}

Fonctionne très bien pour les fichiers volumineux, bien mieux que excel4node (utilisation énorme de la mémoire et crash du processus Node "out of memory" après presque 5 minutes pour un fichier contenant 4 millions de cellules dans 20 feuilles) car ses capacités de streaming sont beaucoup plus limitées (ne permet pas de "commit()" les données pour récupérer les morceaux dès qu'ils peuvent être générés)

Voir aussi cette réponse SO .

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