如何使用Nodejs创buildExcel文件?

我是一个nodejs程序员。 现在我有一个我想要以Excel文件格式保存的数据表。 我怎么去做这个?

我find了一些Node库。 但其中大多数是Excelparsing器,而不是Excel作家。我正在使用Linux服务器。 因此需要一些可以在Linux上运行的东西。 请让我知道是否有任何有用的图书馆,你知道的。

或者有没有一种方法可以将CSV文件转换为xls文件(以编程方式)?

excel4node是一个维护的,本地Excel文件的创build者从官方规范build立 。 这与其他答案中提到的mxexcel-builder相似,但更为维护。

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

我只是想出一个简单的出路。 这个工程 –

只需创build一个带有制表符的文件作为分隔符(类似于CSV,但用Tabreplace逗号)。 用扩展名.XLS保存。 该文件可以在Excel中打开。

一些代码来帮助 –

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

这将以XLS文件格式创build文件。 如果您尝试使用XLSX而不使用XLS,则该function无效。

使用msexcel-builder 。 安装它:

 npm install msexcel-builder 

然后:

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

新Office中的XLSx只是XML和其他文件的压缩集合。 所以你可以生成并相应地压缩它。

奖金:你可以创build一个非常漂亮的模板样式等等:

  1. 在“您最喜欢的电子表格程序”中创build一个模板
  2. 将其另存为ODS或XLSx
  3. 解压缩内容
  4. 用它作为基础,并用你的数据填充content.xml (或者xl/worksheets/sheet1.xml
  5. 邮寄之前,所有的服务

然而,我发现ODS(openoffice)更加平易近人(excel仍然可以打开它),这里是我在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> 

或者 – build立@Jamaica Geek的答案,使用Express – 避免保存和读取文件:

  res.attachment('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"; var c = header + row1 + row2; return res.send(c); 

你应该检查ExcelJS

适用于CSV和XLSX格式。

非常适合读/写XLSXstream。 我用它来将XLSX下载stream式传输到Express响应对象,基本上是这样的:

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

适用于大文件,比excel4node执行效果要好得多 (由于其stream式传输function受限得多,所以在将近20分钟内有4百万个文件的文件接近5分钟后,内存使用率大大降低)不允许“提交()”数据一旦可以生成就检索块)

另请参阅这个答案 。

使用fs包,我们可以从JSON数据创buildexcel / CSV文件。

第1步:将 JSON数据存储在variables中(这里是jsnvariables)。

第2步:创build空stringvariables(这里是数据 )。

第3步:jsn的每个属性追加到stringvariables数据,并在完成该行之后在2个单元格和\ n之间添加放置'\t'

代码

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

产量