前言
最近同事詢問使用 Microsoft.Office.Interop.Word 元件處理檔案的問題。
一開始可以正常開啟檔案,操作做幾次後,就會卡卡的,最後就會噴 HRESULT:0x80080005 (CO_E_SERVER_EXEC_FAILURE) 的錯誤。
研究
一開始可以開啟檔案,操作做幾次後就有問題,感覺最後有可能 Word.Exe 沒有正常被關掉。
詢問同事後,證實在工作管理員中,有一堆的 Word.Exe 並未被正常關閉。
這通常是因為 Word 檔有些動作需要與人互動,
而我們使用程式去操作 Word.Application 時,通常會將 Visible 設定成 false ,
所以導致 Word.Exe 卡住而無法關閉。
於是查看同事的程式碼,發現程式中,並未設定 DisplayAlerts 屬性為 false ,
這更加讓我確定應該是有些 Alert 訊息卡在執行緒之中。
於是請同事在建立 Word.Application 後,
設定 DisplayAlerts 屬性設定為 fasle,Visible 屬性設定為 true,
再請同事在 Microsoft Office Word 的 DCOM 設定,在「識別身分」Tab 中,
先設定為 互動式使用者 ,
執行程式看看 Word 是否有正常的顯示出來,並在最後順利關閉 Word.Exe。
如果沒問題的話,再將 Visible 設定成 false,
在 Microsoft Office Word 的 DCOM 設定,在「識別身分」Tab 中,設定為某個帳號,
再測試看看。
參考資料
Microsoft Office Excel 無法決定用資料範圍中那一列作為欄名稱
解決 Win2008 Asp.NET 使用 Word.Selection 會有 System.NullReferenceException 的問題