| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477 |
- '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 Cell = require('./cell');
- var Row = /*#__PURE__*/function () {
- function Row(worksheet, number) {
- _classCallCheck(this, Row);
- this._worksheet = worksheet;
- this._number = number;
- this._cells = [];
- this.style = {};
- this.outlineLevel = 0;
- } // return the row number
- _createClass(Row, [{
- key: "commit",
- // Inform Streaming Writer that this row (and all rows before it) are complete
- // and ready to write. Has no effect on Worksheet document
- value: function commit() {
- this._worksheet._commitRow(this); // eslint-disable-line no-underscore-dangle
- } // helps GC by breaking cyclic references
- }, {
- key: "destroy",
- value: function destroy() {
- delete this._worksheet;
- delete this._cells;
- delete this.style;
- }
- }, {
- key: "findCell",
- value: function findCell(colNumber) {
- return this._cells[colNumber - 1];
- } // given {address, row, col}, find or create new cell
- }, {
- key: "getCellEx",
- value: function getCellEx(address) {
- var cell = this._cells[address.col - 1];
- if (!cell) {
- var column = this._worksheet.getColumn(address.col);
- cell = new Cell(this, column, address.address);
- this._cells[address.col - 1] = cell;
- }
- return cell;
- } // get cell by key, letter or column number
- }, {
- key: "getCell",
- value: function getCell(col) {
- if (typeof col === 'string') {
- // is it a key?
- var column = this._worksheet.getColumnKey(col);
- if (column) {
- col = column.number;
- } else {
- col = colCache.l2n(col);
- }
- }
- return this._cells[col - 1] || this.getCellEx({
- address: colCache.encodeAddress(this._number, col),
- row: this._number,
- col: col
- });
- } // remove cell(s) and shift all higher cells down by count
- }, {
- key: "splice",
- value: function splice(start, count) {
- var nKeep = start + count;
- for (var _len = arguments.length, inserts = new Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) {
- inserts[_key - 2] = arguments[_key];
- }
- var nExpand = inserts.length - count;
- var nEnd = this._cells.length;
- var i;
- var cSrc;
- var cDst;
- if (nExpand < 0) {
- // remove cells
- for (i = start + inserts.length; i <= nEnd; i++) {
- cDst = this._cells[i - 1];
- cSrc = this._cells[i - nExpand - 1];
- if (cSrc) {
- cDst = this.getCell(i);
- cDst.value = cSrc.value;
- cDst.style = cSrc.style; // eslint-disable-next-line no-underscore-dangle
- cDst._comment = cSrc._comment;
- } else if (cDst) {
- cDst.value = null;
- cDst.style = {}; // eslint-disable-next-line no-underscore-dangle
- cDst._comment = undefined;
- }
- }
- } else if (nExpand > 0) {
- // insert new cells
- for (i = nEnd; i >= nKeep; i--) {
- cSrc = this._cells[i - 1];
- if (cSrc) {
- cDst = this.getCell(i + nExpand);
- cDst.value = cSrc.value;
- cDst.style = cSrc.style; // eslint-disable-next-line no-underscore-dangle
- cDst._comment = cSrc._comment;
- } else {
- this._cells[i + nExpand - 1] = undefined;
- }
- }
- } // now add the new values
- for (i = 0; i < inserts.length; i++) {
- cDst = this.getCell(start + i);
- cDst.value = inserts[i];
- cDst.style = {}; // eslint-disable-next-line no-underscore-dangle
- cDst._comment = undefined;
- }
- } // Iterate over all non-null cells in this row
- }, {
- key: "eachCell",
- value: function eachCell(options, iteratee) {
- if (!iteratee) {
- iteratee = options;
- options = null;
- }
- if (options && options.includeEmpty) {
- var n = this._cells.length;
- for (var i = 1; i <= n; i++) {
- iteratee(this.getCell(i), i);
- }
- } else {
- this._cells.forEach(function (cell, index) {
- if (cell && cell.type !== Enums.ValueType.Null) {
- iteratee(cell, index + 1);
- }
- });
- }
- } // ===========================================================================
- // Page Breaks
- }, {
- key: "addPageBreak",
- value: function addPageBreak(lft, rght) {
- var ws = this._worksheet;
- var left = Math.max(0, lft - 1) || 0;
- var right = Math.max(0, rght - 1) || 16838;
- var pb = {
- id: this._number,
- max: right,
- man: 1
- };
- if (left) pb.min = left;
- ws.rowBreaks.push(pb);
- } // return a sparse array of cell values
- }, {
- key: "_applyStyle",
- // =========================================================================
- // styles
- value: function _applyStyle(name, value) {
- this.style[name] = value;
- this._cells.forEach(function (cell) {
- if (cell) {
- cell[name] = value;
- }
- });
- return value;
- }
- }, {
- key: "number",
- get: function get() {
- return this._number;
- }
- }, {
- key: "worksheet",
- get: function get() {
- return this._worksheet;
- }
- }, {
- key: "values",
- get: function get() {
- var values = [];
- this._cells.forEach(function (cell) {
- if (cell && cell.type !== Enums.ValueType.Null) {
- values[cell.col] = cell.value;
- }
- });
- return values;
- } // set the values by contiguous or sparse array, or by key'd object literal
- ,
- set: function set(value) {
- var _this = this;
- // this operation is not additive - any prior cells are removed
- this._cells = [];
- if (!value) {// empty row
- } else if (value instanceof Array) {
- var offset = 0;
- if (value.hasOwnProperty('0')) {
- // contiguous array - start at column 1
- offset = 1;
- }
- value.forEach(function (item, index) {
- if (item !== undefined) {
- _this.getCellEx({
- address: colCache.encodeAddress(_this._number, index + offset),
- row: _this._number,
- col: index + offset
- }).value = item;
- }
- });
- } else {
- // assume object with column keys
- this._worksheet.eachColumnKey(function (column, key) {
- if (value[key] !== undefined) {
- _this.getCellEx({
- address: colCache.encodeAddress(_this._number, column.number),
- row: _this._number,
- col: column.number
- }).value = value[key];
- }
- });
- }
- } // returns true if the row includes at least one cell with a value
- }, {
- key: "hasValues",
- get: function get() {
- return _.some(this._cells, function (cell) {
- return cell && cell.type !== Enums.ValueType.Null;
- });
- }
- }, {
- key: "cellCount",
- get: function get() {
- return this._cells.length;
- }
- }, {
- key: "actualCellCount",
- get: function get() {
- var count = 0;
- this.eachCell(function () {
- count++;
- });
- return count;
- } // get the min and max column number for the non-null cells in this row or null
- }, {
- key: "dimensions",
- get: function get() {
- var min = 0;
- var max = 0;
- this._cells.forEach(function (cell) {
- if (cell && cell.type !== Enums.ValueType.Null) {
- if (!min || min > cell.col) {
- min = cell.col;
- }
- if (max < cell.col) {
- max = cell.col;
- }
- }
- });
- return min > 0 ? {
- min: min,
- max: max
- } : null;
- }
- }, {
- 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);
- }
- }, {
- 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.outlineLevelRow);
- } // =========================================================================
- }, {
- key: "model",
- get: function get() {
- var cells = [];
- var min = 0;
- var max = 0;
- this._cells.forEach(function (cell) {
- if (cell) {
- var cellModel = cell.model;
- if (cellModel) {
- if (!min || min > cell.col) {
- min = cell.col;
- }
- if (max < cell.col) {
- max = cell.col;
- }
- cells.push(cellModel);
- }
- }
- });
- return this.height || cells.length ? {
- cells: cells,
- number: this.number,
- min: min,
- max: max,
- height: this.height,
- style: this.style,
- hidden: this.hidden,
- outlineLevel: this.outlineLevel,
- collapsed: this.collapsed
- } : null;
- },
- set: function set(value) {
- var _this2 = this;
- if (value.number !== this._number) {
- throw new Error('Invalid row number in model');
- }
- this._cells = [];
- var previousAddress;
- value.cells.forEach(function (cellModel) {
- switch (cellModel.type) {
- case Cell.Types.Merge:
- // special case - don't add this types
- break;
- default:
- {
- var address;
- if (cellModel.address) {
- address = colCache.decodeAddress(cellModel.address);
- } else if (previousAddress) {
- // This is a <c> element without an r attribute
- // Assume that it's the cell for the next column
- var _previousAddress = previousAddress,
- row = _previousAddress.row;
- var col = previousAddress.col + 1;
- address = {
- row: row,
- col: col,
- address: colCache.encodeAddress(row, col),
- $col$row: "$".concat(colCache.n2l(col), "$").concat(row)
- };
- }
- previousAddress = address;
- var cell = _this2.getCellEx(address);
- cell.model = cellModel;
- break;
- }
- }
- });
- if (value.height) {
- this.height = value.height;
- } else {
- delete this.height;
- }
- this.hidden = value.hidden;
- this.outlineLevel = value.outlineLevel || 0;
- this.style = value.style && JSON.parse(JSON.stringify(value.style)) || {};
- }
- }]);
- return Row;
- }();
- module.exports = Row;
- //# sourceMappingURL=row.js.map
|