在 C++ 中创建 MS 项目文件

MS Project 是一款广泛使用的项目管理软件,可帮助管理人员有效地管理项目。它允许创建任务、添加资源、将任务分配给资源、监控进度以及管理与预算相关的操作。在本文中,您将学习如何在没有 MS Project 的情况下将项目管理活动嵌入到您的 C++ 应用程序中。在代码示例的帮助下,您将学习如何使用 C++ 以编程方式创建 MS Project 文件 (.mpp/.xml)、添加任务、资源和日历。此外,还将演示项目中资源的任务分配。

C++ MS 项目文件操作 API

Aspose.Tasks for C++ 是一个 C++ 项目管理 API,可让您以编程方式创建、操作、导出和转换 MS Project 文件。 API 为您提供了一套完整的功能,可以在没有 MS Project 的情况下创建项目、任务、资源、日历和执行其他项目管理活动。您可以从 此处 下载 API 的完整包或使用 NuGet 安装它。

使用 C++ 创建 MS 项目文件 (.mpp)

让我们首先创建一个空项目。以下是使用 Aspose.Tasks for C++ 从头开始创建 MS Project (.mpp) 文件的步骤。

以下代码示例展示了如何使用 C++ 创建 MS Project 的 .mpp 文件。

// 创建项目
System::SharedPtr<Project> project = System::MakeObject<Project>();

// 设置项目信息
project->Set<System::String>(Prj::Author(), u"Author");
project->Set<System::String>(Prj::LastAuthor(), u"Last Author");
project->Set<int32_t>(Prj::Revision(), 15);
project->Set<System::String>(Prj::Keywords(), u"MSP Aspose");
project->Set<System::String>(Prj::Comments(), u"Comments");

// 将项目另存为 .mpp 文件
project->Save(u"project.mpp", Aspose::Tasks::Saving::SaveFileFormat::MPP);

使用 C++ 将任务添加到项目

创建项目后,您可以继续向其中添加任务。您可以创建一个新项目或加载现有的 MS Project 文件来添加任务。以下是创建任务或子任务并将其添加到项目的步骤。

以下代码示例展示了如何使用 C++ 创建任务并将其添加到项目中。

// 创建项目实例
System::SharedPtr<Project> project = System::MakeObject<Project>(u"project.mpp");

// 添加任务、子任务并保存项目
System::SharedPtr<Task> task = project->get_RootTask()->get_Children()->Add(u"Summary1");
task->Set(Tsk::Start(), project->get_RootTask()->Get<System::DateTime>(Tsk::Start()).AddDays(1));
task->Set<System::String>(Tsk::Name(), u"new name");
System::SharedPtr<Task> subtask = task->get_Children()->Add(u"Subtask1");

// 保存项目
project->Save(dataDir + u"CreateTasks_out.mpp", Aspose::Tasks::Saving::SaveFileFormat::MPP);

阅读更多 关于与任务相关的扩展功能。

使用 C++ 将资源添加到项目

资源是应该完成项目的实体。通常,人被称为项目的资源。以下是创建资源并将其添加到项目的步骤。

以下代码示例展示了如何使用 C++ 在项目中添加资源。

// 创建项目实例
System::SharedPtr<Project> project = System::MakeObject<Project>();  

// 添加资源
System::SharedPtr<Resource> rsc1 = project->get_Resources()->Add(u"Rsc");    

// 设置资源属性,资源属性由静态类Rsc表示
rsc1->Set<System::Decimal>(Rsc::StandardRate(), static_cast<System::Decimal>(15));
rsc1->Set<System::Decimal>(Rsc::OvertimeRate(), static_cast<System::Decimal>(20));  

// 将项目另存为 XML
project->Save(u"CreateResources_out.xml", Aspose::Tasks::Saving::SaveFileFormat::XML);

阅读更多 关于与资源相关的扩展功能。

使用 C++ 将项目的任务分配给资源

创建任务和资源后,下一步是将每个任务分配给负责完成任务的资源。以下是将任务分配给资源的步骤。

以下代码示例演示如何使用 C++ 将任务分配给项目中的资源。

// 创建空项目
System::SharedPtr<Project> project1 = System::MakeObject<Project>();    

// 添加新任务和资源
System::SharedPtr<Task> task1 = project1->get_RootTask()->get_Children()->Add(u"Task");
System::SharedPtr<Resource> rsc1 = project1->get_Resources()->Add(u"Rsc");  

// 分配资源所需的任务
System::SharedPtr<ResourceAssignment> assn = project1->get_ResourceAssignments()->Add(task1, rsc1);

使用 C++ 在项目中添加日历

日历用于为 MS 项目中的项目创建时间表。 Aspose.Tasks for C++ 让为项目创建日历变得非常简单。以下是创建日历、添加工作日和指定工作时间的步骤。

您还可以在日历中设置工作日的工作时间。为此,您可以在添加工作日后按照以下步骤操作。

以下代码示例展示了如何使用 C++ 在项目中创建日历。

// 创建项目实例
System::SharedPtr<Project> project = System::MakeObject<Project>();    

// 定义日历
System::SharedPtr<Aspose::Tasks::Calendar> cal = project->get_Calendars()->Add(u"Calendar1");    

// 使用默认时间添加周一至周四的工作日
cal->get_WeekDays()->Add(WeekDay::CreateDefaultWorkingDay(Aspose::Tasks::DayType::Monday));
cal->get_WeekDays()->Add(WeekDay::CreateDefaultWorkingDay(Aspose::Tasks::DayType::Tuesday));
cal->get_WeekDays()->Add(WeekDay::CreateDefaultWorkingDay(Aspose::Tasks::DayType::Wednesday));
cal->get_WeekDays()->Add(WeekDay::CreateDefaultWorkingDay(Aspose::Tasks::DayType::Thursday));
cal->get_WeekDays()->Add(System::MakeObject<WeekDay>(Aspose::Tasks::DayType::Saturday));
cal->get_WeekDays()->Add(System::MakeObject<WeekDay>(Aspose::Tasks::DayType::Sunday));  

// 将星期五设为短工作日
System::SharedPtr<WeekDay> myWeekDay = System::MakeObject<WeekDay>(Aspose::Tasks::DayType::Friday);  

// 设置工作时间。只有 DateTime 的时间部分很重要
System::SharedPtr<WorkingTime> wt1 = System::MakeObject<WorkingTime>();
wt1->set_FromTime(System::DateTime(1, 1, 1, 9, 0, 0, 0));
wt1->set_ToTime(System::DateTime(1, 1, 1, 12, 0, 0, 0));
System::SharedPtr<WorkingTime> wt2 = System::MakeObject<WorkingTime>();
wt2->set_FromTime(System::DateTime(1, 1, 1, 13, 0, 0, 0));
wt2->set_ToTime(System::DateTime(1, 1, 1, 16, 0, 0, 0));
myWeekDay->get_WorkingTimes()->Add(wt1);
myWeekDay->get_WorkingTimes()->Add(wt2);
myWeekDay->set_DayWorking(true);
cal->get_WeekDays()->Add(myWeekDay);   

// 保存项目
System::String dataDir = Examples::CPP::RunExamples::GetDataDir(System::Reflection::MethodBase::GetCurrentMethod(ASPOSE_CURRENT_FUNCTION)->get_DeclaringType().get_FullName());
project->Save(u"Project_DefineCalendarWeekdays_out.mpp", Aspose::Tasks::Saving::SaveFileFormat::MPP);

阅读更多 关于与日历相关的扩展功能。

结论

在本文中,您学习了如何使用 C++ 创建 MS Project 文件并将它们保存为 .mpp 或 .xml。此外,您还学习了如何以编程方式在项目中添加任务、资源、资源分配和日历。您还可以浏览 文档 以了解 Aspose.Tasks for C++ 的扩展功能,以进一步增强应用程序中的项目管理功能。

也可以看看