C# 開啟mpp檔案(Microsoft object)問題總結
阿新 • • 發佈:2019-10-09
有需求就有解決方案,早上還沒有聽說過什麼是 mpp 檔案,下午已經能成功的將功能實現,這難道就是程式設計師的職業素養?哈哈哈哈
從網上找了很多方法,最後自己找到一個十分簡單的開啟 mpp 檔案的方法:
public void readMpp() { Object missing = Type.Missing; ApplicationClass prj = new ApplicationClass(); prj.FileOpen("C:/Users/a001/Desktop/專案1.mpp", false, missing, missing, missing, missing, missing, missing, missing, missing, missing, PjPoolOpen.pjPoolReadWrite, missing, missing, missing, missing); System.Threading.Thread.Sleep(2000);//睡眠兩秒 string strmpp = ""; foreach (Project proj in prj.Projects) { foreach (Microsoft.Office.Interop.MSProject.Task task in proj.Tasks) { if (task == null) continue; //strmpp += "任務名稱:" + task.Name + "," + task.UniqueID + ",資源名稱:" + task.ResourceNames + "\r\n";//用ajax來請求的時候,此格式非json格式,會報錯 strmpp += "任務名稱:" + task.Name + "," + task.UniqueID + ",資源名稱:" + task.ResourceNames;//正確方法 } } prj.FileClose(PjSaveType.pjSave, false);//關閉 prj.Quit(PjSaveType.pjSave);//關閉 Response.Write(string.Format("{{ \"errorcode\": {0}, \"errormessage\": \"{1}\" }}", 1000, strmpp)); }
注意:
1、使用C#的這種方法開啟 mpp 檔案時,電腦上必須安裝 Microsoft object 這個軟體(在測試時本人開啟執行緒觀測結果:會先將 Microsoft object 軟體開啟,而後關閉)
問題:
1、ApplicationClass 提示無法嵌入互操作型別,請改用使用的介面,如下:
解決方案是:將引用 Microsoft.Office.Interop.MSProject 的屬性中的 “嵌入互操作型別” 改為false 如下:
2、上述程式碼中提到了要執行緒睡眠兩秒,是因為我的 Microsoft object 軟體未啟用,會提示我是否啟用,將這個會話框關閉才能讀取到 mpp 檔案中的資料,否則將會報錯(睡眠兩秒的意義就在於給我兩秒鐘的時間我去關閉這個會話窗,再說一點,啟用是要 rmb 的,哈哈)
如有問題,請留言或及時聯絡本人。
&n