Implementation of Month and Year functions, from Guenter Kickinger (bug #43199)

git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@569062 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Nick Burch 2007-08-23 16:33:36 +00:00
parent ac3c57b0d8
commit 6e2b416925
2 changed files with 88 additions and 3 deletions

View File

@ -20,6 +20,48 @@
*/ */
package org.apache.poi.hssf.record.formula.functions; 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;
}
} }

View File

@ -20,6 +20,49 @@
*/ */
package org.apache.poi.hssf.record.formula.functions; 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;
}
} }