Node.JS Excel-Export
Nice little module that is assisting when creating excel exports from datasets. It takes normal array-of-objects dataset plus a json report specification and builds excel(.xlsx) file. It supports styling and re-formating of the data on the fly. Check the example usage for more information.
Installation
npm install node-excel-export
Usage
const excel = ; // You can define styles as json object// More info: https://github.com/protobi/js-xlsx#cell-stylesconst styles = headerDark: fill: fgColor: rgb: 'FF000000' font: color: rgb: 'FFFFFFFF' sz: 14 bold: true underline: true cellPink: fill: fgColor: rgb: 'FFFFCCFF' cellGreen: fill: fgColor: rgb: 'FF00FF00' ; //Array of objects representing heading rows (very top)const heading = value: 'a1' style: stylesheaderDark value: 'b1' style: stylesheaderDark value: 'c1' style: stylesheaderDark 'a2' 'b2' 'c2' // <-- It can be only values; //Here you specify the export structureconst specification = customer_name: // <- the key should match the actual data key displayName: 'Customer' // <- Here you specify the column header headerStyle: stylesheaderDark // <- Header style { // <- style renderer function // if the status is 1 then color in green else color in red // Notice how we use another cell value to style the current one return rowstatus_id == 1 ? stylescellGreen : fill: fgColor: rgb: 'FFFF0000'; // <- Inline cell style is possible } width: 120 // <- width in pixels status_id: displayName: 'Status' headerStyle: stylesheaderDark { // <- Renderer function, you can access also any row.property return value == 1 ? 'Active' : 'Inactive'; } width: '10' // <- width in chars (when the number is passed as string) note: displayName: 'Description' headerStyle: stylesheaderDark cellStyle: stylescellPink // <- Cell style width: 220 // <- width in pixels // The data set should have the following shape (Array of Objects)// The order of the keys is irrelevant, it is also irrelevant if the// dataset contains more fields as the report is build based on the// specification provided above. But you should have all the fields// that are listed in the report specificationconst dataset = customer_name: 'IBM' status_id: 1 note: 'some note' misc: 'not shown' customer_name: 'HP' status_id: 0 note: 'some note' customer_name: 'MS' status_id: 0 note: 'some note' misc: 'not shown' // Define an array of merges. 1-1 = A:1// The merges are independent of the data.// A merge will overwrite all data _not_ in the top-left cell.const merges = start: row: 1 column: 1 end: row: 1 column: 10 start: row: 2 column: 1 end: row: 2 column: 5 start: row: 2 column: 6 end: row: 2 column: 10 // Create the excel report.// This function will return Bufferconst report = excel; // You can then return this straightres; // This is sails.js specific (in general you need to set headers)return res; // OR you can save this buffer to the disk by creating a file.
Contributors
Contributor | Contribution |
---|---|
@jbogatay | Allow null values |
@frenchbread | Example update |
@fhemberger | Undefined header style |
@zeg-io Tony Archer | Cell Merging |