diff --git a/src/scratchpad/src/org/apache/poi/hssf/record/formula/functions/Month.java b/src/scratchpad/src/org/apache/poi/hssf/record/formula/functions/Month.java index b4aeafb59b..065c565d14 100644 --- a/src/scratchpad/src/org/apache/poi/hssf/record/formula/functions/Month.java +++ b/src/scratchpad/src/org/apache/poi/hssf/record/formula/functions/Month.java @@ -20,6 +20,48 @@ */ package org.apache.poi.hssf.record.formula.functions; -public class Month extends NotImplementedFunction { +import org.apache.poi.hssf.record.formula.eval.BlankEval; +import org.apache.poi.hssf.record.formula.eval.ErrorEval; +import org.apache.poi.hssf.record.formula.eval.Eval; +import org.apache.poi.hssf.record.formula.eval.NumberEval; +import org.apache.poi.hssf.record.formula.eval.NumericValueEval; +import org.apache.poi.hssf.record.formula.eval.ValueEval; +import org.apache.poi.hssf.usermodel.HSSFDateUtil; +/** + * + * @author Guenter Kickinger g.kickinger@gmx.net + * + */ +public class Month extends NumericFunction { + + /* (non-Javadoc) + * @see org.apache.poi.hssf.record.formula.functions.Function#evaluate(org.apache.poi.hssf.record.formula.eval.Eval[], int, short) + */ + public Eval evaluate(Eval[] operands, int srcCellRow, short srcCellCol) { + ValueEval retval = null; + + switch (operands.length) { + default: + retval = ErrorEval.VALUE_INVALID; + break; + case 1: + ValueEval ve = singleOperandEvaluate(operands[0], srcCellRow, srcCellCol); + if (ve instanceof NumericValueEval) { + NumericValueEval ne = (NumericValueEval) ve; + if (HSSFDateUtil.isValidExcelDate(ne.getNumberValue())) { + java.util.Date d = HSSFDateUtil.getJavaDate(ne.getNumberValue()); + retval = new NumberEval(d.getMonth()+1); + } else { + retval = ErrorEval.NUM_ERROR; + } + } + else if (ve instanceof BlankEval) { + // do nothing + } else { + retval = ErrorEval.NUM_ERROR; + } + } + return retval; + } } diff --git a/src/scratchpad/src/org/apache/poi/hssf/record/formula/functions/Year.java b/src/scratchpad/src/org/apache/poi/hssf/record/formula/functions/Year.java index 9ae576700b..76ea617cc6 100644 --- a/src/scratchpad/src/org/apache/poi/hssf/record/formula/functions/Year.java +++ b/src/scratchpad/src/org/apache/poi/hssf/record/formula/functions/Year.java @@ -20,6 +20,49 @@ */ package org.apache.poi.hssf.record.formula.functions; -public class Year extends NotImplementedFunction { +import org.apache.poi.hssf.record.formula.eval.BlankEval; +import org.apache.poi.hssf.record.formula.eval.ErrorEval; +import org.apache.poi.hssf.record.formula.eval.Eval; +import org.apache.poi.hssf.record.formula.eval.NumberEval; +import org.apache.poi.hssf.record.formula.eval.NumericValueEval; +import org.apache.poi.hssf.record.formula.eval.ValueEval; +import org.apache.poi.hssf.usermodel.HSSFDateUtil; -} +/** + * + * @author Guenter Kickinger g.kickinger@gmx.net + * + */ + +public class Year extends NumericFunction { + + /* (non-Javadoc) + * @see org.apache.poi.hssf.record.formula.functions.Function#evaluate(org.apache.poi.hssf.record.formula.eval.Eval[], int, short) + */ + public Eval evaluate(Eval[] operands, int srcCellRow, short srcCellCol) { + ValueEval retval = null; + + switch (operands.length) { + default: + retval = ErrorEval.VALUE_INVALID; + break; + case 1: + ValueEval ve = singleOperandEvaluate(operands[0], srcCellRow, srcCellCol); + if (ve instanceof NumericValueEval) { + NumericValueEval ne = (NumericValueEval) ve; + if (HSSFDateUtil.isValidExcelDate(ne.getNumberValue())) { + java.util.Date d = HSSFDateUtil.getJavaDate(ne.getNumberValue()); + retval = new NumberEval(d.getYear()+1900); + } else { + retval = ErrorEval.NUM_ERROR; + } + } + else if (ve instanceof BlankEval) { + // do nothing + } else { + retval = ErrorEval.NUM_ERROR; + } + } + return retval; + } +} \ No newline at end of file