Робота з календарями
Створення календаря
Календарі в Microsoft Project визначають робочий та неробочий час, безпосередньо впливаючи на планування завдань та доступність ресурсів. В Aspose.Tasks для .NET календарі можна створювати за допомогою класу
Calendar, який надає три перевантаження конструктора:
Calendar()– Ініціалізує календар за замовчуванням.Calendar(int id)– Ініціалізує календар з певним ID.Calendar(string name)– Ініціалізує календар із зазначеною назвою.
Наступний зразок коду демонструє, як створювати календарі за допомогою кожного конструктора. Після створення календарі можна переглянути в Microsoft Project, перейшовши до Проект > Інформація про проект.
Інформація про проект, що показує календарі

1// Create a project instance
2Project project = new Project();
3
4// New calendar can be added to a project's calendar collection using the collection's Add method.
5Calendar cal1 = project.Calendars.Add("New Info");
6Calendar cal2 = project.Calendars.Add("no name");
7Calendar cal3 = project.Calendars.Add("cal3");
8
9project.Save("CreatingCalendar_out.Xml", SaveFileFormat.XML);Визначення днів тижня для календаря
Колекція
Days класу Calendar представляє робочі дні та їх пов’язані часові діапазони. Визначення днів тижня моделюються через класи
WeekDay та
WorkingTime.
Розробники можуть використовувати CreateDefaultWorkingDay() для ініціалізації стандартних годин для певного дня тижня або встановлювати користувацькі робочі інтервали через властивості FromTime та ToTime.
Зразок нижче визначає понеділок-четвер як стандартні робочі дні, а п’ятницю з користувацькими робочими годинами. Щоб перевірити результат у Microsoft Project, перейдіть до Інструменти > Змінити робочий час.
Визначення днів тижня в Microsoft Project

1// This example shows how Aspose.Tasks API can be used to define a new Calendar, add week days to it and define working times for days
2// Create a project instance
3Project project = new Project();
4
5// Define Calendar
6Calendar cal = project.Calendars.Add("Calendar1");
7
8// Add working days monday through thursday with default timings
9cal.WeekDays.Add(WeekDay.CreateDefaultWorkingDay(DayType.Monday));
10cal.WeekDays.Add(WeekDay.CreateDefaultWorkingDay(DayType.Tuesday));
11cal.WeekDays.Add(WeekDay.CreateDefaultWorkingDay(DayType.Wednesday));
12cal.WeekDays.Add(WeekDay.CreateDefaultWorkingDay(DayType.Thursday));
13cal.WeekDays.Add(new WeekDay(DayType.Saturday));
14cal.WeekDays.Add(new WeekDay(DayType.Sunday));
15
16// Set friday as short working day
17WeekDay myWeekDay = new WeekDay(DayType.Friday);
18
19// Sets working time. Only time part of DateTime is important
20WorkingTime wt1 = new WorkingTime();
21wt1.FromTime = new DateTime(1, 1, 1, 9, 0, 0, 0);
22wt1.ToTime = new DateTime(1, 1, 1, 12, 0, 0, 0);
23WorkingTime wt2 = new WorkingTime();
24wt2.FromTime = new DateTime(1, 1, 1, 13, 0, 0, 0);
25wt2.ToTime = new DateTime(1, 1, 1, 16, 0, 0, 0);
26myWeekDay.WorkingTimes.Add(wt1);
27myWeekDay.WorkingTimes.Add(wt2);
28myWeekDay.DayWorking = true;
29cal.WeekDays.Add(myWeekDay);
30
31project.Save("Project_DefineCalendarWeekdays_out.xml", SaveFileFormat.XML);Заміна календаря
Базові календарі служать шаблонами для планування ресурсів та завдань. Aspose.Tasks дозволяє замінювати існуючий календар, звертаючись до
CalendarCollection через об’єкт
Project.
Підтримувані типи базових календарів включають:
- Стандартний: понеділок–п’ятниця, 08:00–17:00.
- 24 години: використовується для безперервних робочих графіків.
- Нічна зміна: з понеділка ввечері до суботи вранці, 23:00–08:00.
Код нижче демонструє, як видалити існуючий календар та додати новий стандартний календар до колекції.
1// Create project
2Project project = new Project("New Project.mpp");
3
4// Access project calendars
5CalendarCollection calColl = project.Calendars;
6foreach (Calendar myCalendar in calColl)
7{
8 if (myCalendar.Name == "TestCalendar")
9 {
10 // Remove calendar
11 calColl.Remove(myCalendar);
12 }
13}
14
15// Add new calendar
16Calendar newCalendar = calColl.Add("TestCalendar");
17project.Save("ReplaceCalendar_out.mpp", SaveFileFormat.MPP);Створення стандартного календаря
Стандартний календар визначає стандартні робочі дні та години, які зазвичай використовуються в графіках проектів. Aspose.Tasks надає два статичні методи для полегшення цього:
MakeStandardCalendar()– Створює новий календар зі стандартною конфігурацією.MakeStandardCalendar(Calendar cal)– Перетворює існуючий календар на стандартний.
Щоб перевірити результат у Microsoft Project, використовуйте Інструменти > Змінити робочий час.
Діалог інформації про зміну робочого часу показує стандартний календар, який використовується проектом

1// Create a project instance
2Project project = new Project();
3
4// Define Calendar and make it standard
5Calendar cal1 = project.Calendars.Add("My Cal");
6Calendar.MakeStandardCalendar(cal1);
7
8project.Save("Project_MakeStandardCalendar_out.xml", SaveFileFormat.XML);Запис оновлених даних календаря в MPP
Aspose.Tasks дозволяє оновлювати визначення календарів та зберігати їх назад у файл MPP. Процес включає:
- Завантаження існуючого файлу MPP.
- Модифікацію колекції календарів (додавання, оновлення).
- Збереження оновленого проекту назад на диск.
Наступний приклад демонструє додавання нового календаря та запис його назад у вихідний файл MPP.
1Project project = new Project("New Project.mpp");
2Calendar cal = project.Calendars.GetByUid(3);
3
4// Update the calendar information
5Calendar.MakeStandardCalendar(cal);
6cal.Name = "Test calendar";
7CalendarException exc = new CalendarException();
8exc.FromDate = DateTime.Now;
9exc.ToDate = DateTime.Now.AddDays(2);
10exc.DayWorking = true;
11
12WorkingTime wt1 = new WorkingTime();
13wt1.FromTime = new DateTime(10, 1, 1, 9, 0, 0);
14wt1.ToTime = new DateTime(10, 1, 1, 13, 0, 0);
15
16WorkingTime wt2 = new WorkingTime();
17wt2.FromTime = new DateTime(10, 1, 1, 14, 0, 0);
18wt2.ToTime = new DateTime(10, 1, 1, 19, 0, 0);
19
20WorkingTime wt3 = new WorkingTime();
21wt3.FromTime = new DateTime(10, 1, 1, 20, 0, 0);
22wt3.ToTime = new DateTime(10, 1, 1, 21, 0, 0);
23
24exc.WorkingTimes.Add(wt1);
25exc.WorkingTimes.Add(wt2);
26exc.WorkingTimes.Add(wt3);
27cal.Exceptions.Add(exc);
28
29CalendarException exc2 = new CalendarException();
30exc2.FromDate = DateTime.Now.AddDays(7);
31exc2.ToDate = exc2.FromDate;
32exc2.DayWorking = false;
33cal.Exceptions.Add(exc2);
34
35project.Set(Prj.Calendar, cal);
36
37project.Save("WriteUpdatedCalendarDataToMPP_out.mpp", SaveFileFormat.MPP);