Skip to content

Instantly share code, notes, and snippets.

@xizhibei
Created January 29, 2016 07:03
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save xizhibei/7a3fd3e31a6c725e04a5 to your computer and use it in GitHub Desktop.
Save xizhibei/7a3fd3e31a6c725e04a5 to your computer and use it in GitHub Desktop.
'use strict';
var _ = require('underscore'),
Excel = require('exceljs'),
Promise = require('bluebird');
exports.getColumns = function (fieldMap, fields) {
var data = _.pick.apply(null, [fieldMap].concat(fields));
return _.map(data, function (v, k) {
return {
key: k,
header: v,
};
});
};
exports.buildSheetFromMongoStream = function (sheet, stream, converter) {
return new Promise(function (resolve, reject) {
stream.on('data', function (data) {
sheet.addRow(converter(data)).commit();
});
stream.on('end', function () {
sheet.commit();
resolve();
});
stream.on('error', reject);
});
};
exports.buildSheet = function () {
return exports.buildSheetFromMongoStream.apply(this, arguments);
};
/**
*
* @param params
* @param params.filename
* @param params.fieldMap
* @param params.fields
* @param params.dateFormat
* @param params.stream
* @param params.converter
*/
exports.exportExcel = function (params) {
var columns = exports.getColumns(params.fieldMap, params.fields);
var workbook = new Excel.stream.xlsx.WorkbookWriter({
filename: params.filename,
});
workbook.creator = '__SYSTEM__';
workbook.created = new Date();
var sheet = workbook.addWorksheet('Sheet1');
sheet.columns = columns;
return exports
.buildSheet(sheet, params.stream, params.converter)
.then(function () {
return workbook.commit();
})
.then(function () {
return params.filename;
});
};
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment