Skip to content

Commit 7d5b186

Browse files
author
linzhijun
committed
fix
1 parent 56ced75 commit 7d5b186

File tree

2 files changed

+17
-16
lines changed

2 files changed

+17
-16
lines changed

csharp/ToolGood.Algorithm/Internals/Functions/FunctionBase.cs

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1025,24 +1025,25 @@ public override void ToString(StringBuilder stringBuilder, bool addBrackets)
10251025

10261026
#region Lookup
10271027

1028-
internal class Function_VLOOKUP : Function_N
1028+
internal class Function_VLOOKUP : Function_4
10291029
{
1030-
public Function_VLOOKUP(FunctionBase[] funcs) : base(funcs)
1030+
public Function_VLOOKUP(FunctionBase func1, FunctionBase func2, FunctionBase func3, FunctionBase func4) : base(func1, func2, func3, func4)
10311031
{
10321032
}
10331033

10341034
public override Operand Calculate(AlgorithmEngine work)
10351035
{
1036-
var args = new List<Operand>();
1037-
foreach (var item in funcs) { var aa = item.Calculate(work); if (aa.IsError) { return aa; } args.Add(aa); }
1036+
var args1 = func1.Calculate(work);
1037+
args1 = args1.ToArray("Function '{0}' parameter {1} is error!", "VLOOKUP", 1); if (args1.IsError) { return args1; }
10381038

1039-
var args1 = args[0].ToArray("Function '{0}' parameter {1} is error!", "VLOOKUP", 1); if (args1.IsError) { return args1; }
1040-
var args2 = args[1];
1041-
var args3 = args[2].ToNumber("Function '{0}' parameter {1} is error!", "VLOOKUP", 3); if (args3.IsError) { return args3; }
1039+
var args2 = func2.Calculate(work); if (args2.IsError) { return args2; }
1040+
var args3 = func3.Calculate(work);
1041+
args3 = args3.ToNumber("Function '{0}' parameter {1} is error!", "VLOOKUP", 3); if (args3.IsError) { return args3; }
10421042

10431043
var vague = true;
1044-
if (args.Count == 4) {
1045-
var args4 = args[3].ToBoolean("Function '{0}' parameter {1} is error!", "VLOOKUP", 4); if (args4.IsError) { return args4; }
1044+
if (func4 != null) {
1045+
var args4 = func4.Calculate(work);
1046+
args4 = args4.ToBoolean("Function '{0}' parameter {1} is error!", "VLOOKUP", 4); if (args4.IsError) { return args4; }
10461047
vague = args4.BooleanValue;
10471048
}
10481049
if (args2.Type != OperandType.NULL) {
@@ -1075,8 +1076,7 @@ public override Operand Calculate(AlgorithmEngine work)
10751076
}
10761077
}
10771078

1078-
if (vague) //进行模糊匹配
1079-
{
1079+
if (vague) {//进行模糊匹配
10801080
Operand last = null;
10811081
var index = args3.IntValue - work.ExcelIndex;
10821082
foreach (var item in args1.ArrayValue) {

csharp/ToolGood.Algorithm/Internals/MathFunctionVisitor.cs

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1879,11 +1879,12 @@ public FunctionBase VisitJSON_fun(mathParser.JSON_funContext context)
18791879
public FunctionBase VisitVLOOKUP_fun(mathParser.VLOOKUP_funContext context)
18801880
{
18811881
var exprs = context.expr();
1882-
FunctionBase[] args = new FunctionBase[exprs.Length];
1883-
for (int i = 0; i < exprs.Length; i++) {
1884-
args[i] = exprs[i].Accept(this);
1885-
}
1886-
return new Function_VLOOKUP(args);
1882+
var args1 = exprs[0].Accept(this);
1883+
var args2 = exprs[1].Accept(this);
1884+
var args3 = exprs[2].Accept(this);
1885+
if (exprs.Length == 3) return new Function_VLOOKUP(args1, args2, args3, null);
1886+
var args4 = exprs[3].Accept(this);
1887+
return new Function_VLOOKUP(args1, args2, args3, args4);
18871888
}
18881889

18891890
#endregion Lookup

0 commit comments

Comments
 (0)