通过C#(Microsoft.Office.Interop.MSProject)更改MS Project中特定taskID的值
我正在尝试编辑MS Project中的任务。我想用dateTimePicker中的一个日期更新“StartDate”列中的特定任务(多个任务)。我正在使用Microsoft.Office.Interop.MSProject,但我似乎找不到正确的方法,通过C#(Microsoft.Office.Interop.MSProject)更改MS Project中特定taskID的值,c#,interop,ms-project,C#,Interop,Ms Project,我正在尝试编辑MS Project中的任务。我想用dateTimePicker中的一个日期更新“StartDate”列中的特定任务(多个任务)。我正在使用Microsoft.Office.Interop.MSProject,但我似乎找不到正确的方法,ActiveProject.Tasks.Add()方法不会更新任务,它只是在指定的taskID处添加另一个任务。我也尝试过替换方法。。。以下是我尝试过的: public static void editTask(string task
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));
}
}
}
publicstaticvoidedittask(字符串taskName、DateTime startDate、int taskID)
{
ApplicationClass msProj=新的ApplicationClass();
msProj.Visible=true;
Task addTask=msProj.ActiveProject.Tasks.Add(任务名,任务ID);
addTask.Start=startDate;
}
私有void按钮5\u单击(对象发送者,事件参数)//写入到选择名称的日期。
{
对于(int x=0;x对于编辑任务,您可以在任务中有一个循环,并在需要时进行更改。但请确保格式。例如,task.name是string,大多数是object,因此您必须转换它们。使用这种方式:
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);
问题就是这样解决的:
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++;
}
}
}
}
private void按钮5\u单击(对象发送者,事件参数)//写入到选择名称的日期。
{
ApplicationClass msProj=新的ApplicationClass();
int i=0;
foreach(msProj.ActiveProject.Tasks中的任务t)
{
如果(i
如果您的任务版本相当大,那么在程序开始时创建一个类似于:tasksDictionary
的字典是值得的,然后在每个版本中,只需调用如下内容:project.tasks[tasksDictionary[id].field=newValue