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.
		
		
		
		
		
			
		
			
				
					357 lines
				
				8.8 KiB
			
		
		
			
		
	
	
					357 lines
				
				8.8 KiB
			| 
								 
											3 years ago
										 
									 | 
							
								'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
							 |