有時我們需要通過程序來操縱MS Project(我們公司曾需要將公司已有的項目管理平台中的任務導入MS Project),Project與其他的微軟Office軟件,Word、Excel類似,都可通過VBA來對其操作。
下面是我通過VB.Ne寫得t調用VBA操縱MS Project的一個通用類。
該類實現了創建|打開Project文件,添加任務,升級|降級任務,保存Project等常用功能。
詳情請看注釋。
Public Class Project
''041201
Dim mPrjApp As MSProject.Application''在VB.Net中引用MSProject類庫
Dim mRow As Integer = 0''記錄Project中任務的行號
Public Sub New()
mPrjApp = New MSProject.Application
End Sub
Public Sub NewProject()
mPrjApp.FileNew()''新建一個Project文件
End Sub
''Project可以另存為一個數據庫,如果存儲為數據庫,我們可以通過ODBC來直接打開這個Project文件
''當然如果你對Project這個數據庫比較熟悉,也可以直接操數據庫中的數據來實現對Project文件的修改,微軟雖然提供了數據庫的結構說明,但不是很詳盡,這方面的官方資料相對很少。後續我將寫一篇關於通過ODBC操縱Project數據庫的文章。
Public Sub Open(ByVal ODBCName As String, ByVal ProjectName As String)
mPrjApp.FileOpen("<" + ODBCName + ">\" + ProjectName)
End Sub
Public Sub NewProject(ByVal tmpFileName As String)
Dim TemplateName As Object = tmpFileName
mPrjApp.FileNew(False, TemplateName)
End Sub
Public Sub SaveAs(ByVal FilePath As String)
If IO.File.Exists(FilePath) Then
IO.File.Delete(FilePath)
End If
mPrjApp.FileSaveAs(FilePath, MSProject.PjFileFormat.pjMPP)
End Sub
Public Sub AddTask(ByVal TaskName As String, ByVal StartDate As String, ByVal FinishDate As String, Optional ByVal Resource As String = "")
mPrjApp.SelectTaskFIEld(mRow, "名稱")
mPrjApp.SetTaskFIEld("名稱",
TaskName)
mPrjApp.SetTaskFIEld("開始時間", StartDate)
mPrjApp.SetTaskFIEld("完成時間", FinishDate)
mPrjApp.SetTaskFIEld("資源名稱", Resource)''這裡的資源表示將任務分配給誰
mRow = 1
End Sub
Public Sub Degrade()
mPrjApp.OutlineIndent(1)
End Sub
Public Sub Upgrade()
mPrjApp.OutlineOutdent(1)
End Sub
Public Sub Close()
mPrjApp.FileCloseAll(MSProject.PJSaveType.pjDoNotSave)
mPrjApp.Quit()
End Sub
End Class
該類使用例子(C#):
Project prj = new Project();
prj.NewProject("D:\Test\Test.mpp");
prj.AddTask("任務一","2004-08-09","2004-09-09","小明");
prj.SaveAs("D:\Test\Test.mpp");
prj.Close();