1. 程式人生 > >C# 開啟mpp檔案(Microsoft object)問題總結

C# 開啟mpp檔案(Microsoft object)問題總結

有需求就有解決方案,早上還沒有聽說過什麼是 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