--- src/java/org/apache/poi/ss/formula/functions/WeekNum.java (revision 1784169) +++ src/java/org/apache/poi/ss/formula/functions/WeekNum.java (working copy) @@ -27,6 +27,8 @@ import org.apache.poi.ss.formula.eval.ValueEval; import org.apache.poi.ss.usermodel.DateUtil; import org.apache.poi.util.LocaleUtil; +import org.apache.poi.util.POILogger; +import org.apache.poi.util.POILogFactory; /** * Implementation for Excel WeekNum() function.

@@ -43,9 +45,17 @@ * 1 Week begins on Sunday. Weekdays are numbered 1 through 7. * 2 Week begins on Monday. Weekdays are numbered 1 through 7. */ -public class WeekNum extends Fixed2ArgFunction implements FreeRefFunction { +public class WeekNum extends Var1or2ArgFunction implements FreeRefFunction { + private static final POILogger LOGGER = POILogFactory.getLogger(WeekNum.class); public static final FreeRefFunction instance = new WeekNum(); + private static final ValueEval DEFAULT_RETURN_TYPE = new NumberEval(1); + @Override + public ValueEval evaluate(int srcRowIndex, int srcColumnIndex, ValueEval serialNumVE) { + return evaluate(srcRowIndex, srcColumnIndex, serialNumVE, DEFAULT_RETURN_TYPE); + } + + @Override public ValueEval evaluate(int srcRowIndex, int srcColumnIndex, ValueEval serialNumVE, ValueEval returnTypeVE) { double serialNum = 0.0; try { @@ -80,10 +90,17 @@ return cal.get(Calendar.WEEK_OF_YEAR); } + @Override public ValueEval evaluate(ValueEval[] args, OperationEvaluationContext ec) { + if (args.length == 1) { + return evaluate(ec.getRowIndex(), ec.getColumnIndex(), args[0], DEFAULT_RETURN_TYPE); + } if (args.length == 2) { return evaluate(ec.getRowIndex(), ec.getColumnIndex(), args[0], args[1]); } + if (LOGGER.check(POILogger.WARN)) { + LOGGER.log(POILogger.WARN, "WeekNum() expected 1-2 args, got " + args.length); + } return ErrorEval.VALUE_INVALID; } }