From e3a1b43327a902c495aa83ccd7b384108c574056 Mon Sep 17 00:00:00 2001 From: Javen O'Neal Date: Mon, 20 Jun 2016 08:50:36 +0000 Subject: [PATCH] add comments, adjust whitespace git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1749276 13f79535-47bb-0310-9956-ffa450edef68 --- .../poi/ss/formula/functions/Countifs.java | 17 ++++++++++++----- .../apache/poi/ss/formula/functions/Sumifs.java | 2 ++ 2 files changed, 14 insertions(+), 5 deletions(-) diff --git a/src/java/org/apache/poi/ss/formula/functions/Countifs.java b/src/java/org/apache/poi/ss/formula/functions/Countifs.java index 95982fe676..15e6a1521e 100644 --- a/src/java/org/apache/poi/ss/formula/functions/Countifs.java +++ b/src/java/org/apache/poi/ss/formula/functions/Countifs.java @@ -34,15 +34,22 @@ public class Countifs implements FreeRefFunction { public static final FreeRefFunction instance = new Countifs(); public ValueEval evaluate(ValueEval[] args, OperationEvaluationContext ec) { - Double result = null; - if (args.length == 0 || args.length % 2 > 0) { + // https://support.office.com/en-us/article/COUNTIFS-function-dda3dc6e-f74e-4aee-88bc-aa8c2a866842?ui=en-US&rs=en-US&ad=US + // COUNTIFS(criteria_range1, criteria1, [criteria_range2, criteria2]...) + // need at least 2 arguments and need to have an even number of arguments (criteria_range1, criteria1 plus x*(criteria_range, criteria)) + if (args.length < 2 || args.length % 2 != 0) { return ErrorEval.VALUE_INVALID; } - for (int i = 0; i < args.length; ) { + + Double result = null; + // for each (criteria_range, criteria) pair + for (int i = 0; i < args.length; i += 2) { ValueEval firstArg = args[i]; ValueEval secondArg = args[i + 1]; - i += 2; - NumberEval evaluate = (NumberEval) new Countif().evaluate(new ValueEval[]{firstArg, secondArg}, ec.getRowIndex(), ec.getColumnIndex()); + NumberEval evaluate = (NumberEval) new Countif().evaluate( + new ValueEval[] {firstArg, secondArg}, + ec.getRowIndex(), + ec.getColumnIndex()); if (result == null) { result = evaluate.getNumberValue(); } else if (evaluate.getNumberValue() < result) { diff --git a/src/java/org/apache/poi/ss/formula/functions/Sumifs.java b/src/java/org/apache/poi/ss/formula/functions/Sumifs.java index a7621de7bd..81d0003fc5 100644 --- a/src/java/org/apache/poi/ss/formula/functions/Sumifs.java +++ b/src/java/org/apache/poi/ss/formula/functions/Sumifs.java @@ -54,6 +54,8 @@ public final class Sumifs implements FreeRefFunction { public static final FreeRefFunction instance = new Sumifs(); public ValueEval evaluate(ValueEval[] args, OperationEvaluationContext ec) { + // https://support.office.com/en-us/article/SUMIFS-function-c9e748f5-7ea7-455d-9406-611cebce642b + // COUNTIFS(sum_range, criteria_range1, criteria1, [criteria_range2, criteria2], ... // need at least 3 arguments and need to have an odd number of arguments (sum-range plus x*(criteria_range, criteria)) if(args.length < 3 || args.length % 2 == 0) { return ErrorEval.VALUE_INVALID; -- 2.39.5