UNPKG

exceljs

Version:

Excel Workbook Manager - Read and Write xlsx and csv Files.

357 lines (318 loc) 9.02 kB
'use strict'; function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a 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); } } function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } var _ = require('../utils/under-dash'); var Enums = require('./enums'); var colCache = require('../utils/col-cache'); var DEFAULT_COLUMN_WIDTH = 9; // Column defines the column properties for 1 column. // This includes header rows, widths, key, (style), etc. // Worksheet will condense the columns as appropriate during serialization var Column = /*#__PURE__*/function () { function Column(worksheet, number, defn) { _classCallCheck(this, Column); this._worksheet = worksheet; this._number = number; if (defn !== false) { // sometimes defn will follow this.defn = defn; } } _createClass(Column, [{ key: "toString", value: function toString() { return JSON.stringify({ key: this.key, width: this.width, headers: this.headers.length ? this.headers : undefined }); } }, { key: "equivalentTo", value: function equivalentTo(other) { return this.width === other.width && this.hidden === other.hidden && this.outlineLevel === other.outlineLevel && _.isEqual(this.style, other.style); } }, { key: "eachCell", value: function eachCell(options, iteratee) { var colNumber = this.number; if (!iteratee) { iteratee = options; options = null; } this._worksheet.eachRow(options, function (row, rowNumber) { iteratee(row.getCell(colNumber), rowNumber); }); } }, { key: "_applyStyle", // ========================================================================= // styles value: function _applyStyle(name, value) { this.style[name] = value; this.eachCell(function (cell) { cell[name] = value; }); return value; } }, { key: "number", get: function get() { return this._number; } }, { key: "worksheet", get: function get() { return this._worksheet; } }, { key: "letter", get: function get() { return colCache.n2l(this._number); } }, { key: "isCustomWidth", get: function get() { return this.width !== undefined && this.width !== DEFAULT_COLUMN_WIDTH; } }, { key: "defn", get: function get() { return { header: this._header, key: this.key, width: this.width, style: this.style, hidden: this.hidden, outlineLevel: this.outlineLevel }; }, set: function set(value) { if (value) { this.key = value.key; this.width = value.width !== undefined ? value.width : DEFAULT_COLUMN_WIDTH; this.outlineLevel = value.outlineLevel; if (value.style) { this.style = value.style; } else { this.style = {}; } // headers must be set after style this.header = value.header; this._hidden = !!value.hidden; } else { delete this._header; delete this._key; delete this.width; this.style = {}; this.outlineLevel = 0; } } }, { key: "headers", get: function get() { return this._header && this._header instanceof Array ? this._header : [this._header]; } }, { key: "header", get: function get() { return this._header; }, set: function set(value) { var _this = this; if (value !== undefined) { this._header = value; this.headers.forEach(function (text, index) { _this._worksheet.getCell(index + 1, _this.number).value = text; }); } else { this._header = undefined; } } }, { key: "key", get: function get() { return this._key; }, set: function set(value) { var column = this._key && this._worksheet.getColumnKey(this._key); if (column === this) { this._worksheet.deleteColumnKey(this._key); } this._key = value; if (value) { this._worksheet.setColumnKey(this._key, this); } } }, { key: "hidden", get: function get() { return !!this._hidden; }, set: function set(value) { this._hidden = value; } }, { key: "outlineLevel", get: function get() { return this._outlineLevel || 0; }, set: function set(value) { this._outlineLevel = value; } }, { key: "collapsed", get: function get() { return !!(this._outlineLevel && this._outlineLevel >= this._worksheet.properties.outlineLevelCol); } }, { key: "isDefault", get: function get() { if (this.isCustomWidth) { return false; } if (this.hidden) { return false; } if (this.outlineLevel) { return false; } var s = this.style; if (s && (s.font || s.numFmt || s.alignment || s.border || s.fill || s.protection)) { return false; } return true; } }, { key: "headerCount", get: function get() { return this.headers.length; } }, { key: "values", get: function get() { var v = []; this.eachCell(function (cell, rowNumber) { if (cell && cell.type !== Enums.ValueType.Null) { v[rowNumber] = cell.value; } }); return v; }, set: function set(v) { var _this2 = this; if (!v) { return; } var colNumber = this.number; var offset = 0; if (v.hasOwnProperty('0')) { // assume contiguous array, start at row 1 offset = 1; } v.forEach(function (value, index) { _this2._worksheet.getCell(index + offset, colNumber).value = value; }); } }, { key: "numFmt", get: function get() { return this.style.numFmt; }, set: function set(value) { this._applyStyle('numFmt', value); } }, { key: "font", get: function get() { return this.style.font; }, set: function set(value) { this._applyStyle('font', value); } }, { key: "alignment", get: function get() { return this.style.alignment; }, set: function set(value) { this._applyStyle('alignment', value); } }, { key: "protection", get: function get() { return this.style.protection; }, set: function set(value) { this._applyStyle('protection', value); } }, { key: "border", get: function get() { return this.style.border; }, set: function set(value) { this._applyStyle('border', value); } }, { key: "fill", get: function get() { return this.style.fill; }, set: function set(value) { this._applyStyle('fill', value); } // ============================================================================= // static functions }], [{ key: "toModel", value: function toModel(columns) { // Convert array of Column into compressed list cols var cols = []; var col = null; if (columns) { columns.forEach(function (column, index) { if (column.isDefault) { if (col) { col = null; } } else if (!col || !column.equivalentTo(col)) { col = { min: index + 1, max: index + 1, width: column.width !== undefined ? column.width : DEFAULT_COLUMN_WIDTH, style: column.style, isCustomWidth: column.isCustomWidth, hidden: column.hidden, outlineLevel: column.outlineLevel, collapsed: column.collapsed }; cols.push(col); } else { col.max = index + 1; } }); } return cols.length ? cols : undefined; } }, { key: "fromModel", value: function fromModel(worksheet, cols) { cols = cols || []; var columns = []; var count = 1; var index = 0; while (index < cols.length) { var col = cols[index++]; while (count < col.min) { columns.push(new Column(worksheet, count++)); } while (count <= col.max) { columns.push(new Column(worksheet, count++, col)); } } return columns.length ? columns : null; } }]); return Column; }(); module.exports = Column; //# sourceMappingURL=column.js.map