How to create an Excel File with Nodejs?

前端 未结 10 846
攒了一身酷
攒了一身酷 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:34

    excel4node is a maintained, native Excel file creator built from the official specification. It's similar to, but more maintained than mxexcel-builder mentioned in the other answer.

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

    XLSx in the new Office is just a zipped collection of XML and other files. So you could generate that and zip it accordingly.

    Bonus: you can create a very nice template with styles and so on:

    1. Create a template in 'your favorite spreadsheet program'
    2. Save it as ODS or XLSx
    3. Unzip the contents
    4. Use it as base and fill content.xml (or xl/worksheets/sheet1.xml) with your data
    5. Zip it all before serving

    However I found ODS (openoffice) much more approachable (excel can still open it), here is what I found in 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>
    
    0 讨论(0)
  • 2020-11-30 17:45

    install exceljs

    npm i exceljs --save
    

    import exceljs

    var Excel = require('exceljs');
    var workbook = new Excel.Workbook();
    

    create workbook

    var options = {
                    filename: __dirname+'/Reports/'+reportName,
                    useStyles: true,
                    useSharedStrings: true
                };
    
                var workbook = new Excel.stream.xlsx.WorkbookWriter(options);
    

    after create worksheet

    var worksheet = workbook.addWorksheet('Rate Sheet',{properties:{tabColor:{argb:'FFC0000'}}});
    

    in worksheet.column array you pass column name in header and array key pass in key

    worksheet.columns = [
                { header: 'column name', key: 'array key', width: 35},
                { header: 'column name', key: 'array key', width: 35},
                { header: 'column name', key: 'array key', width: 20},
    
                ];
    

    after using forEach loop append row one by one in exel file

    array.forEach(function(row){ worksheet.addRow(row); })
    

    you can also perfome loop on each exel row and cell

    worksheet.eachRow(function(row, rowNumber) {
        console.log('Row ' + rowNumber + ' = ' + JSON.stringify(row.values));
    });
    row.eachCell(function(cell, colNumber) {
        console.log('Cell ' + colNumber + ' = ' + cell.value);
    });
    
    0 讨论(0)
  • 2020-11-30 17:51

    Although this question has several answers, they may now be a little dated.

    New readers may prefer to consider the xlsx or "sheetsJS" package, which now seems to now be by far the most popular node package for this use case.

    The current top answer recommends excel4node , which does look quite good - but the latter package seems less maintained (and far less popular) than the former.

    Answering the question directly, using 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');
    
    0 讨论(0)
提交回复
热议问题