Skip to content

Commit 2b5680a

Browse files
author
linzhijun
committed
fix
1 parent 59868a1 commit 2b5680a

File tree

2 files changed

+9
-9
lines changed

2 files changed

+9
-9
lines changed

csharp/ToolGood.Algorithm.Test/AlgorithmEngine/AlgorithmEngineTest_vlookup.cs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,9 @@ public void vlookup_test()
2020

2121
num = engine.TryEvaluate("vlookup(array(array(1,'2',3),array(2,3,4),array('3a','4',5),array(4,'5',6)),'3a',2)", 0);
2222
Assert.AreEqual(num, 4);
23+
24+
num = engine.TryEvaluate("vlookup(array(array(1,'2',3),array(2,3,4),array(5,'4',5),array(6,'5',6)),'3',2,0)", 0);
25+
Assert.AreEqual(num, 0);
2326
}
2427

2528
}

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

Lines changed: 6 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1403,23 +1403,20 @@ public Function_VLOOKUP(FunctionBase func1, FunctionBase func2, FunctionBase fun
14031403

14041404
public override Operand Evaluate(AlgorithmEngine work, Func<string, Operand> tempParameter)
14051405
{
1406+
// 这个跟excel的vlookup有区别,excel是按列查找,这里是按array查找,参数位置不一样 用json代替吧
14061407
var args1 = func1.Evaluate(work, tempParameter);
1407-
args1 = args1.ToArray("Function '{0}' parameter {1} is error!", "VLOOKUP", 1); if (args1.IsError) { return args1; }
1408-
1409-
var args2 = func2.Evaluate(work, tempParameter); if (args2.IsError) { return args2; }
1408+
if (args1.IsNotArray) { args1 = args1.ToArray("Function '{0}' parameter {1} is error!", "VLOOKUP", 1); if (args1.IsError) { return args1; } }
1409+
var args2 = func2.Evaluate(work, tempParameter);
1410+
if (args2.IsNotText) { args2 = args2.ToText("Function '{0}' parameter {1} is error!", "VLOOKUP", 2); if (args2.IsError) { return args2; } }
14101411
var args3 = func3.Evaluate(work, tempParameter);
1411-
args3 = args3.ToNumber("Function '{0}' parameter {1} is error!", "VLOOKUP", 3); if (args3.IsError) { return args3; }
1412+
if (args3.IsNotNumber) { args3 = args3.ToNumber("Function '{0}' parameter {1} is error!", "VLOOKUP", 3); if (args3.IsError) { return args3; } }
14121413

14131414
var vague = true;
14141415
if (func4 != null) {
14151416
var args4 = func4.Evaluate(work, tempParameter);
1416-
args4 = args4.ToBoolean("Function '{0}' parameter {1} is error!", "VLOOKUP", 4); if (args4.IsError) { return args4; }
1417+
if (args4.IsNotBoolean) { args4 = args4.ToBoolean("Function '{0}' parameter {1} is error!", "VLOOKUP", 4); if (args4.IsError) { return args4; } }
14171418
vague = args4.BooleanValue;
14181419
}
1419-
if (args2.IsNotNull) {
1420-
var sv = args2.ToText("Function '{0}' parameter {1} is error!", "VLOOKUP", 2); if (sv.IsError) { return sv; }
1421-
args2 = sv;
1422-
}
14231420

14241421
foreach (var item in args1.ArrayValue) {
14251422
var o = item.ToArray("Function '{0}' parameter {1} is error!", "VLOOKUP", 1); if (o.IsError) { return o; }

0 commit comments

Comments
 (0)