Добавление новой задачи с Aspose.tasks против VSTO
Работая с файлами Microsoft Project (MPP/XML), вам часто нужно добавлять новые задачи в проекты. В этой статье показано, как загружать файлы MPP в ваши приложения .NET и добавить новые задачи, используя традиционные API -интерфейсы VSTO Interop и современные Aspose.tasks для библиотеки .NET.
Обзор
Способность программно управлять задачами имеет важное значение для автоматических рабочих процессов планирования проекта. Эта статья демонстрирует, как вставить новые задачи в файлы проекта Microsoft, используя два подхода:
- Microsoft Office Automation (VSTO): опирается на установленное приложение Microsoft Project и Com Interop.
- aspose.tasks для .net: автономная библиотека .NET, которая не требует установки Microsoft Project.
Оба примера иллюстрируют один и тот же сценарий - добавление одной задачи с именем «Task1» ` - чтобы помочь вам четко понять различия в синтаксисе, зависимостях и модели программирования.
Добавьте задачу, используя VSTO
Следующий код демонстрирует, как добавить новую задачу в существующий файл .mpp
с использованием VSTO (инструменты Visual Studio для Office). Этот подход зависит от Com Interop и требует, чтобы Microsoft Project был установлен и должным образом лицензирован на машине.
1Microsoft.Office.Interop.MSProject.Application projectApplication = new Application();
2
3object missingValue = System.Reflection.Missing.Value;
4
5projectApplication.FileOpenEx(@"C:\Project1.mpp",
6 missingValue, missingValue, missingValue, missingValue,
7 missingValue, missingValue, missingValue, missingValue,
8 missingValue, missingValue, PjPoolOpen.pjPoolReadOnly,
9 missingValue, missingValue, missingValue, missingValue,
10 missingValue);
11
12Microsoft.Office.Interop.MSProject.Project project = projectApplication.ActiveProject;
13
14Microsoft.Office.Interop.MSProject.Task task;
15task = project.Tasks.Add("Task1", 1);
16
17task.Start = "8/23/2012";
18task.Duration = 3 * 8 * 60; // Duration in minutes (3 working days * 8 hours/day * 60 minutes)
19task.Text1 = "Task1";
20
21projectApplication.FileCloseAll(Microsoft.Office.Interop.MSProject.PjSaveType.pjSave);
Примечания
- Длительность должна быть указана в минутах, что менее интуитивно по сравнению с использованием единиц времени напрямую.
- API требует тщательной обработки необязательных параметров (
Missing.Value
) и очистки ресурсов COM. - Файл проекта должен быть открыт через
FileOpenEx
и явно сохранен и закрыт с помощьюFileCloseAll
.
Добавить задачу с помощью Aspose.Tasks для .NET
Напротив, код ниже показывает, как выполнить ту же задачу с помощью Aspose.Tasks для .NET. Этот API работает независимо от Microsoft Project и идеально подходит для веб-приложений, служб и контейнерных сред.
1Project project = new Project("New Project.mpp");
2
3Task task = project.RootTask.Children.Add("Task1");
4task.Set(Tsk.ActualStart, DateTime.Parse("23-Aug-2012"));
5
6// Set duration in hours
7task.Set(Tsk.Duration, project.GetDuration(24, TimeUnitType.Hour));
8task.Set(Tsk.DurationFormat, TimeUnitType.Day);
9
10project.Save("AddNewTask_out.xml", SaveFileFormat.XML);
Основные моменты
- Задачи создаются с использованием чистой объектной модели в
RootTask.Children
. - Длительность можно указать в часах, днях или других единицах с помощью
TimeUnitType
. - Метод
Set
обеспечивает типобезопасные, зависящие от поля обновления свойств задачи. - Не требуется COM-взаимодействие или установка Office — код работает на разных платформах.
Резюме
Аспект | VSTO / Взаимодействие | Aspose.Tasks для .NET |
---|---|---|
Требуется MS Project | ✅ Да | ❌ Нет |
Тип зависимости | COM (Microsoft.Office.Interop.MSProject) | Чистый .NET |
Поддержка разных платформ | ❌ Только для Windows | ✅ Windows, Linux, macOS (через .NET) |
Пригодность для развертывания | ⚠ Только для настольных компьютеров/серверов | ✅ Веб, контейнеры, бессерверные |
Сложность кода | ⚠ Высокая (многословный, шаблонный) | ✅ Простой и выразительный |
Aspose.Tasks предлагает современные, масштабируемые и поддерживаемые решения для работы с форматами Microsoft Project. Переход с VSTO открывает большую гибкость развертывания, повышенную надежность и более удобную для разработчиков поверхность API.
Чтобы продолжить изучение, посетите следующие страницы: