How to create an Excel File with Nodejs?

前端 未结 10 845
攒了一身酷
攒了一身酷 2020-11-30 17:17

I am a nodejs programmer . Now I have a table of data that I want to save in Excel File format . How do I go about doing this ?

I found a few Node libraries . But m

相关标签:
10条回答
  • 2020-11-30 17:24

    You should check ExcelJS

    Works with CSV and XLSX formats.

    Great for reading/writing XLSX streams. I've used it to stream an XLSX download to an Express response object, basically like this:

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

    Works great for large files, performs much better than excel4node (got huge memory usage & Node process "out of memory" crash after nearly 5 minutes for a file containing 4 million cells in 20 sheets) since its streaming capabilities are much more limited (does not allows to "commit()" data to retrieve chunks as soon as they can be generated)

    See also this SO answer.

    0 讨论(0)
  • 2020-11-30 17:27

    Use msexcel-builder. Install it with:

    npm install msexcel-builder
    

    Then:

    // 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');
    });
    
    0 讨论(0)
  • 2020-11-30 17:27

    Use exceljs library for creating and writing into existing excel sheets.

    You can check this tutorial for detailed explanation.

    link

    0 讨论(0)
  • 2020-11-30 17:28

    Using fs package we can create excel/CSV file from JSON data.

    Step 1: Store JSON data in a variable (here it is in jsn variable).

    Step 2: Create empty string variable(here it is data).

    Step 3: Append every property of jsn to string variable data, while appending put '\t' in-between 2 cells and '\n' after completing the row.

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

    0 讨论(0)
  • 2020-11-30 17:31

    I just figured a simple way out . This works -

    Just create a file with Tabs as delimiters ( similar to CSV but replace comma with Tab ). Save it with extension .XLS . The file can be opened in Excel .

    Some code to help --

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

    This creates the file in XLS file format . It doesnt work if you try XLSX instead of XLS .

    0 讨论(0)
  • 2020-11-30 17:33

    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);
    
    0 讨论(0)
提交回复
热议问题