我正在尝试编辑MS Project中的任务。我想使用dateTimePicker中的单个日期更新“StartDate”列中的特定任务(多个任务)。我正在使用Microsoft.Office.Interop.MSProject但我似乎无法找到正确的方法,ActiveProject.Tasks.Add()
方法不更新任务,它只是在指定的taskID处添加了另一个任务。我也尝试过替换方法......这是我试过的:
public static void editTask(string taskName, DateTime startDate, int taskID)
{
ApplicationClass msProj = new ApplicationClass();
msProj.Visible = true;
Task addTask = msProj.ActiveProject.Tasks.Add(taskName,taskID);
addTask.Start = startDate;
}
private void button5_Click(object sender, EventArgs e) //Writes to date where names are selected.
{
for (int x = 0; x <= checkedListBox1.CheckedItems.Count - 1; x++)
{
foreach (var item in checkedListBox1.SelectedItems)
{
msProj.Replace(Name,Type.Missing,checkedListBox1.SelectedItem,dateTimePicker1.Text,true,true,false,PjField.pjResourceName,PjComparison.pjCompareEquals);
//editTask(checkedListBox1.CheckedItems[x].ToString(), DateTime.Parse(dateTimePicker1.Text));
}
}
}
我正在使用VS 2010和Office Project 2010
如果您需要更多关于我想做什么或做什么的信息,请问我。请原谅我上面的代码,它已被编辑和更改,这些Interop的东西让我的大脑皱了皱......
我在Office.Interop上找不到太多关于MSProject的信息。请接受任何链接或帮助。
此致
答案 0 :(得分:1)
这就是问题的解决方法:
private void button5_Click(object sender, EventArgs e) //Writes to date where names are selected.
{
ApplicationClass msProj = new ApplicationClass();
int i = 0;
foreach (Task t in msProj.ActiveProject.Tasks)
{
if (i < checkedListBox1.CheckedItems.Count)
{
if (t.ID == int.Parse(checkedListBox1.CheckedItems[i].ToString()))
{
t.Start = DateTime.Parse(dateTimePicker1.Text);
i++;
}
}
}
}
答案 1 :(得分:1)
您可以使用:
Task yourTask = project.Tasks.get_UniqueID(UniqueId)
它将返回任务的对象,该对象具有给定的 UniqueId
。所以它是一种寻找具有特定 UniqueId
的任务的方法。 UniqueId
类型的 int
。现在您可以更改任务中的数据。
yourTask.Start = DateTime.Parse(dateTimePicker1.Text)
答案 2 :(得分:0)
对于编辑任务,您可以在任务中进行循环并随时更改。但请确保格式。例如,task.name是字符串,大多数是对象,因此您必须转换它们。用这种方式:
ApplicationClass projectApp = new ApplicationClass();
projectApp.FileOpen("C:\\test.mpp", false, Missing.Value, Missing.Value, Missing.Value,Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value,PjPoolOpen.pjPoolReadWrite, Missing.Value, Missing.Value, Missing.Value, Missing.Value);
// Get the active project
Project proj = projectApp.ActiveProject;
foreach (Task task in proj.Tasks)
{
try
{
Object per = "25";//any data you want to change
task.PhysicalPercentComplete = per;
}
catch
{
}
}//foreach
最后你应该关闭并保存它们:
projectApp.FileSaveAs("c:\\sample.mpp", PjFileFormat.pjMPP, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing);
projectApp.FileCloseAll(PjSaveType.pjSave);
答案 3 :(得分:0)
如果您的任务版本相当大,则值得在程序开始时创建一个像这样的字典:tasksDictionary<id, counter>
,然后在每个版本中,只需调用这样的内容:{{1} }。