2013-04-23 10 views
0

我試圖編輯MS Project中的任務。我想用dateTimePicker中的單個日期更新「StartDate」列中的特定任務(多任務)。我正在使用Microsoft.Office.Interop.MSProject,但我似乎找不到正確的方法,ActiveProject.Tasks.Add()方法不更新任務,它只是在指定的任務ID添加另一個任務。我也曾嘗試替換方法......這是我曾嘗試:通過C#在MS Project內更改特定任務ID的值(Microsoft.Office.Interop.MSProject)

 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

如果您需要更多的信息怎麼還是我想要做什麼,請問我。請原諒我的代碼上面,它被編輯和改變了太多,這些互操作的東西弄皺了我的大腦...

我找不到太多的信息在Office.Interop MSProject。請,任何鏈接或幫助將不勝感激。

問候,

回答

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++; 
       } 
      } 
     } 
    } 
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);