datapumps
Version:
Node.js ETL (Extract, Transform, Load) toolkit for easy data import, export or transfer between systems.
70 lines (65 loc) • 2.47 kB
JavaScript
(function() {
var ExcelWriterMixin, excel4node;
excel4node = require('excel4node');
ExcelWriterMixin = function(onMixin) {
return function(target) {
target._excel = {};
target.createWorkbook = function(path) {
if (this._excel.workbook != null) {
throw new Error('Workbook already created');
}
this._excel.workbook = new excel4node.WorkBook();
this._excel.path = path;
this._excel.boldStyle = this._excel.workbook.Style();
this._excel.boldStyle.Font.Bold();
return this._excel.workbook;
};
target.createWorksheet = function(name) {
if (this._excel.workbook == null) {
throw new Error('Use createWorkbook before creating worksheet');
}
this._excel.worksheet = this._excel.workbook.WorkSheet(name);
return this._excel.currentRow = 1;
};
target.currentWorksheet = function() {
return this._excel.worksheet;
};
target.writeHeaders = function(headers) {
var header, index, _i, _len;
if (this._excel.worksheet == null) {
throw new Error('Use createWorksheet before writing headers');
}
if (this._excel.currentRow !== 1) {
throw new Error('Use writeHeaders before writing any rows to the worksheet');
}
for (index = _i = 0, _len = headers.length; _i < _len; index = ++_i) {
header = headers[index];
this._writeHeader(index, header);
}
this._excel.currentRow = 2;
return this;
};
target._writeHeader = function(index, header) {
return this._excel.worksheet.Cell(1, index + 1).String(header).Style(this._excel.boldStyle);
};
target.writeRow = function(columns) {
var index, value, _i, _len;
if (this._excel.worksheet == null) {
throw new Error('Use createWorksheet before writing rows');
}
for (index = _i = 0, _len = columns.length; _i < _len; index = ++_i) {
value = columns[index];
this._excel.worksheet.Cell(this._excel.currentRow, index + 1).String(value);
}
return this._excel.currentRow++;
};
target.on('end', function() {
if (target._excel.workbook != null) {
return target._excel.workbook.write(target._excel.path);
}
});
return onMixin.apply(target, []);
};
};
module.exports = ExcelWriterMixin;
}).call(this);