Опубликован: 24.04.2015 | Доступ: свободный | Студентов: 145 / 0 | Длительность: 04:57:00
Лекция 2:

Основы работы в Gnumeric

Календарные функции.

Календарные функции в Gnumeric находятся в категории "Дата/Время", всего таких функций более 30. Основными являются функции "разложения" даты на составляющие – выделения из даты номера дня в месяце (функция day()), номера месяца в году (month()) и года (year()) – и функция обратного преобразования date(year(),month(),day()), которая конструирует данные типа "дата" из номера года, месяца и дня.

Также часто используются функции автоматического определения дня недели (weekday()), текущей даты (today()) и текущего момента времени (now()).

Имеются также интересные (и полезные) функции преобразования дат – date2unix() и обратная ей unix2date(). Они выполняют преобразование даты в количество секунд, прошедших с начала "эры UNIX", и наоборот ("эра UNIX" началась в полночь 1 января 1970 года).

Для знакомства с основными календарными функциями рассмотрим следующую задачу. Дан список лиц, для которых известны фамилии, пол и даты рождения. Определить:

  • День недели, на который приходится день рождения каждого человека в текущем году. Если день рождения приходится на выходные дни, вывести текст "УРА!", в остальных случаях вывести текст "УВЫ...".
  • Возраст на настоящий момент.
  • Дату выхода на пенсию для каждого человека.

Для этой задачи воспользуемся исходными данными (списком фамилий) из задачи про доходы и налоги. Пол установим в соответствии с фамилиями, даты рождения введем произвольно (как уже упоминалось, удобно вводить дату в виде 23/11/88, а программа приведет ее в нужный вид).

Для получения решения по пункту "a" необходимо проделать некоторые промежуточные вычисления. Сначала нужно для каждого лица сформировать дату рождения в текущем году на основании дня и месяца рождения, а также номера текущего года. Тогда первая формула (в ячейке D4 на рис. 2.56) будет иметь вид:

=DATE(YEAR(TODAY());MONTH(C4);DAY(C4))

Очевидно, что функция today() просто выдает текущую дату, а функция date() формирует дату из номера года, номера месяца и номера дня в месяце, определяемых соответственно, с помощью функций year(), month() и day(). Естественно, при желании вместо результатов работы функций можно использовать адреса ячеек, содержащих числа или просто числа. Соответственно, формула для окончательного результата по пункту "а" (в ячейке E4) будет иметь вид:

=IF(OR(WEEKDAY(D4;2)=6;WEEKDAY(D4:2)=7);"УРА!";"УВЫ...")

где функция weekday() вычисляет день недели для даты, указанной в первом аргументе. Второй аргумент функции weekday() определяет правила нумерации дней недели. В данном случае первый день недели соответствует понедельнику.

Для обработки всего списка просто копируем эти формулы вниз. Для получения решения по пункту "b" воспользуемся функцией вычисления разности дат – datedif(). Эта функция имеет три аргумента – начальную дату, конечную дату и строку-параметр, задающую единицы измерения разности. Значения параметра "y", "m" или "d" позволяют найти разность дат соответственно, в полных годах, полных месяцах и в днях. С учетом того, что возраст определяется в полных годах, запишем формулу для возраста в следующем виде:

=datedif(C4;TODAY();"y")

Для получения решения по пункту "c" снова нужно формировать даты, используя значения параметров возраста выхода на пенсию. Эти возрасты на момент написания книги составляют 60 лет для мужчин и 55 для женщин, однако они могут в любой момент измениться, поэтому конкретные числа в формулу записывать не будем. Дата выхода на пенсию формируется с использованием условия проверки пола. Итак, получаем формулу:

=IF(B4="М";DATE(YEAR(C4)+$G$1,MONTH(C4);DAY(C4));DATE(YEAR(C4)+$G$2;MONTH(C4);DAY(C4)))

Результирующая таблица показана на рис. 2.56.

Последний столбец (дата выхода на пенсию) приведен в формате "dd/mm/yyyy" для иллюстрации корректного выполнения вычислений.

Пример вычисление с датами

Рис. 2.56. Пример вычисление с датами