Commit 97d5c7ab authored by Dmitry.Shahtanov's avatar Dmitry.Shahtanov Committed by Alexander.Trofimov

fixed: Bug 19651 - Ошибка при вычислении формулы AVERAGEIF критерий в которой...

fixed: Bug 19651 - Ошибка при вычислении формулы AVERAGEIF критерий в которой задан знаком равенства с маской

git-svn-id: svn://192.168.3.15/activex/AVS/Sources/TeamlabOffice/trunk/OfficeWeb@49035 954022d7-b5bf-4e40-9824-e11837661b57
parent adda55ea
......@@ -41,18 +41,18 @@
<script type="text/javascript" src="../model/CollaborativeEditing.js"></script>
<script type="text/javascript" src="../model/ConditionalFormatting.js"></script>
<script type="text/javascript" src="../model/parserFormula.js"></script>
<script type="text/javascript" src="../model/dateandtimeFunctions.js"></script>
<script type="text/javascript" src="../model/engineeringFunctions.js"></script>
<script type="text/javascript" src="../model/cubeFunctions.js"></script>
<script type="text/javascript" src="../model/databaseFunctions.js"></script>
<script type="text/javascript" src="../model/textanddataFunctions.js"></script>
<script type="text/javascript" src="../model/statisticalFunctions.js"></script>
<script type="text/javascript" src="../model/financialFunctions.js"></script>
<script type="text/javascript" src="../model/mathematicFunctions.js"></script>
<script type="text/javascript" src="../model/lookupandreferenceFunctions.js"></script>
<script type="text/javascript" src="../model/informationFunctions.js"></script>
<script type="text/javascript" src="../model/logicalFunctions.js"></script>
<script type="text/javascript" src="../model/FormulaObjects/parserFormula.js"></script>
<script type="text/javascript" src="../model/FormulaObjects/dateandtimeFunctions.js"></script>
<script type="text/javascript" src="../model/FormulaObjects/engineeringFunctions.js"></script>
<script type="text/javascript" src="../model/FormulaObjects/cubeFunctions.js"></script>
<script type="text/javascript" src="../model/FormulaObjects/databaseFunctions.js"></script>
<script type="text/javascript" src="../model/FormulaObjects/textanddataFunctions.js"></script>
<script type="text/javascript" src="../model/FormulaObjects/statisticalFunctions.js"></script>
<script type="text/javascript" src="../model/FormulaObjects/financialFunctions.js"></script>
<script type="text/javascript" src="../model/FormulaObjects/mathematicFunctions.js"></script>
<script type="text/javascript" src="../model/FormulaObjects/lookupandreferenceFunctions.js"></script>
<script type="text/javascript" src="../model/FormulaObjects/informationFunctions.js"></script>
<script type="text/javascript" src="../model/FormulaObjects/logicalFunctions.js"></script>
<script type="text/javascript" src="../model/CellComment.js"></script>
<script type="text/javascript" src="../../Common/NumFormat.js"></script>
<script type="text/javascript" src="../model/Serialize.js"></script>
......
......@@ -242,15 +242,16 @@ cFormulaFunction.LookupAndReference = {
if ( arg0 instanceof cString ) {
valueForSearching = arg0.getValue();
valueForSearching = valueForSearching
.replace( /(~)?\*/g, function ( $0, $1 ) {
/*valueForSearching = valueForSearching
.replace( /(~)?\*//*g, function ( $0, $1 ) {
return $1 ? $0 : '[\\w\\W]*';
} )
.replace( /(~)?\?/g, function ( $0, $1 ) {
return $1 ? $0 : '[\\w\\W]{1,1}';
} )
.replace( /\~/g, "\\" );
regexp = new XRegExp( valueForSearching + "$", "i" );
regexp = new XRegExp( valueForSearching + "$", "i" );*/
regexp = searchRegExp(valueForSearching);
}
else if ( arg0 instanceof cError )
return this.value = arg0;
......@@ -672,15 +673,16 @@ cFormulaFunction.LookupAndReference = {
if ( arg0 instanceof cString ) {
valueForSearching = arg0.getValue();
valueForSearching = valueForSearching
.replace( /(~)?\*/g, function ( $0, $1 ) {
/*valueForSearching = valueForSearching
.replace( /(~)?\*//*g, function ( $0, $1 ) {
return $1 ? $0 : '[\\w\\W]*';
} )
.replace( /(~)?\?/g, function ( $0, $1 ) {
return $1 ? $0 : '[\\w\\W]{1,1}';
} )
.replace( /\~/g, "\\" );
regexp = new XRegExp( valueForSearching + "$", "i" );
regexp = new XRegExp( valueForSearching + "$", "i" );*/
regexp = searchRegExp(valueForSearching);
}
else if ( arg0 instanceof cError )
return this.value = arg0;
......
......@@ -3048,9 +3048,21 @@ cFormulaFunction.Mathematic = {
return this.value = new cError( cErrorType.wrong_value_type );
}
function matching( x, y, oper, startCell, pos ) {
var res = false;
if ( typeof x === typeof y ) {
function matching( x, y, oper ) {
var res = false, rS;
if ( y instanceof cString ) {
rS = searchRegExp(y.toString())
switch ( oper ) {
case "<>":
res = !rS.test( x.value );
break;
case "=":
default:
res = rS.test( x.value );
break;
}
}
else if ( typeof x === typeof y ) {
switch ( oper ) {
case "<>":
res = (x.value != y.value);
......@@ -3077,37 +3089,22 @@ cFormulaFunction.Mathematic = {
}
arg1 = arg1.toString();
var operators = new RegExp( "^ *[<=> ]+ *" );
var match = arg1.match( operators );
if ( match || parseNum( arg1 ) ) {
var search, oper, val;
if ( match ) {
search = arg1.substr( match[0].length );
oper = match[0].replace( /\s/g, "" );
}
else {
search = arg1;
}
valueForSearching = parseNum( search ) ? new cNumber( search ) : new cString( search );
if ( arg0 instanceof cArea ) {
val = arg0.getValue();
for ( var i = 0; i < val.length; i++ ) {
if ( matching( val[i], valueForSearching, oper ) ) {
var r = arg0.getRange(), ws = arg0.getWS(),
r1 = r.first.getRow0() + i, c1 = arg2.getRange().first.getCol0();
r = new cRef( ws.getRange3( r1, c1, r1, c1 ).getName(), ws );
if ( r.getValue() instanceof cNumber ) {
_sum += r.getValue().getValue();
}
}
}
}
else {
val = arg0.getValue();
if ( matching( val, valueForSearching, oper ) ) {
var operators = new RegExp( "^ *[<=> ]+ *" ), match = arg1.match( operators ),
search, oper, val;
if ( match ) {
search = arg1.substr( match[0].length );
oper = match[0].replace( /\s/g, "" );
}
else {
search = arg1;
}
valueForSearching = parseNum( search ) ? new cNumber( search ) : new cString( search );
if ( arg0 instanceof cArea ) {
val = arg0.getValue();
for ( var i = 0; i < val.length; i++ ) {
if ( matching( val[i], valueForSearching, oper ) ) {
var r = arg0.getRange(), ws = arg0.getWS(),
r1 = r.first.getRow0() + 0, c1 = arg2.getRange().first.getCol0();
r1 = r.first.getRow0() + i, c1 = arg2.getRange().first.getCol0();
r = new cRef( ws.getRange3( r1, c1, r1, c1 ).getName(), ws );
if ( r.getValue() instanceof cNumber ) {
_sum += r.getValue().getValue();
......@@ -3116,37 +3113,13 @@ cFormulaFunction.Mathematic = {
}
}
else {
valueForSearching = arg1
.replace( /(~)?\*/g, function ( $0, $1 ) {
return $1 ? $0 : '[\\w\\W]*';
} )
.replace( /(~)?\?/g, function ( $0, $1 ) {
return $1 ? $0 : '[\\w\\W]{1,1}';
} )
.replace( /(~\*)/g, "\\*" ).replace( /(~\?)/g, "\\?" );
regexpSearch = new RegExp( valueForSearching + "$", "i" );
if ( arg0 instanceof cArea ) {
val = arg0.getValue();
for ( var i = 0; i < val.length; i++ ) {
if ( regexpSearch.test( val[i].value ) ) {
var r = arg0.getRange(), ws = arg0.getWS(),
r1 = r.first.getRow0() + i, c1 = arg2.getRange().first.getCol0();
r = new cRef( ws.getRange3( r1, c1, r1, c1 ).getName(), ws );
if ( r.getValue() instanceof cNumber ) {
_sum += r.getValue().getValue();
}
}
}
}
else {
val = arg0.getValue();
if ( regexpSearch.test( val.value ) ) {
var r = arg0.getRange(), ws = arg0.getWS(),
r1 = r.first.getRow0() + 0, c1 = arg2.getRange().first.getCol0();
r = new cRef( ws.getRange3( r1, c1, r1, c1 ).getName(), ws );
if ( r.getValue() instanceof cNumber ) {
_sum += r.getValue().getValue();
}
val = arg0.getValue();
if ( matching( val, valueForSearching, oper ) ) {
var r = arg0.getRange(), ws = arg0.getWS(),
r1 = r.first.getRow0() + 0, c1 = arg2.getRange().first.getCol0();
r = new cRef( ws.getRange3( r1, c1, r1, c1 ).getName(), ws );
if ( r.getValue() instanceof cNumber ) {
_sum += r.getValue().getValue();
}
}
}
......
......@@ -953,15 +953,24 @@ cFormulaFunction.TextAndData = {
var string1 = arg0.getValue(), string2 = arg1.getValue(),
valueForSearching = string1
.replace( /(\\)/g, "\\" )
.replace( /(\^)/g, "\\^" )
.replace( /(\()/g, "\\(" )
.replace( /(\))/g, "\\)" )
.replace( /(\+)/g, "\\+" )
.replace( /(\[)/g, "\\[" )
.replace( /(\])/g, "\\]" )
.replace( /(\{)/g, "\\{" )
.replace( /(\})/g, "\\}" )
.replace( /(\$)/g, "\\$" )
.replace( /(~)?\*/g, function ( $0, $1 ) {
return $1 ? $0 : '[\\w\\W]*';
return $1 ? $0 : '(.*)';
} )
.replace( /(~)?\?/g, function ( $0, $1 ) {
return $1 ? $0 : '[\\w\\W]{1,1}';
return $1 ? $0 : '.';
} )
.replace( /(~\*)/g, "\\*" ).replace( /(~\?)/g, "\\?" );
valueForSearching = new RegExp( valueForSearching, "ig" )
valueForSearching = new RegExp( valueForSearching, "ig" );
if ( string1 == "" )
return this.value = arg2;
......
......@@ -8701,15 +8701,19 @@
findFlags += "i"; // Не чувствителен к регистру
var valueForSearching = options.findWhat
.replace(/(~)?\*/g, function($0, $1){
return $1 ? $0 : '[\\w\\W]*';
})
.replace(/(~)?\?/g, function($0, $1){
return $1 ? $0 : '[\\w\\W]{1,1}';
})
.replace(/(~\*)/g,"\\*").replace(/(~\?)/g, "\\?");
.replace( /(\\)/g, "\\" ).replace( /(\^)/g, "\\^" )
.replace( /(\()/g, "\\(" ).replace( /(\))/g, "\\)" )
.replace( /(\+)/g, "\\+" ).replace( /(\[)/g, "\\[" )
.replace( /(\])/g, "\\]" ).replace( /(\{)/g, "\\{" )
.replace( /(\})/g, "\\}" ).replace( /(\$)/g, "\\$" )
.replace( /(~)?\*/g, function ( $0, $1 ) {
return $1 ? $0 : '(.*)';
} )
.replace( /(~)?\?/g, function ( $0, $1 ) {
return $1 ? $0 : '.';
} )
.replace( /(~\*)/g, "\\*" ).replace( /(~\?)/g, "\\?" );
valueForSearching = new RegExp(valueForSearching, findFlags);
var t = this;
var ar = this.activeRange.clone();
ar.startCol = this.activeRange.startCol;
......
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