]> source.dussan.org Git - poi.git/commitdiff
Implementation of Month and Year functions, from Guenter Kickinger (bug #43199)
authorNick Burch <nick@apache.org>
Thu, 23 Aug 2007 16:33:36 +0000 (16:33 +0000)
committerNick Burch <nick@apache.org>
Thu, 23 Aug 2007 16:33:36 +0000 (16:33 +0000)
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@569062 13f79535-47bb-0310-9956-ffa450edef68

src/scratchpad/src/org/apache/poi/hssf/record/formula/functions/Month.java
src/scratchpad/src/org/apache/poi/hssf/record/formula/functions/Year.java

index b4aeafb59b3872d59031afef9772f37cae293a85..065c565d14f95cc40176dd625ad023bbe467f739 100644 (file)
  */
 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;
+    }
 }
index 9ae576700bb45233a528fcd023b3ea6bda432bb4..76ea617cc687d1821e7ad651a4fd0c28309679dc 100644 (file)
  */
 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