]> source.dussan.org Git - poi.git/commitdiff
Fixed IF() to handle different types for the first arg
authorJosh Micich <josh@apache.org>
Mon, 1 Sep 2008 02:26:33 +0000 (02:26 +0000)
committerJosh Micich <josh@apache.org>
Mon, 1 Sep 2008 02:26:33 +0000 (02:26 +0000)
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@690836 13f79535-47bb-0310-9956-ffa450edef68

src/java/org/apache/poi/hssf/record/formula/functions/If.java
src/testcases/org/apache/poi/hssf/data/FormulaEvalTestData.xls

index 4b3e10a19f501f09c87dd922944f6d1f2a0fbe6f..4b066b8226ae88031a16c22e8f19433ad998d66d 100644 (file)
@@ -30,29 +30,32 @@ import org.apache.poi.hssf.record.formula.eval.ValueEval;
  */
 public final class If implements Function {
 
-    public Eval evaluate(Eval[] args, int srcCellRow, short srcCellCol) {
-
-        Eval evalWhenFalse = BoolEval.FALSE;
-        switch (args.length) {
-            case 3:
-                evalWhenFalse = args[2];
-            case 2:
-                boolean b;
-                               try {
-                                       b = evaluateFirstArg(args[0], srcCellRow, srcCellCol);
-                               } catch (EvaluationException e) {
-                                       return e.getErrorEval();
-                               }
-                if (b) {
-                    return args[1];
-                }
-                return evalWhenFalse;
-            default:
-                return ErrorEval.VALUE_INVALID;
-        }
-    }
+       public Eval evaluate(Eval[] args, int srcCellRow, short srcCellCol) {
+               Eval falseResult;
+               switch (args.length) {
+                       case 3:
+                               falseResult = args[2];
+                               break;
+                       case 2:
+                               falseResult = BoolEval.FALSE;
+                               break;
+                       default:
+                               return ErrorEval.VALUE_INVALID;
+               }
+               boolean b;
+               try {
+                       b = evaluateFirstArg(args[0], srcCellRow, srcCellCol);
+               } catch (EvaluationException e) {
+                       return e.getErrorEval();
+               }
+               if (b) {
+                       return args[1];
+               }
+               return falseResult;
+       }
 
-       private static boolean evaluateFirstArg(Eval arg, int srcCellRow, short srcCellCol) throws EvaluationException {
+       private static boolean evaluateFirstArg(Eval arg, int srcCellRow, short srcCellCol)
+                       throws EvaluationException {
                ValueEval ve = OperandResolver.getSingleValue(arg, srcCellRow, srcCellCol);
                Boolean b = OperandResolver.coerceValueToBoolean(ve, false);
                if (b == null) {
index e1193179fe82d74f371a555c4c4e860e50e6e71f..51e370bfb96d6ba0c5c2429a0b8cdcebadad0b81 100644 (file)
Binary files a/src/testcases/org/apache/poi/hssf/data/FormulaEvalTestData.xls and b/src/testcases/org/apache/poi/hssf/data/FormulaEvalTestData.xls differ