sheetjs node excel4node example create excel node.js file-io export-to-excel npm

excel - node - sheetjs



¿Cómo crear un archivo de Excel con Nodejs? (7)

Soy un programador de nodejs. Ahora tengo una tabla de datos que quiero guardar en formato de archivo de Excel. Cómo voy a hacer esto ?

Encontré algunas bibliotecas de Nodo. Pero la mayoría de ellos son analizadores de Excel en lugar de Excel Writers. Estoy usando un servidor Linux. Por lo tanto, necesita algo que pueda ejecutarse en Linux. Por favor, avíseme si hay bibliotecas útiles que conozca.

¿O hay alguna manera de convertir un archivo CSV a un archivo xls (programáticamente)?


Acabo de imaginar una salida simple. Esto funciona -

Simplemente cree un archivo con pestañas como delimitadores (similar a CSV, pero reemplace la coma con la pestaña). Guárdelo con la extensión .XLS. El archivo se puede abrir en Excel.

Algún código para ayudar -

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

Esto crea el archivo en formato de archivo XLS. No funciona si prueba XLSX en lugar de XLS.


Debes consultar ExcelJS

Funciona con formatos CSV y XLSX.

Ideal para leer / escribir secuencias XLSX. Lo he usado para transmitir una descarga de XLSX a un objeto de respuesta Express, básicamente así:

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 muy bien para archivos grandes, funciona mucho mejor que excel4node (tiene un gran uso de memoria y un proceso de nodo "sin memoria" se bloquea después de casi 5 minutos para un archivo que contiene 4 millones de celdas en 20 hojas) ya que sus capacidades de transmisión son mucho más limitadas ( no permite "commit ()" de datos para recuperar fragmentos tan pronto como puedan generarse)

Ver también esta respuesta SO .


O bien, compila la respuesta de @Jamaica Geek, usando Express, para evitar guardar y leer un archivo:

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


Usando el paquete fs podemos crear un archivo excel / CSV a partir de datos JSON.

Paso 1: almacene datos JSON en una variable (aquí está en la variable jsn ).

Paso 2: Crea una variable de cadena vacía (aquí están los datos ).

Paso 3: añada todas las propiedades de jsn a los datos variables de cadena, mientras que añaden ''/t'' entre 2 celdas y ''/ n'' después de completar la fila.

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''); });


Use mxexcel-builder . Instalarlo con:

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''); });


XLSx en la nueva Office es solo una colección comprimida de XML y otros archivos. Entonces podrías generar eso y comprimirlo en consecuencia.

Bonificación: puedes crear una plantilla muy bonita con estilos y así sucesivamente:

  1. Crea una plantilla en ''tu programa de hoja de cálculo favorito''
  2. Guárdelo como ODS o XLSx
  3. Descomprimir los contenidos
  4. Úselo como base y rellene content.xml (o xl/worksheets/sheet1.xml ) con sus datos
  5. Zip todo antes de servir

Sin embargo, encontré que ODS (openoffice) es mucho más accesible (Excel aún puede abrirlo), esto es lo que encontré 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>


excel4node es un creador de archivos Excel mantenido y nativo creado a partir de la especificación oficial . Es similar a, pero más mantenido que mxexcel-builder mencionado en la otra respuesta.

// 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'');