彩票走势图

Microsoft Project文件处理API-Aspose.Tasks功能演示:在C#或VB.NET中以编程方式创建MS Project文件

翻译|使用教程|编辑:李显亮|2020-05-06 10:07:20.507|阅读 569 次

概述:Aspose.Tasks是功能丰富的API,可让您使用C#或VB.NET通过编程方式创建MS Project文件。在本文中,将展示如何使用Aspose.Tasks for .NET创建MS Project文件以及如何使用C#处理任务和资源。

# 慧都年终大促·界面/图表报表/文档/IDE等千款热门软控件火热促销中 >>

Microsoft Project是一种流行的项目管理软件,它使项目经理更容易有效地管理项目。它使管理人员可以创建任务和资源,将任务分配给资源,跟踪项目的进度,管理预算以及执行其他与项目相关的操作。

为了以编程方式创建和管理MS Project文件,Microsoft提供了MS Office Automation。 但是,伴随着其他缺陷,它要求您安装MS Office。 为了填补这一空白,Aspose可以为您提供.NET应用程序的MS Project自动化解决方案,如.NET的Aspose.Tasks。

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

  • 使用C#从头开始创建MS Project文件
  • 将任务添加到项目
  • 向项目添加资源
  • 将任务分配给项目中的资源
  • 将日历添加到项目

Aspose.Tasks for .NET已升级至V20.4,如果你还没有用过Aspose.Tasks可以点击这里下载最新版测试。


使用C#创建MS Project文件

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

  • 创建一个Project类的实例。
  • 使用Project.Save(string,SaveFileFormat)方法保存文件。

下面的代码示例演示如何使用C#创建MS Project文件。

将MS项目文件另存为MPP

// there is no more need to load MPP template to save it into MPP
// add tasks, resources, etc.
Project project = new Project();

// !The project will be saved into MPP by using internal MPP template.
project.Save(dataDir + "project.mpp", SaveFileFormat.MPP);

将MS Project文件另存为XML

// Create empty project
Project project = new Project();

// Save project as xml 
project.Save(dataDir + "EmptyProjectSaveXML_out.xml", SaveFileFormat.XML);

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

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

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

下面的代码示例演示如何使用C#创建任务并将任务添加到MS Project文件。

// Create project instance
Project project = new Project();

// Add task, sub task and save project
Task task = project.RootTask.Children.Add("Summary1");
Task subtask = task.Children.Add("Subtask1");
project.Save(dataDir + "CreateTasks_out.xml", SaveFileFormat.XML);

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

// Create project instance
Project project = new Project();
            
// Add task and set task properties
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 Project文件

资源是应该在项目中执行任务的实体。因此,没有资源就无法进行项目。因此,让我们看看如何创建项目并向其添加资源。以下是将资源添加到MS Project文件的步骤。

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

下面的代码示例演示如何使用C#将资源添加到MS Project文件。

// The path to the documents directory.
string dataDir = RunExamples.GetDataDir(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.FullName);

// Create project instance
Project project = new Project();

// Add resources
Resource rsc1 = project.Resources.Add("Rsc");

// Save project as XML
project.Save(dataDir + "CreateResources_out.xml", SaveFileFormat.XML);

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

// Add resources
Resource rsc1 = project.Resources.Add("Rsc");

// Set resource properties, Resource properties are represented by static class Rsc
rsc1.Set(Rsc.StandardRate, 15);
rsc1.Set(Rsc.OvertimeRate, 20);

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

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

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

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

Project project = new Project(dataDir + "TemplateResource2010.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 tsk1 = project.RootTask.Children.Add("Task - 01");
tsk1.Set(Tsk.IsRollup, new NullableBool(true));
tsk1.Set(Tsk.IsPublished, new NullableBool(false));
Task tsk2 = tsk1.Children.Add("Task - 01.01");
tsk2.Set(Tsk.IsRollup, new NullableBool(true));
tsk2.Set(Tsk.IsPublished, new NullableBool(false));
Task tsk3 = tsk2.Children.Add("Task - 01.01.001");
tsk3.Set(Tsk.IsEstimated, new NullableBool(false));
tsk3.Set(Tsk.Start, new DateTime(2019, 9, 16, 9, 0, 0));
tsk3.Set(Tsk.Duration, project.GetDuration(10, TimeUnitType.Day));
tsk3.Set(Tsk.Work, project.GetDuration(10, TimeUnitType.Day));
tsk3.Set(Tsk.IsRollup, new NullableBool(true));
tsk3.Set(Tsk.IsPublished, new NullableBool(false));

ResourceAssignment assignment1 = project.ResourceAssignments.Add(tsk3, 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(tsk3, 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));

// to match expected MPP fully
assignment2.Set(Asn.WorkContour, WorkContourType.Contoured);
tsk3.Set(Tsk.IsManual, new NullableBool(true));
tsk1.Set(Tsk.IsManual, new NullableBool(true));

project.Save(dataDir + @"Assignment_Dates.mpp", Saving.SaveFileFormat.MPP);

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

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

  • 使用Project类创建或加载项目。
  • 将新的Calendar添加到Project.Calendars集合。
  • 使用Calendar对象创建计划。
  • 保存项目。

下面的代码示例演示如何使用C#将日历添加到项目中。

// 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
// Create a project instance
Project project = new Project();

// Define Calendar
Aspose.Tasks.Calendar cal = project.Calendars.Add("Calendar1");

// Add working days monday through thursday with default timings
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));

// Set friday as short working day
WeekDay myWeekDay = new WeekDay(DayType.Friday);

// Sets working time. Only time part of DateTime is important
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);

// Save the Project
string dataDir = RunExamples.GetDataDir(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.FullName);
project.Save("Project_DefineCalendarWeekdays_out.xml", Aspose.Tasks.Saving.SaveFileFormat.XML);
还想要更多吗?您可以点击阅读【2019 · Aspose最新资源整合】查找需要的教程资源。如果您有任何疑问或需求,请随时加入Aspose技术交流群(642018183),我们很高兴为您提供查询和咨询
标签:

本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,如果存在内容上的异议请邮件反馈至chenjj@pclwef.cn


为你推荐

  • 推荐视频
  • 推荐活动
  • 推荐产品
  • 推荐文章
  • 慧都慧问
扫码咨询


添加微信 立即咨询

电话咨询

客服热线
023-68661681

TOP