text: public ValueEval Evaluate(ValueEval[] args, OperationEvaluationContext ec){if (args.Length != 2){return ErrorEval.VALUE_INVALID;}try{double startDateAsNumber = NumericFunction.SingleOperandEvaluate(args[0], ec.RowIndex, ec.ColumnIndex);int months = (int)NumericFunction.SingleOperandEvaluate(args[1], ec.RowIndex, ec.ColumnIndex);if (startDateAsNumber >= 0.0 && startDateAsNumber < 1.0){startDateAsNumber = 1.0;}DateTime startDate = DateUtil.GetJavaDate(startDateAsNumber, false);DateTime dtEnd = startDate.AddMonths(months);dtEnd = dtEnd.AddMonths(1);dtEnd = new DateTime(dtEnd.Year, dtEnd.Month, 1);dtEnd = dtEnd.AddDays(-1);return new NumberEval(DateUtil.GetExcelDate(dtEnd));}catch (EvaluationException e){return e.GetErrorEval();}}