.
本篇主要解決當出現下圖錯誤時的解決方法
如果安裝一般正規的 Microsoft Office 在執行 Excel相關功能時並不會出現此錯誤訊息
但曾經安裝過 WPS Office 等非正規程式
或是安裝不同版本的Office時,都有可能發生此錯誤
通常發生的時機點都會在 移除 WPS 或是 WPS更新時
此異動會造成Windows對於註冊表的登錄檔(Registry)被改掉
造成系統調用Excel時問題
查詢上面的錯誤碼 000208D5-0000-0000-C000-000000000046
無法將類型爲“Microsoft.Office.Interop.Excel.ApplicationClass”的 COM 對象強制轉換爲接口類型“Microsoft.Office.Interop.Excel._Application”。此操作失敗的原因是對 IID 爲“{000208D5-0000-0000-C000-000000000046}”的接口的 COM 組件調用 QueryInterface 因以下錯誤而失敗: 庫沒有註冊。 (異常來自 HRESULT:0x8002801D (TYPE_E_LIBNOTREGISTERED))。
英文版的異常消息如下:
Unable to cast COM object of type 'Microsoft.Office.Interop.Excel.ApplicationClass' to interface type 'Microsoft.Office.Interop.Excel._Application'. This operation failed because the QueryInterface call on the COM component for the interface with IID '{000208D5-0000-0000-C000-000000000046}' failed due to the following error: could not be found. (Exception from HRESULT: 0x80030002 (STG_E_FILENOTFOUND)).
得出的結論就是"註冊表被修改掉了"
ASP.NET中用C#調用EXCEL進行匯出時,有時會出現介面Excel._Application的QueryInterface失敗的提示。
無法將類型為 Microsoft.Office.Interop.Excel.ApplicationClass的錯誤是相同原因
這通常是office元件安裝註冊的問題,而非程式本身
=================================================
如果Google此排除方式,會找到很多註冊表修改或更新的方式
但是基本上都沒有作用,
原因是 WPS 惡意更改了office的Com組件註冊權限,使得office的com組件不能註冊
就算將 WPS移除掉,殘留的WPS檔案仍然會造成異常
因此採用以毒攻毒的方式,重新安裝WPS Office,可以完美解決此問題
先移除現有WPS,如果沒安裝過或是已經移除可以略過此步驟
下載完後直接進行安裝,載安裝此程式時會重新更新Office的註冊表
安裝完成後,再重新執行 C# 的Excel輸出的功能即可正常執行
如在輸出時跳出更新程式的畫面,就按確認更新
更新完後可使用 C# 正常操作Excel各項功能
結論就是 不要安裝來路不明的軟體,以免造成很多難以解決的異常
WPS的綁架方式有點像早期的首頁綁架,直接強制修改註冊檔
讓你無法連結到真正的首頁,就算修改掉,他仍然會強制復原
相關Excel程式撰寫可參考以下連結