Microsoft Project 是一款流行的项目管理软件,可让项目经理更轻松地高效管理项目。它允许经理创建任务和资源、将任务分配给资源、跟踪项目进度、管理预算以及执行其他与项目相关的操作。为了以编程方式创建和管理 MS Project 文件,Microsoft 提供了 MS Office 自动化。但是,除了其他缺陷,它还需要您安装 MS Office。为了填补这一空白,Aspose 为您提供了一个用于 .NET 应用程序的 MS Project 自动化解决方案,即 Aspose.Tasks for .NET

Aspose.Tasks for .NET 是一个功能丰富的 API,可让您使用 C# 或 VB.NET 以编程方式创建 MS 项目文件 (.mpp/.xml)。此外,它还提供各种功能来处理任务、资源和日历。在本文中,我将向您展示如何使用 Aspose.Tasks for .NET 创建 MS Project 文件并使用 C# 处理任务和资源。本文的其余部分分为以下几节。

使用 C# 创建 MS 项目文件

MPP 是 Microsoft 的专有文件格式,用于 MS Project 文件。但是,您也可以将项目数据保存在 XML 文件中,以便在不同的应用程序之间共享。从头开始创建新项目是一项简单的任务,可以使用以下步骤完成:

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

将 MS 项目文件另存为 MPP

// 创建一个新项目
Project project = new Project();

// 将其保存为 .mpp 文件
project.Save("New Project.mpp", SaveFileFormat.MPP);

将 MS 项目文件另存为 XML

// 创建一个新项目
Project project = new Project();

// 将其保存为 .xml 文件
project.Save("EmptyProjectSaveXML_out.xml", SaveFileFormat.XML);

使用 C# 将任务添加到 MS 项目文件

没有任务和资源,空的 MS Project 文件毫无用处。因此,让我们看看如何创建任务并将其添加到项目中。任务可以是单个任务或包含一组子任务的摘要任务。以下是将任务添加到 MS Project 文件的步骤。

  • 创建并初始化 Project 对象。
  • 使用 Project.RootTask.Children.Add(string) 方法将新的摘要任务添加到项目的 Tasks 集合中。
  • 使用 Task.Children.Add(string) 方法将子任务添加到摘要任务。
  • 使用 Project.Save() 方法保存项目。

以下代码示例展示了如何使用 C# 创建任务并将其添加到 MS Project 文件。

// 创建一个新项目
Project project = new Project();

// 添加任务和子任务
Task task = project.RootTask.Children.Add("Summary1");
Task subtask = task.Children.Add("Subtask1");

// 保存存档
project.Save("CreateTasks_out.xml", SaveFileFormat.XML);

以下代码示例显示了如何设置任务的不同属性,例如持续时间、开始日期/时间等。

// 创建项目
Project project = new Project();

// 添加任务并设置任务属性
Task task = project.RootTask.Children.Add("Task1");
task.Set(Tsk.Start, project.RootTask.Get(Tsk.Start).AddDays(1));
task.Set(Tsk.Name, "new name");

使用 C# 将资源添加到 MS 项目文件

资源是应该在项目中执行任务的实体。因此,如果没有资源来开展项目,项目将是不可能的。因此,让我们看看如何为项目创建和添加资源。以下是将资源添加到 MS Project 文件的步骤。

  • 使用 Project 类创建一个新项目。
  • 使用 Project.Resources.Add(string) 方法将新资源添加到项目的 Resources 集合中。
  • 使用 Project.Save() 方法保存项目。

以下代码示例展示了如何使用 C# 将资源添加到 MS Project 文件。

// 创建项目
Project project = new Project();

// 添加资源
Resource resource = project.Resources.Add("Rsc");

// 保存项目
project.Save("CreateResources_out.xml", SaveFileFormat.XML);

以下代码示例设置资源的属性,例如开始日期/时间、类型等。

// 创建项目
Project project = new Project();

// 添加资源
Resource resource = project.Resources.Add("Rsc");

// 保存项目
project.Save("CreateResources_out.xml", SaveFileFormat.XML);

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

在项目中完成添加任务和资源后,您可以指定由哪个资源执行哪个任务。因此,您将任务分配给每个资源。以下是将任务分配给项目中的资源的步骤。

  • 使用 Project 类创建或加载项目。
  • 将新资源添加到项目并设置其属性,例如日期格式、开始日期等。
  • 将新任务添加到项目并设置其属性,例如开始日期/时间、持续时间等。
  • 通过将任务及其各自的资源添加到 Project.ResourceAssignments 集合来执行任务分配。
  • 使用 Project.Save() 方法保存项目。

以下是如何在 MS Project 文件中创建任务并将任务分配给资源的完整代码示例。

// 创建项目
Project project = new Project("New Project.mpp")
{
    CalculationMode = CalculationMode.Automatic
};

// 设置属性
project.Set(Prj.DateFormat, DateFormat.DateDddMmDdYy);
project.Set(Prj.StartDate, new DateTime(2019, 9, 16, 9, 0, 0));
project.Set(Prj.NewTasksAreManual, false);
project.Set(Prj.ActualsInSync, false);

// 添加资源
Resource workResource = project.Resources.Add("Servente (Work)");
workResource.Set(Rsc.Name, "Servente (Work)");
workResource.Set(Rsc.Initials, "S");
workResource.Set(Rsc.Type, ResourceType.Work);
workResource.Set(Rsc.StandardRateFormat, RateFormatType.Hour);
workResource.Set(Rsc.Code, "1503");

Resource materialResource = project.Resources.Add("Tijolo (Material)");
materialResource.Set(Rsc.Name, "Tijolo (Material)");
materialResource.Set(Rsc.Initials, "T");
materialResource.Set(Rsc.Type, ResourceType.Material);
materialResource.Set(Rsc.StandardRateFormat, RateFormatType.MaterialResourceRate);
materialResource.Set(Rsc.Code, "21341");

// 添加任务
Task task1 = project.RootTask.Children.Add("Task - 01");
task1.Set(Tsk.IsRollup, new NullableBool(true));
task1.Set(Tsk.IsPublished, new NullableBool(false));
Task task2 = task1.Children.Add("Task - 01.01");
task2.Set(Tsk.IsRollup, new NullableBool(true));
task2.Set(Tsk.IsPublished, new NullableBool(false));
Task task3 = task2.Children.Add("Task - 01.01.001");
task3.Set(Tsk.IsEstimated, new NullableBool(false));
task3.Set(Tsk.Start, new DateTime(2019, 9, 16, 9, 0, 0));
task3.Set(Tsk.Duration, project.GetDuration(10, TimeUnitType.Day));
task3.Set(Tsk.Work, project.GetDuration(10, TimeUnitType.Day));
task3.Set(Tsk.IsRollup, new NullableBool(true));
task3.Set(Tsk.IsPublished, new NullableBool(false));

// 分配任务
ResourceAssignment assignment1 = project.ResourceAssignments.Add(task3, materialResource);
assignment1.Set(Asn.Delay, project.GetDuration(40, TimeUnitType.Hour));
assignment1.Set(Asn.Start, new DateTime(2019, 9, 23, 9, 0, 0));
assignment1.Set(Asn.Finish, new DateTime(2019, 9, 27, 18, 0, 0));
ResourceAssignment assignment2 = project.ResourceAssignments.Add(task3, workResource);
assignment2.Set(Asn.Work, project.GetDuration(56, TimeUnitType.Hour));
assignment2.Set(Asn.Start, new DateTime(2019, 9, 16, 9, 0, 0));
assignment2.Set(Asn.Finish, new DateTime(2019, 9, 24, 18, 0, 0));

// 完全匹配预期的 MPP
assignment2.Set(Asn.WorkContour, WorkContourType.Contoured);
task3.Set(Tsk.IsManual, new NullableBool(true));
task1.Set(Tsk.IsManual, new NullableBool(true));

// 保存项目
project.Save("Assignment_Dates.mpp", SaveFileFormat.MPP);

使用 C# 将日历添加到项目中

日历也是项目的主要实体之一,用于定义项目的时间表。日历使项目经理可以为项目创建时间表。以下是将日历添加到项目的步骤。

以下代码示例展示了如何使用 C# 将日历添加到项目中。

// 创建项目实例
Project project = new Project();

// 定义日历
Calendar cal = project.Calendars.Add("Calendar1");

// 使用默认时间添加周一至周四的工作日
cal.WeekDays.Add(WeekDay.CreateDefaultWorkingDay(DayType.Monday));
cal.WeekDays.Add(WeekDay.CreateDefaultWorkingDay(DayType.Tuesday));
cal.WeekDays.Add(WeekDay.CreateDefaultWorkingDay(DayType.Wednesday));
cal.WeekDays.Add(WeekDay.CreateDefaultWorkingDay(DayType.Thursday));
cal.WeekDays.Add(new WeekDay(DayType.Saturday));
cal.WeekDays.Add(new WeekDay(DayType.Sunday));

// 将星期五设为短工作日
WeekDay myWeekDay = new WeekDay(DayType.Friday);

// 设置工作时间。只有 DateTime 的时间部分很重要
WorkingTime wt1 = new WorkingTime();
wt1.FromTime = new DateTime(1, 1, 1, 9, 0, 0, 0);
wt1.ToTime = new DateTime(1, 1, 1, 12, 0, 0, 0);
WorkingTime wt2 = new WorkingTime();
wt2.FromTime = new DateTime(1, 1, 1, 13, 0, 0, 0);
wt2.ToTime = new DateTime(1, 1, 1, 16, 0, 0, 0);
myWeekDay.WorkingTimes.Add(wt1);
myWeekDay.WorkingTimes.Add(wt2);
myWeekDay.DayWorking = true;
cal.WeekDays.Add(myWeekDay);

// 保存项目
project.Save("Project_DefineCalendarWeekdays_out.xml", SaveFileFormat.XML);

下载或安装

您可以 下载 Aspose.Tasks for .NET DLL 或使用 NuGet 将其安装到您的项目中。

免费试用 Aspose.Tasks for .NET

Aspose 提供免费的临时许可证,可以在没有试用限制的情况下试用其产品。您可以从 这里 获得一份。

也可以看看