Microsoft Project 是一款流行的項目管理軟件,可以讓項目經理更輕鬆高效地管理項目。它允許經理創建任務和資源、將任務分配給資源、跟踪項目進度、管理預算以及執行其他與項目相關的操作。為了以編程方式創建和管理 MS Project 文件,Microsoft 提供了 MS Office Automation。但是,除了 其他缺陷,它還要求您安裝 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 項目文件。

將 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 = 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 提供免費的臨時許可證來試用其產品,沒有試用限制。你可以從這裡得到一個。

也可以看看