You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

202 lines
6.3 KiB

'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
var _exceljs = require('exceljs/dist/es5/exceljs.browser');
var _exceljs2 = _interopRequireDefault(_exceljs);
var _utils = require('./utils');
var _constants = require('./constants');
var _plugins = require('./plugins');
var _plugins2 = _interopRequireDefault(_plugins);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }
var PLUGIN_FUNCS = ['workbookCreated', 'worksheetCreated', 'worksheetCompleted', 'workcellCreated'];
var DEFAULT_WORKBOOK_OPTIONS = {
views: [{
x: 0, y: 0, width: 10000, height: 20000,
firstSheet: 0, activeTab: 1, visibility: 'visible'
}]
};
var DEFAULT_OPTIONS = {
workbook: DEFAULT_WORKBOOK_OPTIONS,
widthRatio: _constants.WIDTH_RATIO,
plugins: [].concat(_toConsumableArray(Object.values(_plugins2.default)))
};
var Table2Excel = function () {
function Table2Excel() {
var _this = this;
var selector = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'table';
var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
_classCallCheck(this, Table2Excel);
this.tables = Array.from(typeof selector === 'string' ? document.querySelectorAll(selector) : selector);
this.options = Object.assign({}, DEFAULT_OPTIONS, options);
this.plugins = {};
PLUGIN_FUNCS.forEach(function (funName) {
_this.plugins[funName] = _this.options.plugins.filter(function (plugin) {
return plugin[funName];
}).map(function (plugin) {
return plugin[funName];
});
});
this.pluginContext = {};
}
_createClass(Table2Excel, [{
key: '_invokePlugin',
value: function _invokePlugin(func) {
var _this2 = this;
var context = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
this.pluginContext = Object.assign({}, this.pluginContext, context);
this.plugins[func].forEach(function (handler) {
return handler.call(_this2, _this2.pluginContext);
});
}
}, {
key: 'toExcel',
value: function toExcel() {
var _this3 = this;
var tables = this.tables,
options = this.options;
var workbook = new _exceljs2.default.Workbook(); // create workbook
Object.assign(workbook, options);
// workbookCreated plugins
this._invokePlugin('workbookCreated', { workbook: workbook, tables: tables });
tables.forEach(function (table, index) {
var worksheet = workbook.addWorksheet('Sheet ' + (index + 1));
// worksheetCreated plugins
_this3._invokePlugin('worksheetCreated', { worksheet: worksheet, table: table });
_this3.toSheet(table, worksheet);
// worksheetCompleted plugins
_this3._invokePlugin('worksheetCompleted', { worksheet: worksheet, table: table });
});
return this.workbook = workbook;
}
}, {
key: 'toSheet',
value: function toSheet(table, worksheet) {
var _this4 = this;
// get total cols and rows
var totalRows = table.rows.length;
var totalCols = 0;
if (table.rows.length > 0) {
for (var i = 0; i < table.rows[0].cells.length; i++) {
totalCols += table.rows[0].cells[i].colSpan;
}
}
var cells = [];
Array.from(table.rows).forEach(function (row) {
Array.from(row.cells).forEach(function (cell) {
cells.push({
rowRange: {},
colRange: {},
el: cell
});
});
});
// create matrix
var helperMatrix = [];
for (var r = 0; r < totalRows; r++) {
var row = [];
for (var c = 0; c < totalCols; c++) {
row.push({ cell: null });
}
helperMatrix.push(row);
}
// mark matrix
var cursor = 0;
for (var _r = 0; _r < totalRows; _r++) {
for (var _c = 0; _c < totalCols; _c++) {
// skip if current matrix unit is already assigned
if (helperMatrix[_r][_c].cell) {
continue;
}
// assign cell to current matrix unit
var cell = cells[cursor++];
var _cell$el = cell.el,
rowSpan = _cell$el.rowSpan,
colSpan = _cell$el.colSpan;
cell.rowRange = { from: _r, to: _r };
cell.colRange = { from: _c, to: _c };
for (var y = _r; y < _r + rowSpan; y++) {
for (var x = _c; x < _c + colSpan; x++) {
helperMatrix[y][x].cell = cell;
cell.colRange.to = x;
cell.rowRange.to = y;
}
}
}
}
// read matrix to sheet
cells.forEach(function (cell) {
var rowRange = cell.rowRange,
colRange = cell.colRange,
el = cell.el;
var innerText = el.innerText;
var workcell = (0, _utils.mergeCells)(worksheet, colRange.from, rowRange.from, colRange.to, rowRange.to);
var cellStyle = getComputedStyle(el);
workcell.value = innerText;
// workcellCreated
_this4._invokePlugin('workcellCreated', { workcell: workcell, cell: el, rowRange: rowRange, colRange: colRange, cellStyle: cellStyle });
});
}
}, {
key: 'export',
value: function _export(fileName, ext) {
if (!this.workbook) {
this.toExcel();
}
(0, _utils.saveAsExcel)(this.workbook, fileName, ext);
}
}]);
return Table2Excel;
}();
exports.default = Table2Excel;