Como criar um arquivo Excel com Nodejs?

Sou um programador do nodejs . Agora eu tenho uma tabela de dados que eu quero salvar no formato de arquivo Excel . Como faço isto ?

Encontrei algumas bibliotecas de nós . Mas a maioria deles são Parsers Excel ao invés de escritores Excel .Estou a usar um servidor Linux . Portanto, precisa de algo que possa correr no Linux . Por favor, avise-me se houver alguma biblioteca útil que você saiba .

ou há alguma maneira de converter um ficheiro CSV para um ficheiro xls ( programaticamente ) ?

Author: geeky_monster, 2013-07-03

7 answers

O Excel4node é um criador nativo de ficheiros do Excel , mantido a partir da especificação oficial . É semelhante, mas mais mantido do que mxexcel-builder mencionado na outra resposta.

// 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');
 45
Author: mikemaccana, 2017-03-10 15:43:31
Descobri uma saída simples . Isto funciona -

Basta criar um ficheiro com páginas como delimitadores (semelhante ao CSV, mas substituir vírgula Por Tab ). Grava com extensão .XLS . O arquivo pode ser aberto no Excel .

Algum código para ajudar ...
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();

Isto cria o ficheiro no formato de ficheiro XLS . Não funciona se você tentar XLSX em vez de XLS .

 36
Author: geeky_monster, 2013-07-03 15:22:33

Utilizar msexcel-builder . Instale-o com:

npm install msexcel-builder

Depois:

// 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');
});
 19
Author: Hesham Yassin, 2017-03-10 15:05:06

O XLSx no novo escritório é apenas uma colecção fechada de XML e outros ficheiros. Então você pode gerar isso e fechá-lo de acordo.

Bônus: você pode criar um modelo muito bom com estilos e assim por diante:

  1. crie um modelo em 'o seu programa de planilha favorito'
  2. Guarde-o como ODS ou XLSx
  3. Desaperte o conteúdo
  4. Use-o como base e preencha content.xml (ou xl/worksheets/sheet1.xml) com os seus dados
  5. fecha tudo antes servindo
No entanto encontrei ODS (openoffice) muito mais acessível( excel ainda pode abri-lo), aqui está o que encontrei em 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>
 7
Author: Maciej Jankowski, 2014-11-10 22:21:24

Devias verificar ExcelJS

Funciona com os formatos CSV e XLSX.

Óptimo para ler/escrever fluxos XLSX. Usei-o para transmitir um download XLSX para um objecto de resposta expressa, basicamente assim:

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()
}

Funciona muito bem para ficheiros grandes, tem um desempenho muito melhor do que excel4node (tem uma enorme utilização de memória e processo de nó "fora da memória" estoirar após quase 5 minutos para um ficheiro que contém 4 milhões de células em 20 folhas) desde a sua transmissão as capacidades são muito mais limitadas (não permite que dados de "commit ()" recuperem blocos assim que possam ser gerados)

Veja também isto assim responde.

 4
Author: Frosty Z, 2017-12-08 09:48:24

Or-build on @Jamaica Geek's answer, using Express-to avoid saving and reading a file:

  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);
 3
Author: tmanolatos, 2018-01-11 08:14:50

Usando o pacote fs podemos criar o ficheiro excel / CSV a partir dos dados JSON.

Passo 1: guardar os dados JSON numa variável (aqui está em JSN variável).

Passo 2: Criar uma variável de texto vazia (aqui está Dados).

Passo 3: adiciona todas as propriedades de jsn ao texto de dados variáveis, enquanto adiciona put '\t' entre 2 células e '\n ' Após completar a linha.

Código :

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

 1
Author: Nilesh Pawar, 2017-11-02 10:31:53