Commit 3a3a5050 authored by Alexander.Trofimov's avatar Alexander.Trofimov

fix bug 33627

SUBTOTAL now calculate with check hidden row (https://support.office.com/en-us/article/SUBTOTAL-function-7b027003-f060-4ade-9040-e478765b9939)
bIsApplyFilterBySheet  -> isApplyFilterBySheet
parent 72947729
...@@ -2635,11 +2635,8 @@ cPOWER.prototype.getInfo = function () { ...@@ -2635,11 +2635,8 @@ cPOWER.prototype.getInfo = function () {
}; };
}; };
function cPRODUCT() { /** @constructor */
// cBaseFunction.call( this, "PRODUCT" ); function cPRODUCT() {
// this.setArgumentsMin( 1 );
// this.setArgumentsMax( 255 );
this.name = "PRODUCT"; this.name = "PRODUCT";
this.type = cElementType.func; this.type = cElementType.func;
this.value = null; this.value = null;
...@@ -2647,53 +2644,52 @@ function cPRODUCT() { ...@@ -2647,53 +2644,52 @@ function cPRODUCT() {
this.argumentsCurrent = 0; this.argumentsCurrent = 0;
this.argumentsMax = 255; this.argumentsMax = 255;
this.formatType = { this.formatType = {
def:-1, //подразумевается формат первой ячейки входящей в формулу. def: -1, //подразумевается формат первой ячейки входящей в формулу.
noneFormat:-2 noneFormat: -2
}; };
this.numFormat = this.formatType.def; this.numFormat = this.formatType.def;
}
} cPRODUCT.prototype = Object.create(cBaseFunction.prototype);
cPRODUCT.prototype.Calculate = function (arg) {
cPRODUCT.prototype = Object.create( cBaseFunction.prototype ); var arg0 = new cNumber(1);
cPRODUCT.prototype.Calculate = function ( arg ) { for (var i = 0; i < arg.length; i++) {
var arg0 = new cNumber( 1 ); if (cElementType.cellsRange === arg[i].type || cElementType.cellsRange3D === arg[i].type) {
for ( var i = 0; i < arg.length; i++ ) { var _arrVal = arg[i].getValue(this.checkExclude, this.excludeHiddenRows);
if ( arg[i] instanceof cArea || arg[i] instanceof cArea3D ) { for (var j = 0; j < _arrVal.length; j++) {
var _arrVal = arg[i].getValue(); arg0 = _func[arg0.type][_arrVal[j].type](arg0, _arrVal[j], "*");
for ( var j = 0; j < _arrVal.length; j++ ) { if (cElementType.error === arg0.type) {
arg0 = _func[arg0.type][_arrVal[j].type]( arg0, _arrVal[j], "*" );
if ( arg0 instanceof cError )
return this.value = arg0; return this.value = arg0;
} }
} }
else if ( arg[i] instanceof cRef || arg[i] instanceof cRef3D ) { } else if (cElementType.cell === arg[i].type || cElementType.cell3D === arg[i].type) {
if (!this.checkExclude || !element.isHidden(this.excludeHiddenRows)) {
var _arg = arg[i].getValue(); var _arg = arg[i].getValue();
arg0 = _func[arg0.type][_arg.type]( arg0, _arg, "*" ); arg0 = _func[arg0.type][_arg.type](arg0, _arg, "*");
} }
else if ( arg[i] instanceof cArray ) { } else if (cElementType.array === arg[i].type) {
arg[i].foreach( function ( elem ) { arg[i].foreach(function (elem) {
if (cElementType.string === elem.type || cElementType.bool === elem.type || cElementType.empty === elem.type) {
if ( elem instanceof cString || elem instanceof cBool || elem instanceof cEmpty )
return; return;
arg0 = _func[arg0.type][elem.type]( arg0, elem, "*" );
} )
} }
else {
arg0 = _func[arg0.type][arg[i].type]( arg0, arg[i], "*" ); arg0 = _func[arg0.type][elem.type](arg0, elem, "*");
})
} else {
arg0 = _func[arg0.type][arg[i].type](arg0, arg[i], "*");
} }
if ( arg0 instanceof cError ) if (cElementType.error === arg0.type) {
return this.value = arg0; return this.value = arg0;
}
} }
return this.value = arg0; return this.value = arg0;
}; };
cPRODUCT.prototype.getInfo = function () { cPRODUCT.prototype.getInfo = function () {
return { return {
name:this.name, name: this.name, args: "( argument-list )"
args:"( argument-list )" };
}; };
};
function cQUOTIENT() { function cQUOTIENT() {
// cBaseFunction.call( this, "QUOTIENT" ); // cBaseFunction.call( this, "QUOTIENT" );
...@@ -3843,7 +3839,7 @@ cSQRTPI.prototype.getInfo = function () { ...@@ -3843,7 +3839,7 @@ cSQRTPI.prototype.getInfo = function () {
cSUBTOTAL.prototype = Object.create(cBaseFunction.prototype); cSUBTOTAL.prototype = Object.create(cBaseFunction.prototype);
cSUBTOTAL.prototype.Calculate = function (arg) { cSUBTOTAL.prototype.Calculate = function (arg) {
var f, arg0 = arg[0]; var f, exclude = false, arg0 = arg[0];
if (cElementType.cellsRange === arg0.type || cElementType.cellsRange3D === arg0.type) { if (cElementType.cellsRange === arg0.type || cElementType.cellsRange3D === arg0.type) {
arg0 = arg0.cross(arguments[1].first); arg0 = arg0.cross(arguments[1].first);
...@@ -3856,55 +3852,69 @@ cSQRTPI.prototype.getInfo = function () { ...@@ -3856,55 +3852,69 @@ cSQRTPI.prototype.getInfo = function () {
arg0 = arg0.getValue(); arg0 = arg0.getValue();
switch (arg0) { switch (arg0) {
case cSubTotalFunctionType.includes.AVERAGE:
case cSubTotalFunctionType.excludes.AVERAGE: case cSubTotalFunctionType.excludes.AVERAGE:
this.value = (new AscCommonExcel.cAVERAGE()).Calculate(arg.slice(1)); exclude = true;
case cSubTotalFunctionType.includes.AVERAGE:
f = new AscCommonExcel.cAVERAGE();
break; break;
case cSubTotalFunctionType.includes.COUNT:
case cSubTotalFunctionType.excludes.COUNT: case cSubTotalFunctionType.excludes.COUNT:
this.value = (new AscCommonExcel.cCOUNT()).Calculate(arg.slice(1)); exclude = true;
case cSubTotalFunctionType.includes.COUNT:
f = new AscCommonExcel.cCOUNT();
break; break;
case cSubTotalFunctionType.includes.COUNTA:
case cSubTotalFunctionType.excludes.COUNTA: case cSubTotalFunctionType.excludes.COUNTA:
this.value = (new AscCommonExcel.cCOUNTA()).Calculate(arg.slice(1)); exclude = true;
case cSubTotalFunctionType.includes.COUNTA:
f = new AscCommonExcel.cCOUNTA();
break; break;
case cSubTotalFunctionType.includes.MAX:
case cSubTotalFunctionType.excludes.MAX: case cSubTotalFunctionType.excludes.MAX:
exclude = true;
case cSubTotalFunctionType.includes.MAX:
f = new AscCommonExcel.cMAX(); f = new AscCommonExcel.cMAX();
f.setArgumentsCount(arg.length - 1); f.setArgumentsCount(arg.length - 1);
this.value = f.Calculate(arg.slice(1));
break; break;
case cSubTotalFunctionType.includes.MIN:
case cSubTotalFunctionType.excludes.MIN: case cSubTotalFunctionType.excludes.MIN:
exclude = true;
case cSubTotalFunctionType.includes.MIN:
f = new AscCommonExcel.cMIN(); f = new AscCommonExcel.cMIN();
f.setArgumentsCount(arg.length - 1); f.setArgumentsCount(arg.length - 1);
this.value = f.Calculate(arg.slice(1));
break; break;
case cSubTotalFunctionType.includes.PRODUCT:
case cSubTotalFunctionType.excludes.PRODUCT: case cSubTotalFunctionType.excludes.PRODUCT:
this.value = (new cPRODUCT()).Calculate(arg.slice(1)); exclude = true;
case cSubTotalFunctionType.includes.PRODUCT:
f = new cPRODUCT();
break; break;
case cSubTotalFunctionType.includes.STDEV:
case cSubTotalFunctionType.excludes.STDEV: case cSubTotalFunctionType.excludes.STDEV:
this.value = (new AscCommonExcel.cSTDEV()).Calculate(arg.slice(1)); exclude = true;
case cSubTotalFunctionType.includes.STDEV:
f = new AscCommonExcel.cSTDEV();
break; break;
case cSubTotalFunctionType.includes.STDEVP:
case cSubTotalFunctionType.excludes.STDEVP: case cSubTotalFunctionType.excludes.STDEVP:
this.value = (new AscCommonExcel.cSTDEVP()).Calculate(arg.slice(1)); exclude = true;
case cSubTotalFunctionType.includes.STDEVP:
f = new AscCommonExcel.cSTDEVP();
break; break;
case cSubTotalFunctionType.includes.SUM:
case cSubTotalFunctionType.excludes.SUM: case cSubTotalFunctionType.excludes.SUM:
this.value = (new cSUM()).Calculate(arg.slice(1)); exclude = true;
case cSubTotalFunctionType.includes.SUM:
f = new cSUM();
break; break;
case cSubTotalFunctionType.includes.VAR:
case cSubTotalFunctionType.excludes.VAR: case cSubTotalFunctionType.excludes.VAR:
this.value = (new AscCommonExcel.cVAR()).Calculate(arg.slice(1)); exclude = true;
case cSubTotalFunctionType.includes.VAR:
f = new AscCommonExcel.cVAR();
break; break;
case cSubTotalFunctionType.includes.VARP:
case cSubTotalFunctionType.excludes.VARP: case cSubTotalFunctionType.excludes.VARP:
this.value = (new AscCommonExcel.cVARP()).Calculate(arg.slice(1)); exclude = true;
case cSubTotalFunctionType.includes.VARP:
f = new AscCommonExcel.cVARP();
break; break;
} }
if (f) {
f.checkExclude = true;
f.excludeHiddenRows = exclude;
this.value = f.Calculate(arg.slice(1));
}
return this.value; return this.value;
}; };
...@@ -3935,7 +3945,7 @@ cSQRTPI.prototype.getInfo = function () { ...@@ -3935,7 +3945,7 @@ cSQRTPI.prototype.getInfo = function () {
for (var i = 0; i < arg.length; i++) { for (var i = 0; i < arg.length; i++) {
element = arg[i]; element = arg[i];
if (cElementType.cellsRange === element.type || cElementType.cellsRange3D === element.type) { if (cElementType.cellsRange === element.type || cElementType.cellsRange3D === element.type) {
var _arrVal = element.getValue(); var _arrVal = element.getValue(this.checkExclude, this.excludeHiddenRows);
for (var j = 0; j < _arrVal.length; j++) { for (var j = 0; j < _arrVal.length; j++) {
if (cElementType.bool !== _arrVal[j].type && cElementType.string !== _arrVal[j].type) { if (cElementType.bool !== _arrVal[j].type && cElementType.string !== _arrVal[j].type) {
arg0 = _func[arg0.type][_arrVal[j].type](arg0, _arrVal[j], "+"); arg0 = _func[arg0.type][_arrVal[j].type](arg0, _arrVal[j], "+");
...@@ -3945,16 +3955,19 @@ cSQRTPI.prototype.getInfo = function () { ...@@ -3945,16 +3955,19 @@ cSQRTPI.prototype.getInfo = function () {
} }
} }
} else if (cElementType.cell === element.type || cElementType.cell3D === element.type) { } else if (cElementType.cell === element.type || cElementType.cell3D === element.type) {
if (!this.checkExclude || !element.isHidden(this.excludeHiddenRows)) {
_arg = element.getValue(); _arg = element.getValue();
if (cElementType.bool !== _arg.type && cElementType.string !== _arg.type) { if (cElementType.bool !== _arg.type && cElementType.string !== _arg.type) {
arg0 = _func[arg0.type][_arg.type](arg0, _arg, "+"); arg0 = _func[arg0.type][_arg.type](arg0, _arg, "+");
} }
}
} else if (cElementType.array === element.type) { } else if (cElementType.array === element.type) {
element.foreach(function (arrElem) { element.foreach(function (arrElem) {
if (cElementType.bool !== arrElem.type && cElementType.string !== arrElem.type && cElementType.empty !== arrElem.type) { if (cElementType.bool !== arrElem.type && cElementType.string !== arrElem.type &&
cElementType.empty !== arrElem.type) {
arg0 = _func[arg0.type][arrElem.type](arg0, arrElem, "+"); arg0 = _func[arg0.type][arrElem.type](arg0, arrElem, "+");
} }
}) });
} else { } else {
_arg = element.tocNumber(); _arg = element.tocNumber();
arg0 = _func[arg0.type][_arg.type](arg0, _arg, "+"); arg0 = _func[arg0.type][_arg.type](arg0, _arg, "+");
......
...@@ -960,14 +960,17 @@ cArea.prototype.clone = function () { ...@@ -960,14 +960,17 @@ cArea.prototype.clone = function () {
cArea.prototype.getWsId = function () { cArea.prototype.getWsId = function () {
return this.ws.Id; return this.ws.Id;
}; };
cArea.prototype.getValue = function () { cArea.prototype.getValue = function (checkExclude, excludeHiddenRows) {
var val = [], r = this.getRange(); var val = [], r = this.getRange();
if (!r) { if (!r) {
val.push(new cError(cErrorType.bad_reference)); val.push(new cError(cErrorType.bad_reference));
} else { } else {
if (checkExclude && !excludeHiddenRows) {
excludeHiddenRows = this.ws.isApplyFilterBySheet();
}
r._foreachNoEmpty(function (cell) { r._foreachNoEmpty(function (cell) {
val.push(checkTypeCell(cell)); val.push(checkTypeCell(cell));
}); }, excludeHiddenRows);
} }
return val; return val;
}; };
...@@ -980,12 +983,12 @@ cArea.prototype.getWsId = function () { ...@@ -980,12 +983,12 @@ cArea.prototype.getWsId = function () {
} }
return res; return res;
}; };
cArea.prototype.getRange = function () { cArea.prototype.getRange = function () {
if ( !this.range ) { if (!this.range) {
this.range = this.ws.getRange2( this._cells ) this.range = this.ws.getRange2(this._cells);
} }
return this.range; return this.range;
}; };
cArea.prototype.tocNumber = function () { cArea.prototype.tocNumber = function () {
var v = this.getValue()[0]; var v = this.getValue()[0];
if ( !v ) { if ( !v ) {
...@@ -1174,7 +1177,7 @@ cArea3D.prototype.wsRange = function () { ...@@ -1174,7 +1177,7 @@ cArea3D.prototype.wsRange = function () {
cArea3D.prototype.getRanges = function () { cArea3D.prototype.getRanges = function () {
return (this.range(this.wsRange())); return (this.range(this.wsRange()));
}; };
cArea3D.prototype.getValue = function () { cArea3D.prototype.getValue = function (checkExclude, excludeHiddenRows) {
var i, _wsA = this.wsRange(); var i, _wsA = this.wsRange();
var _val = []; var _val = [];
if (_wsA.length < 1) { if (_wsA.length < 1) {
...@@ -1188,15 +1191,19 @@ cArea3D.prototype.wsRange = function () { ...@@ -1188,15 +1191,19 @@ cArea3D.prototype.wsRange = function () {
} }
} }
var _exclude;
var _r = this.range(_wsA); var _r = this.range(_wsA);
for (i = 0; i < _r.length; i++) { for (i = 0; i < _r.length; i++) {
if (!_r[i]) { if (!_r[i]) {
_val.push(new cError(cErrorType.bad_reference)); _val.push(new cError(cErrorType.bad_reference));
return _val; return _val;
} }
if (checkExclude && !(_exclude = excludeHiddenRows)) {
_exclude = _wsA[i].isApplyFilterBySheet();
}
_r[i]._foreachNoEmpty(function (cell) { _r[i]._foreachNoEmpty(function (cell) {
_val.push(checkTypeCell(cell)); _val.push(checkTypeCell(cell));
}); }, _exclude);
} }
return _val; return _val;
}; };
...@@ -1356,9 +1363,9 @@ cArea3D.prototype.getWS = function () { ...@@ -1356,9 +1363,9 @@ cArea3D.prototype.getWS = function () {
return this.wsFrom === this.wsTo; return this.wsFrom === this.wsTo;
}; };
/** @constructor */ /** @constructor */
function cRef( val, ws ) {/*Ref means A1 for example*/ function cRef(val, ws) {/*Ref means A1 for example*/
this.constructor.call( this, val, cElementType.cell ); this.constructor.call(this, val, cElementType.cell);
this._cells = val; this._cells = val;
this.ws = ws; this.ws = ws;
...@@ -1369,12 +1376,12 @@ function cRef( val, ws ) {/*Ref means A1 for example*/ ...@@ -1369,12 +1376,12 @@ function cRef( val, ws ) {/*Ref means A1 for example*/
var ca = g_oCellAddressUtils.getCellAddress(val.replace(AscCommon.rx_space_g, "")); var ca = g_oCellAddressUtils.getCellAddress(val.replace(AscCommon.rx_space_g, ""));
this.range = null; this.range = null;
this._valid = ca.isValid(); this._valid = ca.isValid();
if ( this._valid ) { if (this._valid) {
this.range = this.ws.getRange3( ca.getRow0(), ca.getCol0(), ca.getRow0(), ca.getCol0() ); this.range = this.ws.getRange3(ca.getRow0(), ca.getCol0(), ca.getRow0(), ca.getCol0());
} else { } else {
this.range = this.ws.getRange3( 0, 0, 0, 0 ); this.range = this.ws.getRange3(0, 0, 0, 0);
}
} }
}
cRef.prototype = Object.create( cBaseType.prototype ); cRef.prototype = Object.create( cBaseType.prototype );
cRef.prototype.clone = function () { cRef.prototype.clone = function () {
...@@ -1408,9 +1415,9 @@ cRef.prototype.tocBool = function () { ...@@ -1408,9 +1415,9 @@ cRef.prototype.tocBool = function () {
cRef.prototype.toString = function () { cRef.prototype.toString = function () {
return this._cells; return this._cells;
}; };
cRef.prototype.getRange = function () { cRef.prototype.getRange = function () {
return this.range; return this.range;
}; };
cRef.prototype.getWS = function () { cRef.prototype.getWS = function () {
return this.ws; return this.ws;
}; };
...@@ -1423,18 +1430,24 @@ cRef.prototype.getMatrix = function () { ...@@ -1423,18 +1430,24 @@ cRef.prototype.getMatrix = function () {
cRef.prototype.getBBox0 = function () { cRef.prototype.getBBox0 = function () {
return this.getRange().getBBox0(); return this.getRange().getBBox0();
}; };
cRef.prototype.isHidden = function (excludeHiddenRows) {
if (!excludeHiddenRows) {
excludeHiddenRows = this.ws.isApplyFilterBySheet();
}
return excludeHiddenRows && this._valid && this.ws.getRowHidden(this.getRange().r1);
};
/** @constructor */ /** @constructor */
function cRef3D( val, _wsFrom, wb ) {/*Ref means Sheat1!A1 for example*/ function cRef3D(val, _wsFrom, wb) {/*Ref means Sheat1!A1 for example*/
this.constructor.call( this, val, cElementType.cell3D ); this.constructor.call(this, val, cElementType.cell3D);
this.wb = this._wb = wb; this.wb = this._wb = wb;
this._cells = val; this._cells = val;
this.isAbsolute = false; this.isAbsolute = false;
this.isAbsoluteCol1 = false; this.isAbsoluteCol1 = false;
this.isAbsoluteRow1 = false; this.isAbsoluteRow1 = false;
this.ws = this._wb.getWorksheetByName( _wsFrom ); this.ws = this._wb.getWorksheetByName(_wsFrom);
this.range = null; this.range = null;
} }
cRef3D.prototype = Object.create( cBaseType.prototype ); cRef3D.prototype = Object.create( cBaseType.prototype );
cRef3D.prototype.clone = function () { cRef3D.prototype.clone = function () {
...@@ -1449,16 +1462,16 @@ cRef3D.prototype.clone = function () { ...@@ -1449,16 +1462,16 @@ cRef3D.prototype.clone = function () {
cRef3D.prototype.getWsId = function () { cRef3D.prototype.getWsId = function () {
return this.ws.Id; return this.ws.Id;
}; };
cRef3D.prototype.getRange = function () { cRef3D.prototype.getRange = function () {
if ( this.ws ) { if (this.ws) {
if ( this.range ) { if (this.range) {
return this.range; return this.range;
} }
return this.range = this.ws.getRange2( this._cells ); return this.range = this.ws.getRange2(this._cells);
} else { } else {
return this.range = null; return this.range = null;
} }
}; };
cRef3D.prototype.isValid = function () { cRef3D.prototype.isValid = function () {
return !!this.getRange(); return !!this.getRange();
}; };
...@@ -1496,6 +1509,13 @@ cRef3D.prototype.getBBox0 = function () { ...@@ -1496,6 +1509,13 @@ cRef3D.prototype.getBBox0 = function () {
} }
return null; return null;
}; };
cRef3D.prototype.isHidden = function (excludeHiddenRows) {
if (!excludeHiddenRows) {
excludeHiddenRows = this.ws.isApplyFilterBySheet();
}
var _r = this.getRange();
return excludeHiddenRows && _r && this.ws.getRowHidden(_r.r1);
};
/** @constructor */ /** @constructor */
function cEmpty() { function cEmpty() {
......
...@@ -469,11 +469,8 @@ cAVEDEV.prototype.getInfo = function () { ...@@ -469,11 +469,8 @@ cAVEDEV.prototype.getInfo = function () {
}; };
}; };
function cAVERAGE() { /** @constructor */
// cBaseFunction.call( this, "AVERAGE" ); function cAVERAGE() {
// this.setArgumentsMin( 1 );
// this.setArgumentsMax( 255 );
this.name = "AVERAGE"; this.name = "AVERAGE";
this.type = cElementType.func; this.type = cElementType.func;
this.value = null; this.value = null;
...@@ -481,75 +478,71 @@ function cAVERAGE() { ...@@ -481,75 +478,71 @@ function cAVERAGE() {
this.argumentsCurrent = 0; this.argumentsCurrent = 0;
this.argumentsMax = 255; this.argumentsMax = 255;
this.formatType = { this.formatType = {
def:-1, //подразумевается формат первой ячейки входящей в формулу. def: -1, //подразумевается формат первой ячейки входящей в формулу.
noneFormat:-2 noneFormat: -2
}; };
this.numFormat = this.formatType.def; this.numFormat = this.formatType.def;
} }
cAVERAGE.prototype = Object.create( cBaseFunction.prototype ); cAVERAGE.prototype = Object.create(cBaseFunction.prototype);
cAVERAGE.prototype.Calculate = function ( arg ) { cAVERAGE.prototype.Calculate = function (arg) {
var count = 0, sum = new cNumber( 0 ); var count = 0, sum = new cNumber(0);
for ( var i = 0; i < arg.length; i++ ) { for (var i = 0; i < arg.length; i++) {
var _arg = arg[i]; var _arg = arg[i];
if ( _arg instanceof cRef || _arg instanceof cRef3D ) { if (cElementType.cell === _arg.type || cElementType.cell3D === _arg.type) {
if (!this.checkExclude || !_arg.isHidden(this.excludeHiddenRows)) {
var _argV = _arg.getValue(); var _argV = _arg.getValue();
if ( _argV instanceof cString || _argV instanceof cEmpty || _argV instanceof cBool ) { if (cElementType.string === _argV.type || cElementType.empty === _argV.type ||
cElementType.bool === _argV.type) {
continue; continue;
} } else if (cElementType.number === _argV.type) {
else if ( _argV instanceof cNumber ) { sum = _func[sum.type][_argV.type](sum, _argV, "+");
sum = _func[sum.type][_argV.type]( sum, _argV, "+" );
count++; count++;
} } else if (cElementType.error === _argV.type) {
else if ( _argV instanceof cError ) {
return this.value = _argV; return this.value = _argV;
} }
} }
else if ( _arg instanceof cArea || _arg instanceof cArea3D ) { } else if (cElementType.cellsRange === _arg.type || cElementType.cellsRange3D === _arg.type) {
var _argAreaValue = _arg.getValue(); var _argAreaValue = _arg.getValue(this.checkExclude, this.excludeHiddenRows);
for ( var j = 0; j < _argAreaValue.length; j++ ) { for (var j = 0; j < _argAreaValue.length; j++) {
var __arg = _argAreaValue[j]; var __arg = _argAreaValue[j];
if ( __arg instanceof cString || __arg instanceof cEmpty || __arg instanceof cBool ) { if (cElementType.string === __arg.type || cElementType.empty === __arg.type || cElementType.bool === __arg.type) {
continue; continue;
} } else if (cElementType.number === __arg.type) {
else if ( __arg instanceof cNumber ) { sum = _func[sum.type][__arg.type](sum, __arg, "+");
sum = _func[sum.type][__arg.type]( sum, __arg, "+" );
count++; count++;
} } else if (cElementType.error === __arg.type) {
else if ( __arg instanceof cError ) {
return this.value = __arg; return this.value = __arg;
} }
} }
} } else if (cElementType.array === _arg.type) {
else if ( _arg instanceof cArray ) { _arg.foreach(function (elem) {
_arg.foreach( function ( elem ) { if (cElementType.string === elem.type || cElementType.empty === elem.type || cElementType.bool === elem.type) {
if ( elem instanceof cString || elem instanceof cEmpty || elem instanceof cBool ) {
return false; return false;
} }
var e = elem.tocNumber(); var e = elem.tocNumber();
if ( e instanceof cNumber ) { if (cElementType.number === e.type) {
sum = _func[sum.type][e.type]( sum, e, "+" ); sum = _func[sum.type][e.type](sum, e, "+");
count++; count++;
} }
} ) })
} } else {
else {
_arg = _arg.tocNumber(); _arg = _arg.tocNumber();
if ( _arg instanceof cError ) if (cElementType.error === _arg.type) {
return this.value = _arg; return this.value = _arg;
sum = _func[sum.type][_arg.type]( sum, _arg, "+" ); }
sum = _func[sum.type][_arg.type](sum, _arg, "+");
count++; count++;
} }
} }
return this.value = new cNumber( sum.getValue() / count ); return this.value = new cNumber(sum.getValue() / count);
}; };
cAVERAGE.prototype.getInfo = function () { cAVERAGE.prototype.getInfo = function () {
return { return {
name:this.name, name: this.name, args: "( argument-list )"
args:"( argument-list )" };
}; };
};
function cAVERAGEA() { function cAVERAGEA() {
// cBaseFunction.call( this, "AVERAGEA" ); // cBaseFunction.call( this, "AVERAGEA" );
...@@ -1011,7 +1004,8 @@ cCORREL.prototype.getInfo = function () { ...@@ -1011,7 +1004,8 @@ cCORREL.prototype.getInfo = function () {
}; };
}; };
function cCOUNT() { /** @constructor */
function cCOUNT() {
this.name = "COUNT"; this.name = "COUNT";
this.type = cElementType.func; this.type = cElementType.func;
this.value = null; this.value = null;
...@@ -1019,62 +1013,55 @@ function cCOUNT() { ...@@ -1019,62 +1013,55 @@ function cCOUNT() {
this.argumentsCurrent = 0; this.argumentsCurrent = 0;
this.argumentsMax = 255; this.argumentsMax = 255;
this.formatType = { this.formatType = {
def:-1, //подразумевается формат первой ячейки входящей в формулу. def: -1, //подразумевается формат первой ячейки входящей в формулу.
noneFormat:-2 noneFormat: -2
}; };
this.numFormat = this.formatType.noneFormat; this.numFormat = this.formatType.noneFormat;
} }
cCOUNT.prototype = Object.create( cBaseFunction.prototype ); cCOUNT.prototype = Object.create(cBaseFunction.prototype);
cCOUNT.prototype.Calculate = function ( arg ) { cCOUNT.prototype.Calculate = function (arg) {
var count = 0; var count = 0;
for ( var i = 0; i < arg.length; i++ ) { for (var i = 0; i < arg.length; i++) {
var _arg = arg[i]; var _arg = arg[i];
if ( _arg instanceof cRef || _arg instanceof cRef3D ) { if (cElementType.cell === _arg.type || cElementType.cell3D === _arg.type) {
if (!this.checkExclude || !_arg.isHidden(this.excludeHiddenRows)) {
var _argV = _arg.getValue(); var _argV = _arg.getValue();
if ( _argV instanceof cNumber ) { if (cElementType.number === _argV.type) {
count++; count++;
} }
} }
else if ( _arg instanceof cArea || _arg instanceof cArea3D ) { } else if (cElementType.cellsRange === _arg.type || cElementType.cellsRange3D === _arg) {
var _argAreaValue = _arg.getValue(); var _argAreaValue = _arg.getValue(this.checkExclude, this.excludeHiddenRows);
for ( var j = 0; j < _argAreaValue.length; j++ ) { for (var j = 0; j < _argAreaValue.length; j++) {
if ( _argAreaValue[j] instanceof cNumber ) { if (cElementType.number === _argAreaValue[j].type) {
count++; count++;
} }
} }
} } else if (cElementType.number === _arg.type || cElementType.bool === _arg.type || cElementType.empty === _arg.type) {
else if ( _arg instanceof cNumber || _arg instanceof cBool || _arg instanceof cEmpty ) {
count++; count++;
} } else if (cElementType.string === _arg.type) {
else if ( _arg instanceof cString ) { if (cElementType.number === _arg.tocNumber().type) {
if ( _arg.tocNumber() instanceof cNumber )
count++; count++;
} }
else if ( _arg instanceof cArray ) { } else if (cElementType.array === _arg.type) {
_arg.foreach( function ( elem ) { _arg.foreach(function (elem) {
var e = elem.tocNumber(); if (cElementType.number === elem.tocNumber().type) {
if ( e instanceof cNumber ) {
count++; count++;
} }
} ) })
} }
} }
return this.value = new cNumber( count ); return this.value = new cNumber(count);
}; };
cCOUNT.prototype.getInfo = function () { cCOUNT.prototype.getInfo = function () {
return { return {
name:this.name, name: this.name, args: "( argument-list )"
args:"( argument-list )" };
}; };
};
function cCOUNTA() {
// cBaseFunction.call( this, "COUNTA" );
// this.setArgumentsMin( 1 );
// this.setArgumentsMax( 255 );
// this.setFormat( this.formatType.noneFormat );
/** @constructor */
function cCOUNTA() {
this.name = "COUNTA"; this.name = "COUNTA";
this.type = cElementType.func; this.type = cElementType.func;
this.value = null; this.value = null;
...@@ -1082,51 +1069,48 @@ function cCOUNTA() { ...@@ -1082,51 +1069,48 @@ function cCOUNTA() {
this.argumentsCurrent = 0; this.argumentsCurrent = 0;
this.argumentsMax = 255; this.argumentsMax = 255;
this.formatType = { this.formatType = {
def:-1, //подразумевается формат первой ячейки входящей в формулу. def: -1, //подразумевается формат первой ячейки входящей в формулу.
noneFormat:-2 noneFormat: -2
}; };
this.numFormat = this.formatType.noneFormat; this.numFormat = this.formatType.noneFormat;
}
} cCOUNTA.prototype = Object.create(cBaseFunction.prototype);
cCOUNTA.prototype.Calculate = function (arg) {
cCOUNTA.prototype = Object.create( cBaseFunction.prototype );
cCOUNTA.prototype.Calculate = function ( arg ) {
var count = 0; var count = 0;
for ( var i = 0; i < arg.length; i++ ) { for (var i = 0; i < arg.length; i++) {
var _arg = arg[i]; var _arg = arg[i];
if ( _arg instanceof cRef || _arg instanceof cRef3D ) { if (cElementType.cell === _arg.type || cElementType.cell3D === _arg.type) {
if (!this.checkExclude || !element.isHidden(this.excludeHiddenRows)) {
var _argV = _arg.getValue(); var _argV = _arg.getValue();
if ( !(_argV instanceof cEmpty) ) { if (cElementType.empty !== _argV.type) {
count++; count++;
} }
} }
else if ( _arg instanceof cArea || _arg instanceof cArea3D ) { } else if (cElementType.cellsRange === _arg.type || cElementType.cellsRange3D === _arg.type) {
var _argAreaValue = _arg.getValue(); var _argAreaValue = _arg.getValue(this.checkExclude, this.excludeHiddenRows);
for ( var j = 0; j < _argAreaValue.length; j++ ) { for (var j = 0; j < _argAreaValue.length; j++) {
if ( !(_argAreaValue[j] instanceof cEmpty) ) { if (cElementType.empty !== _argAreaValue[j].type) {
count++; count++;
} }
} }
} } else if (cElementType.array === _arg.type) {
else if ( _arg instanceof cArray ) { _arg.foreach(function (elem) {
_arg.foreach( function ( elem ) { if (cElementType.empty !== elem.type) {
if ( !(elem instanceof cEmpty) ) {
count++; count++;
} }
} ) })
} } else if (cElementType.empty !== _arg.type) {
else if ( !( _arg instanceof cEmpty ) ) {
count++; count++;
} }
} }
return this.value = new cNumber( count ); return this.value = new cNumber(count);
}; };
cCOUNTA.prototype.getInfo = function () { cCOUNTA.prototype.getInfo = function () {
return { return {
name:this.name, name: this.name, args: "( argument-list )"
args:"( argument-list )" };
}; };
};
function cCOUNTBLANK() { function cCOUNTBLANK() {
this.name = "COUNTBLANK"; this.name = "COUNTBLANK";
...@@ -2663,11 +2647,8 @@ cLOGNORMDIST.prototype.getInfo = function () { ...@@ -2663,11 +2647,8 @@ cLOGNORMDIST.prototype.getInfo = function () {
}; };
}; };
function cMAX() { /** @constructor */
// cBaseFunction.call( this, "MAX" ); function cMAX() {
// this.setArgumentsMin( 1 );
// this.setArgumentsMax( 255 );
this.name = "MAX"; this.name = "MAX";
this.type = cElementType.func; this.type = cElementType.func;
this.value = null; this.value = null;
...@@ -2675,81 +2656,84 @@ function cMAX() { ...@@ -2675,81 +2656,84 @@ function cMAX() {
this.argumentsCurrent = 0; this.argumentsCurrent = 0;
this.argumentsMax = 255; this.argumentsMax = 255;
this.formatType = { this.formatType = {
def:-1, //подразумевается формат первой ячейки входящей в формулу. def: -1, //подразумевается формат первой ячейки входящей в формулу.
noneFormat:-2 noneFormat: -2
}; };
this.numFormat = this.formatType.def; this.numFormat = this.formatType.def;
} }
cMAX.prototype = Object.create( cBaseFunction.prototype ); cMAX.prototype = Object.create(cBaseFunction.prototype);
cMAX.prototype.Calculate = function ( arg ) { cMAX.prototype.Calculate = function (arg) {
var argI, argIVal, max = Number.NEGATIVE_INFINITY; var v, argI, argIVal, max = Number.NEGATIVE_INFINITY;
for ( var i = 0; i < this.argumentsCurrent; i++ ) { for (var i = 0; i < this.argumentsCurrent; i++) {
argI = arg[i], argIVal = argI.getValue(); argI = arg[i];
if ( argI instanceof cRef || argI instanceof cRef3D ) { argIVal = argI.getValue();
if ( argIVal instanceof cError ) if (cElementType.cell === argI.type || cElementType.cell3D === argI.type) {
if (!this.checkExclude || !element.isHidden(this.excludeHiddenRows)) {
if (cElementType.error === argIVal.type) {
return this.value = argIVal; return this.value = argIVal;
if ( argIVal instanceof cNumber ) { }
var v = argIVal.tocNumber(); if (cElementType.number === argIVal.type) {
if ( v.getValue() > max ) v = argIVal.tocNumber();
if (v.getValue() > max) {
max = v.getValue(); max = v.getValue();
} }
} }
else if ( argI instanceof cArea || argI instanceof cArea3D ) { }
var argArr = argI.getValue(); } else if (cElementType.cellsRange === argI.type || cElementType.cellsRange3D === argI.type) {
for ( var j = 0; j < argArr.length; j++ ) { var argArr = argI.getValue(this.checkExclude, this.excludeHiddenRows);
if ( argArr[j] instanceof cNumber ) { for (var j = 0; j < argArr.length; j++) {
var v = argArr[j].tocNumber(); if (cElementType.number === argArr[j].type) {
if ( v.getValue() > max ) v = argArr[j].tocNumber();
if (v.getValue() > max) {
max = v.getValue(); max = v.getValue();
} }
else if ( argArr[j] instanceof cError ) { } else if (cElementType.error === argArr[j].type) {
return this.value = argArr[j]; return this.value = argArr[j];
} }
} }
} } else if (cElementType.error === argI.type) {
else if ( argI instanceof cError )
return this.value = argI; return this.value = argI;
else if ( argI instanceof cString ) { } else if (cElementType.string === argI.type) {
var v = argI.tocNumber(); v = argI.tocNumber();
if ( v instanceof cNumber ) if (cElementType.number === v.type) {
if ( v.getValue() > max ) if (v.getValue() > max) {
max = v.getValue(); max = v.getValue();
} }
else if ( argI instanceof cBool || argI instanceof cEmpty ) { }
var v = argI.tocNumber(); } else if (cElementType.bool === argI.type || cElementType.empty === argI.type) {
if ( v.getValue() > max ) v = argI.tocNumber();
if (v.getValue() > max) {
max = v.getValue(); max = v.getValue();
} }
else if ( argI instanceof cArray ) { } else if (cElementType.array === argI.type) {
argI.foreach( function ( elem ) { argI.foreach(function (elem) {
if ( elem instanceof cNumber ) { if (cElementType.number === elem.type) {
if ( elem.getValue() > max ) if (elem.getValue() > max) {
max = elem.getValue(); max = elem.getValue();
} }
else if ( elem instanceof cError ) { } else if (cElementType.error === elem.type) {
max = elem; max = elem;
return true; return true;
} }
} ); });
if ( max instanceof cError ) { if (cElementType.error === max.type) {
return this.value = max; return this.value = max;
} }
} } else {
else { if (argI.getValue() > max) {
if ( argI.getValue() > max )
max = argI.getValue(); max = argI.getValue();
} }
} }
return this.value = ( max === Number.NEGATIVE_INFINITY ? new cNumber( 0 ) : new cNumber( max ) ); }
}; return this.value = (max === Number.NEGATIVE_INFINITY ? new cNumber(0) : new cNumber(max));
cMAX.prototype.getInfo = function () { };
cMAX.prototype.getInfo = function () {
return { return {
name:this.name, name: this.name, args: "(number1, number2, ...)"
args:"(number1, number2, ...)" };
}; };
};
function cMAXA() { function cMAXA() {
// cBaseFunction.call( this, "MAXA" ); // cBaseFunction.call( this, "MAXA" );
...@@ -2927,11 +2911,8 @@ cMEDIAN.prototype.getInfo = function () { ...@@ -2927,11 +2911,8 @@ cMEDIAN.prototype.getInfo = function () {
}; };
}; };
function cMIN() { /** @constructor */
// cBaseFunction.call( this, "MIN" ); function cMIN() {
// this.setArgumentsMin( 1 );
// this.setArgumentsMax( 255 );
this.name = "MIN"; this.name = "MIN";
this.type = cElementType.func; this.type = cElementType.func;
this.value = null; this.value = null;
...@@ -2939,82 +2920,85 @@ function cMIN() { ...@@ -2939,82 +2920,85 @@ function cMIN() {
this.argumentsCurrent = 0; this.argumentsCurrent = 0;
this.argumentsMax = 255; this.argumentsMax = 255;
this.formatType = { this.formatType = {
def:-1, //подразумевается формат первой ячейки входящей в формулу. def: -1, //подразумевается формат первой ячейки входящей в формулу.
noneFormat:-2 noneFormat: -2
}; };
this.numFormat = this.formatType.def; this.numFormat = this.formatType.def;
} }
cMIN.prototype = Object.create( cBaseFunction.prototype ); cMIN.prototype = Object.create(cBaseFunction.prototype);
cMIN.prototype.Calculate = function ( arg ) { cMIN.prototype.Calculate = function (arg) {
var argI, argIVal, min = Number.POSITIVE_INFINITY; var v, argI, argIVal, min = Number.POSITIVE_INFINITY;
for ( var i = 0; i < this.argumentsCurrent; i++ ) { for (var i = 0; i < this.argumentsCurrent; i++) {
argI = arg[i], argIVal = argI.getValue(); argI = arg[i];
if ( argI instanceof cRef || argI instanceof cRef3D ) { argIVal = argI.getValue();
if ( argIVal instanceof cError ) if (cElementType.cell === argI.type || cElementType.cell3D === argI.type) {
if (!this.checkExclude || !element.isHidden(this.excludeHiddenRows)) {
if (cElementType.error === argIVal.type) {
return this.value = argIVal; return this.value = argIVal;
if ( argIVal instanceof cNumber ) { }
var v = argIVal.tocNumber(); if (cElementType.number === argIVal.type) {
if ( v.getValue() < min ) v = argIVal.tocNumber();
if (v.getValue() < min) {
min = v.getValue(); min = v.getValue();
} }
} }
else if ( argI instanceof cArea || argI instanceof cArea3D ) { }
var argArr = argI.getValue(); } else if (cElementType.cellsRange === argI.type || cElementType.cellsRange3D === argI.type) {
for ( var j = 0; j < argArr.length; j++ ) { var argArr = argI.getValue(this.checkExclude, this.excludeHiddenRows);
if ( argArr[j] instanceof cNumber ) { for (var j = 0; j < argArr.length; j++) {
var v = argArr[j].tocNumber(); if (cElementType.number === argArr[j].type) {
if ( v.getValue() < min ) v = argArr[j].tocNumber();
if (v.getValue() < min) {
min = v.getValue(); min = v.getValue();
continue;
} }
else if ( argArr[j] instanceof cError ) { continue;
} else if (cElementType.error === argArr[j].type) {
return this.value = argArr[j]; return this.value = argArr[j];
} }
} }
} } else if (cElementType.error === argI.type) {
else if ( argI instanceof cError )
return this.value = argI; return this.value = argI;
else if ( argI instanceof cString ) { } else if (cElementType.string === argI.type) {
var v = argI.tocNumber(); v = argI.tocNumber();
if ( v instanceof cNumber ) if (cElementType.number === v.type) {
if ( v.getValue() < min ) if (v.getValue() < min) {
min = v.getValue(); min = v.getValue();
} }
else if ( argI instanceof cBool || argI instanceof cEmpty ) { }
var v = argI.tocNumber(); } else if (cElementType.bool === argI.type || cElementType.empty === argI.type) {
if ( v.getValue() < min ) v = argI.tocNumber();
if (v.getValue() < min) {
min = v.getValue(); min = v.getValue();
} }
else if ( argI instanceof cArray ) { } else if (cElementType.array === argI.type) {
argI.foreach( function ( elem ) { argI.foreach(function (elem) {
if ( elem instanceof cNumber ) { if (cElementType.number === elem.type) {
if ( elem.getValue() < min ) if (elem.getValue() < min) {
min = elem.getValue(); min = elem.getValue();
} }
else if ( elem instanceof cError ) { } else if (cElementType.error === elem.type) {
min = elem; min = elem;
return true; return true;
} }
} ) });
if ( min instanceof cError ) { if (cElementType.error === min.type) {
return this.value = min; return this.value = min;
} }
} } else {
else { if (argI.getValue() < min) {
if ( argI.getValue() < min )
min = argI.getValue(); min = argI.getValue();
} }
} }
return this.value = ( min === Number.POSITIVE_INFINITY ? new cNumber( 0 ) : new cNumber( min ) ); }
}; return this.value = ( min === Number.POSITIVE_INFINITY ? new cNumber(0) : new cNumber(min) );
cMIN.prototype.getInfo = function () { };
cMIN.prototype.getInfo = function () {
return { return {
name:this.name, name: this.name, args: "(number1, number2, ...)"
args:"(number1, number2, ...)" };
}; };
};
function cMINA() { function cMINA() {
// cBaseFunction.call( this, "MINA" ); // cBaseFunction.call( this, "MINA" );
...@@ -4724,12 +4708,8 @@ cSTANDARDIZE.prototype.getInfo = function () { ...@@ -4724,12 +4708,8 @@ cSTANDARDIZE.prototype.getInfo = function () {
}; };
}; };
function cSTDEV() { /** @constructor */
// cBaseFunction.call( this, "STDEV" ); function cSTDEV() {
// this.setArgumentsMin( 1 );
// this.setArgumentsMax( 255 );
// this.setFormat( this.formatType.noneFormat );
this.name = "STDEV"; this.name = "STDEV";
this.type = cElementType.func; this.type = cElementType.func;
this.value = null; this.value = null;
...@@ -4737,69 +4717,67 @@ function cSTDEV() { ...@@ -4737,69 +4717,67 @@ function cSTDEV() {
this.argumentsCurrent = 0; this.argumentsCurrent = 0;
this.argumentsMax = 255; this.argumentsMax = 255;
this.formatType = { this.formatType = {
def:-1, //подразумевается формат первой ячейки входящей в формулу. def: -1, //подразумевается формат первой ячейки входящей в формулу.
noneFormat:-2 noneFormat: -2
}; };
this.numFormat = this.formatType.noneFormat; this.numFormat = this.formatType.noneFormat;
} }
cSTDEV.prototype = Object.create( cBaseFunction.prototype ); cSTDEV.prototype = Object.create(cBaseFunction.prototype);
cSTDEV.prototype.Calculate = function ( arg ) { cSTDEV.prototype.Calculate = function (arg) {
var count = 0, sum = new cNumber( 0 ), member = []; var i, count = 0, sum = new cNumber(0), member = [];
for ( var i = 0; i < arg.length; i++ ) { for (i = 0; i < arg.length; i++) {
var _arg = arg[i]; var _arg = arg[i];
if ( _arg instanceof cRef || _arg instanceof cRef3D ) { if (cElementType.cell === _arg.type || cElementType.cell3D === _arg.type) {
if (!this.checkExclude || !element.isHidden(this.excludeHiddenRows)) {
var _argV = _arg.getValue(); var _argV = _arg.getValue();
if ( _argV instanceof cNumber ) { if (cElementType.number === _argV.type) {
member.push( _argV ); member.push(_argV);
sum = _func[sum.type][_argV.type]( sum, _argV, "+" ); sum = _func[sum.type][_argV.type](sum, _argV, "+");
count++; count++;
} }
} }
else if ( _arg instanceof cArea || _arg instanceof cArea3D ) { } else if (cElementType.cellsRange === _arg.type || cElementType.cellsRange3D === _arg.type) {
var _argAreaValue = _arg.getValue(); var _argAreaValue = _arg.getValue(this.checkExclude, this.excludeHiddenRows);
for ( var j = 0; j < _argAreaValue.length; j++ ) { for (var j = 0; j < _argAreaValue.length; j++) {
var __arg = _argAreaValue[j]; var __arg = _argAreaValue[j];
if ( __arg instanceof cNumber ) { if (cElementType.number === __arg.type) {
member.push( __arg ); member.push(__arg);
sum = _func[sum.type][__arg.type]( sum, __arg, "+" ); sum = _func[sum.type][__arg.type](sum, __arg, "+");
count++; count++;
} }
} }
} } else if (cElementType.array === _arg.type) {
else if ( _arg instanceof cArray ) { _arg.foreach(function (elem) {
_arg.foreach( function ( elem ) {
var e = elem.tocNumber(); var e = elem.tocNumber();
if ( e instanceof cNumber ) { if (cElementType.number === e.type) {
member.push( e ); member.push(e);
sum = _func[sum.type][e.type]( sum, e, "+" ); sum = _func[sum.type][e.type](sum, e, "+");
count++; count++;
} }
} ) })
} } else {
else {
_arg = _arg.tocNumber(); _arg = _arg.tocNumber();
if ( _arg instanceof cNumber ) { if (cElementType.number === _arg.type) {
member.push( _arg ); member.push(_arg);
sum = _func[sum.type][_arg.type]( sum, _arg, "+" ); sum = _func[sum.type][_arg.type](sum, _arg, "+");
count++; count++;
} }
} }
} }
var average = sum.getValue() / count, res = 0, av; var average = sum.getValue() / count, res = 0, av;
for ( var i = 0; i < member.length; i++ ) { for (i = 0; i < member.length; i++) {
av = member[i] - average; av = member[i] - average;
res += av * av; res += av * av;
} }
return this.value = new cNumber( Math.sqrt( res / (count - 1) ) ); return this.value = new cNumber(Math.sqrt(res / (count - 1)));
}; };
cSTDEV.prototype.getInfo = function () { cSTDEV.prototype.getInfo = function () {
return { return {
name:this.name, name: this.name, args: "( argument-list )"
args:"( argument-list )" };
}; };
};
function cSTDEVA() { function cSTDEVA() {
// cBaseFunction.call( this, "STDEVA" ); // cBaseFunction.call( this, "STDEVA" );
...@@ -4878,9 +4856,8 @@ cSTDEVA.prototype.getInfo = function () { ...@@ -4878,9 +4856,8 @@ cSTDEVA.prototype.getInfo = function () {
}; };
}; };
function cSTDEVP() { /** @constructor */
// cBaseFunction.call( this, "STDEVP" ); function cSTDEVP() {
this.name = "STDEVP"; this.name = "STDEVP";
this.type = cElementType.func; this.type = cElementType.func;
this.value = null; this.value = null;
...@@ -4888,27 +4865,23 @@ function cSTDEVP() { ...@@ -4888,27 +4865,23 @@ function cSTDEVP() {
this.argumentsCurrent = 0; this.argumentsCurrent = 0;
this.argumentsMax = 255; this.argumentsMax = 255;
this.formatType = { this.formatType = {
def:-1, //подразумевается формат первой ячейки входящей в формулу. def: -1, //подразумевается формат первой ячейки входящей в формулу.
noneFormat:-2 noneFormat: -2
}; };
this.numFormat = this.formatType.def; this.numFormat = this.formatType.def;
}
} cSTDEVP.prototype = Object.create(cBaseFunction.prototype);
cSTDEVP.prototype.Calculate = function (arg) {
cSTDEVP.prototype = Object.create( cBaseFunction.prototype ); function _var(x) {
cSTDEVP.prototype.Calculate = function ( arg ) { var i, tA = [], sumSQRDeltaX = 0, _x = 0, xLength = 0;
for (i = 0; i < x.length; i++) {
function _var( x ) {
var tA = [], sumSQRDeltaX = 0, _x = 0, xLength = 0;
for ( var i = 0; i < x.length; i++ ) {
if ( x[i] instanceof cNumber ) { if (cElementType.number === x[i].type) {
_x += x[i].getValue(); _x += x[i].getValue();
tA.push( x[i].getValue() ); tA.push(x[i].getValue());
xLength++; xLength++;
} } else if (cElementType.error === x[i].type) {
else if ( x[i] instanceof cError ) {
return x[i]; return x[i];
} }
...@@ -4916,58 +4889,53 @@ cSTDEVP.prototype.Calculate = function ( arg ) { ...@@ -4916,58 +4889,53 @@ cSTDEVP.prototype.Calculate = function ( arg ) {
_x /= xLength; _x /= xLength;
for ( var i = 0; i < x.length; i++ ) { for (i = 0; i < x.length; i++) {
sumSQRDeltaX += (tA[i] - _x) * (tA[i] - _x) sumSQRDeltaX += (tA[i] - _x) * (tA[i] - _x)
} }
return new cNumber( isNaN(_x) ? new cError( cErrorType.division_by_zero ) : Math.sqrt( sumSQRDeltaX / xLength ) ); return new cNumber(isNaN(_x) ? new cError(cErrorType.division_by_zero) : Math.sqrt(sumSQRDeltaX / xLength));
} }
var arr0 = []; var arr0 = [];
for ( var j = 0; j < arg.length; j++ ) { for (var j = 0; j < arg.length; j++) {
var _arg = arg[j]; var _arg = arg[j];
if ( _arg instanceof cArea || _arg instanceof cArea3D ) { if (cElementType.cellsRange === _arg.type || cElementType.cellsRange3D === _arg.type) {
_arg.foreach2( function ( elem ) { var _arrVal = arg.getValue(this.checkExclude, this.excludeHiddenRows);
if ( elem instanceof cNumber || elem instanceof cError ) { _arrVal.forEach(function (elem) {
arr0.push( elem ); if (cElementType.number === elem.type || cElementType.error === elem.type) {
} arr0.push(elem);
} ); }
} });
else if ( _arg instanceof cRef || _arg instanceof cRef3D ) { } else if (cElementType.cell === _arg.type || cElementType.cell3D === _arg.type) {
if (!this.checkExclude || !element.isHidden(this.excludeHiddenRows)) {
var a = _arg.getValue(); var a = _arg.getValue();
if ( a instanceof cNumber || a instanceof cError ) { if (cElementType.number === a.type || cElementType.error === a.type) {
arr0.push( a ); arr0.push(a);
}
}
else if ( _arg instanceof cArray ) {
_arg.foreach( function ( elem ) {
if ( elem instanceof cNumber || elem instanceof cError ) {
arr0.push( elem );
} }
} );
} }
else if ( _arg instanceof cNumber || _arg instanceof cBool ) { } else if (cElementType.array === _arg.type) {
arr0.push( _arg.tocNumber() ); _arg.foreach(function (elem) {
if (cElementType.number === elem.type || cElementType.error === elem.type) {
arr0.push(elem);
} }
else if ( _arg instanceof cString || _arg instanceof cEmpty ) { });
arr0.push( new cNumber( 0 ) ); } else if (cElementType.number === _arg.type || cElementType.bool === _arg.type) {
arr0.push(_arg.tocNumber());
} else if (cElementType.string === _arg.type || cElementType.empty === _arg.type) {
arr0.push(new cNumber(0));
} else {
return this.value = new cError(cErrorType.wrong_value_type);
} }
else
return this.value = new cError( cErrorType.wrong_value_type );
} }
return this.value = _var( arr0 ); return this.value = _var(arr0);
}; };
cSTDEVP.prototype.getInfo = function () { cSTDEVP.prototype.getInfo = function () {
return { return {
name:this.name, name: this.name, args: "( argument-list )"
args:"( argument-list )" };
}; };
};
function cSTDEVPA() { function cSTDEVPA() {
// cBaseFunction.call( this, "STDEVPA" ); // cBaseFunction.call( this, "STDEVPA" );
...@@ -5202,11 +5170,8 @@ function cTTEST() { ...@@ -5202,11 +5170,8 @@ function cTTEST() {
cTTEST.prototype = Object.create( cBaseFunction.prototype ); cTTEST.prototype = Object.create( cBaseFunction.prototype );
function cVAR() { /** @constructor */
// cBaseFunction.call( this, "VAR" ); function cVAR() {
// this.setArgumentsMin( 1 );
// this.setArgumentsMax( 255 );
this.name = "VAR"; this.name = "VAR";
this.type = cElementType.func; this.type = cElementType.func;
this.value = null; this.value = null;
...@@ -5214,31 +5179,28 @@ function cVAR() { ...@@ -5214,31 +5179,28 @@ function cVAR() {
this.argumentsCurrent = 0; this.argumentsCurrent = 0;
this.argumentsMax = 255; this.argumentsMax = 255;
this.formatType = { this.formatType = {
def:-1, //подразумевается формат первой ячейки входящей в формулу. def: -1, //подразумевается формат первой ячейки входящей в формулу.
noneFormat:-2 noneFormat: -2
}; };
this.numFormat = this.formatType.def; this.numFormat = this.formatType.def;
} }
cVAR.prototype = Object.create( cBaseFunction.prototype );
cVAR.prototype.Calculate = function ( arg ) {
function _var( x ) {
if( x.length < 1 ){ cVAR.prototype = Object.create(cBaseFunction.prototype);
return new cError( cErrorType.division_by_zero ); cVAR.prototype.Calculate = function (arg) {
function _var(x) {
if (x.length < 1) {
return new cError(cErrorType.division_by_zero);
} }
var tA = [], sumSQRDeltaX = 0, _x = 0, xLength = 0; var i, tA = [], sumSQRDeltaX = 0, _x = 0, xLength = 0;
for ( var i = 0; i < x.length; i++ ) { for (i = 0; i < x.length; i++) {
if ( x[i] instanceof cNumber ) { if (cElementType.number === x[i].type) {
_x += x[i].getValue(); _x += x[i].getValue();
tA.push( x[i].getValue() ); tA.push(x[i].getValue());
xLength++; xLength++;
} } else if (cElementType.error === x[i].type) {
else if ( x[i] instanceof cError ) {
return x[i]; return x[i];
} }
...@@ -5246,60 +5208,55 @@ cVAR.prototype.Calculate = function ( arg ) { ...@@ -5246,60 +5208,55 @@ cVAR.prototype.Calculate = function ( arg ) {
_x /= xLength; _x /= xLength;
for ( var i = 0; i < x.length; i++ ) { for (i = 0; i < x.length; i++) {
sumSQRDeltaX += (tA[i] - _x) * (tA[i] - _x) sumSQRDeltaX += (tA[i] - _x) * (tA[i] - _x)
} }
return new cNumber( sumSQRDeltaX / (xLength - 1) ) return new cNumber(sumSQRDeltaX / (xLength - 1))
} }
var arr0 = []; var arr0 = [];
for ( var j = 0; j < arg.length; j++ ) { for (var j = 0; j < arg.length; j++) {
var _arg = arg[j]; var _arg = arg[j];
if ( _arg instanceof cArea || _arg instanceof cArea3D ) { if (cElementType.cellsRange === _arg.type || cElementType.cellsRange3D === _arg.type) {
_arg.foreach2( function ( elem ) { var _arrVal = _arg.getValue(this.checkExclude, this.excludeHiddenRows);
if ( elem instanceof cNumber || elem instanceof cError ){ _arrVal.forEach(function (elem) {
arr0.push( elem ); if (cElementType.number === elem.type || cElementType.error === elem.type) {
} arr0.push(elem);
} ); }
} });
else if ( _arg instanceof cRef || _arg instanceof cRef3D ) { } else if (cElementType.cell === _arg.type || cElementType.cell3D === _arg.type) {
if (!this.checkExclude || !element.isHidden(this.excludeHiddenRows)) {
var a = _arg.getValue(); var a = _arg.getValue();
if ( a instanceof cNumber || a instanceof cError ){ if (cElementType.number === a.type || cElementType.error === a.type) {
arr0.push( a ); arr0.push(a);
}
} }
else if ( _arg instanceof cArray ) {
_arg.foreach( function ( elem ) {
if ( elem instanceof cNumber || elem instanceof cError ){
arr0.push( elem );
} }
} ); } else if (cElementType.array === _arg.type) {
} _arg.foreach(function (elem) {
else if ( _arg instanceof cNumber || _arg instanceof cBool ) { if (cElementType.number === elem.type || cElementType.error === elem.type) {
arr0.push( _arg.tocNumber() ); arr0.push(elem);
} }
else if ( _arg instanceof cString || _arg instanceof cEmpty ) { });
} else if (cElementType.number === _arg.type || cElementType.bool === _arg.type) {
arr0.push(_arg.tocNumber());
} else if (cElementType.string === _arg.type || cElementType.empty === _arg.type) {
continue; continue;
} } else {
else{ return this.value = new cError(cErrorType.wrong_value_type);
return this.value = new cError( cErrorType.wrong_value_type );
} }
} }
return this.value = _var( arr0 ); return this.value = _var(arr0);
}; };
cVAR.prototype.getInfo = function () { cVAR.prototype.getInfo = function () {
return { return {
name:this.name, name: this.name, args: "( argument-list )"
args:"( argument-list )" };
}; };
};
function cVARA() { function cVARA() {
// cBaseFunction.call( this, "VARA" ); // cBaseFunction.call( this, "VARA" );
...@@ -5415,9 +5372,8 @@ cVARA.prototype.getInfo = function () { ...@@ -5415,9 +5372,8 @@ cVARA.prototype.getInfo = function () {
}; };
}; };
function cVARP() { /** @constructor */
// cBaseFunction.call( this, "VARP" ); function cVARP() {
this.name = "VARP"; this.name = "VARP";
this.type = cElementType.func; this.type = cElementType.func;
this.value = null; this.value = null;
...@@ -5425,31 +5381,28 @@ function cVARP() { ...@@ -5425,31 +5381,28 @@ function cVARP() {
this.argumentsCurrent = 0; this.argumentsCurrent = 0;
this.argumentsMax = 255; this.argumentsMax = 255;
this.formatType = { this.formatType = {
def:-1, //подразумевается формат первой ячейки входящей в формулу. def: -1, //подразумевается формат первой ячейки входящей в формулу.
noneFormat:-2 noneFormat: -2
}; };
this.numFormat = this.formatType.def; this.numFormat = this.formatType.def;
} }
cVARP.prototype = Object.create( cBaseFunction.prototype );
cVARP.prototype.Calculate = function ( arg ) {
function _var( x ) {
if( x.length < 1 ){ cVARP.prototype = Object.create(cBaseFunction.prototype);
return new cError( cErrorType.division_by_zero ); cVARP.prototype.Calculate = function (arg) {
function _var(x) {
if (x.length < 1) {
return new cError(cErrorType.division_by_zero);
} }
var tA = [], sumSQRDeltaX = 0, _x = 0, xLength = 0; var tA = [], sumSQRDeltaX = 0, _x = 0, xLength = 0;
for ( var i = 0; i < x.length; i++ ) { for (var i = 0; i < x.length; i++) {
if ( x[i] instanceof cNumber ) { if (cElementType.number === x[i].type) {
_x += x[i].getValue(); _x += x[i].getValue();
tA.push( x[i].getValue() ); tA.push(x[i].getValue());
xLength++; xLength++;
} } else if (cElementType.error === x[i].type) {
else if ( x[i] instanceof cError ) {
return x[i]; return x[i];
} }
...@@ -5457,58 +5410,54 @@ cVARP.prototype.Calculate = function ( arg ) { ...@@ -5457,58 +5410,54 @@ cVARP.prototype.Calculate = function ( arg ) {
_x /= xLength; _x /= xLength;
for ( var i = 0; i < x.length; i++ ) { for (var i = 0; i < x.length; i++) {
sumSQRDeltaX += (tA[i] - _x) * (tA[i] - _x); sumSQRDeltaX += (tA[i] - _x) * (tA[i] - _x);
} }
return new cNumber( sumSQRDeltaX / xLength ); return new cNumber(sumSQRDeltaX / xLength);
} }
var arr0 = []; var arr0 = [];
for ( var j = 0; j < arg.length; j++ ) { for (var j = 0; j < arg.length; j++) {
var _arg = arg[j]; var _arg = arg[j];
if ( _arg instanceof cArea || _arg instanceof cArea3D ) { if (cElementType.cellsRange === _arg.type || cElementType.cellsRange3D === _arg.type) {
_arg.foreach2( function ( elem ) { var _arrVal = _arg.getValue(this.checkExclude, this.excludeHiddenRows);
if ( elem instanceof cNumber || elem instanceof cError ) { _arrVal.forEach(function (elem) {
arr0.push( elem ); if (cElementType.number === elem.type || cElementType.error === elem.type) {
} arr0.push(elem);
} ); }
} });
else if ( _arg instanceof cRef || _arg instanceof cRef3D ) { } else if (cElementType.cell === _arg.type || cElementType.cell3D === _arg.type) {
if (!this.checkExclude || !element.isHidden(this.excludeHiddenRows)) {
var a = _arg.getValue(); var a = _arg.getValue();
if ( a instanceof cNumber || a instanceof cError ) { if (cElementType.number === a.type || cElementType.error === a.type) {
arr0.push( a ); arr0.push(a);
}
}
else if ( _arg instanceof cArray ) {
_arg.foreach( function ( elem ) {
if ( elem instanceof cNumber || elem instanceof cError ) {
arr0.push( elem );
} }
} );
} }
else if ( _arg instanceof cNumber || _arg instanceof cBool ) { } else if (cElementType.array === _arg.type) {
arr0.push( _arg.tocNumber() ); _arg.foreach(function (elem) {
if (cElementType.number === elem.type || cElementType.error === elem.type) {
arr0.push(elem);
} }
else if ( _arg instanceof cString || _arg instanceof cEmpty ) { });
arr0.push( new cNumber( 0 ) ); } else if (cElementType.number === _arg.type || cElementType.bool === _arg.type) {
arr0.push(_arg.tocNumber());
} else if (cElementType.string === _arg.type || cElementType.empty === _arg.type) {
arr0.push(new cNumber(0));
} else {
return this.value = new cError(cErrorType.wrong_value_type);
} }
else
return this.value = new cError( cErrorType.wrong_value_type );
} }
return this.value = _var( arr0 ); return this.value = _var(arr0);
}; };
cVARP.prototype.getInfo = function () { cVARP.prototype.getInfo = function () {
return { return {
name:this.name, name: this.name, args: "( argument-list )"
args:"( argument-list )" };
}; };
};
function cVARdotP() { function cVARdotP() {
// cBaseFunction.call( this, "VARP" ); // cBaseFunction.call( this, "VARP" );
......
...@@ -5465,7 +5465,7 @@ Woorksheet.prototype.getTableNameColumnByIndex = function(tableName, columnIndex ...@@ -5465,7 +5465,7 @@ Woorksheet.prototype.getTableNameColumnByIndex = function(tableName, columnIndex
} }
return res; return res;
}; };
Woorksheet.prototype.bIsApplyFilterBySheet = function(){ Woorksheet.prototype.isApplyFilterBySheet = function(){
var res = false; var res = false;
if(this.AutoFilter && this.AutoFilter.isApplyAutoFilter()) if(this.AutoFilter && this.AutoFilter.isApplyAutoFilter())
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment