Skip to content

Instantly share code, notes, and snippets.

@knownasilya
Last active August 29, 2015 14:16
Show Gist options
  • Save knownasilya/ad990b7f7bcd125b58f7 to your computer and use it in GitHub Desktop.
Save knownasilya/ad990b7f7bcd125b58f7 to your computer and use it in GitHub Desktop.
create-spreadsheet.js xlsx & workbook wrapper

create-spreadsheet

usage

var createSpreadsheet = require('./create-spreadsheet');

// in an express route..
var sheetBuffer = createSpreadsheet({
  // defaultStyles: {} - styles for the whole workbook
  header: [
    { name: 'Property ID', field: 'id' },
    { name: 'Address', field: 'siteAddress' },
    { name: 'Owner Address', field: 'ownerAddress' },
    { name: 'Owner City', field: 'ownerCity' },
    { name: 'Owner State', field: 'ownerState' },
    { name: 'Owner Zip', field: 'ownerZip' },
    { name: 'Total Value', field: 'totalValue' },
    { name: 'Land Value', field: 'landValue' },
    { name: 'Building Value', field: 'buildingValue' }
  ],
  sheets: [
    {
      name: 'Abutters',
      data: data.abutters
      // can take own `header` option
    }, {
      name: 'Subject Properties',
      data: data.subjects
      // data in the form of [{ id: 1, siteAddress: '..' }, ..]
    }
  ]
});

res.attachment('abutters-' + Date.now() + '.xlsx');
res.set('Content-Type', 'application/octet-stream');
res.send(sheetBuffer);
'use strict';
var xlsx = require('xlsx');
var Workbook = require('workbook');
var headerStyles = { font: { bold: true } };
module.exports = function (options) {
var wb = new Workbook(xlsx);
var header = options.header;
options.sheets.forEach(function (sheet) {
var results = sheet.data.slice();
header = sheet.header || header;
if (header && header.length) {
if (header[0].field) {
results = results.map(function (row) {
return header.map(function (item) {
return row[item.field] || '';
});
});
}
results.unshift(header.map(function (item) {
return { v: item.name, s: headerStyles };
}));
}
wb.addRowsToSheet(sheet.name, results);
});
wb.finalize();
var result = xlsx.write(wb, {
bookType: 'xlsx',
bookSST: false,
type: 'buffer',
defaultCellStyle: options.defaultStyles || {
font: { name: 'Arial', sz: '12' },
fill: {
fgColor: { rgb: 'FFFFFFFF' }
}
}
});
return result;
};
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment