2012-10-18 87 views
28

我爲Microsoft Office Word構建了一個加載項。當Word以管理員身份運行時,使用外接程序時沒有問題,但如果未以管理員身份運行Word,則存在兩個訪問功能區元素的常見異常。訪問COM組件時出錯

第一異常:

Unable to cast COM object of type 'System.__ComObject' to interface type 'Microsoft.Office.Core.IRibbonUI'. This operation failed because the QueryInterface call on the COM component for the interface with IID '{000C03A7-0000-0000-C000-000000000046}' failed due to the following error: could not be found. (Exception from HRESULT: 0x80030002 (STG_E_FILENOTFOUND)). 
    at Microsoft.Office.Core.IRibbonUI.InvalidateControl(String ControlID) 

當控制是通過下面的代碼無效發生此錯誤:

ribbon.InvalidateControl("control-id"); 

而第二個例外:

Unable to cast COM object of type 'Microsoft.Office.Interop.Word.ApplicationClass' to interface type 'Microsoft.Office.Interop.Word._Application'. This operation failed because the QueryInterface call on the COM component for the interface with IID '{00020970-0000-0000-C000-000000000046}' failed due to the following error: could not be found. (Exception from HRESULT: 0x80030002 (STG_E_FILENOTFOUND)). 
    at Microsoft.Office.Interop.Word.ApplicationClass.get_Selection() 

發生此錯誤在以下代碼的最後一行:

object wdStory = Word.WdUnits.wdStory; 
object wdMove = Word.WdMovementType.wdMove; 
WrdApp.Selection.EndKey(ref wdStory, ref wdMove) 

我該如何解決這個問題?

+1

它可以在其他計算機上工作嗎?我有一天打破了註冊表(在同事電腦上不少),並遇到類似於所有使用COM組件的程序的問題。如果它在另一臺計算機上工作,我會解釋我做了什麼來解決它。 – Wug

+1

是的,在開發計算機上工作。只有在測試機器不工作。也許是因爲我安裝(和unistall)許多版本的Office(2007,2007-64,2010,2010-64) – Victor

+0

哦,親愛的。那麼,測試機器運行什麼操作系統呢? – Wug

回答

52

問題解決了!

我以前安裝過Office 2010,因此Windows註冊表中存在一些不一致。 要解決這些問題,請打開regedit並從錯誤中查找CLSID。

你會發現類似的東西了第二個錯誤:

HKEY_CLASSES_ROOT\Interface\{00020970-0000-0000-C000-000000000046} 

隨着子項:

  • ProxyStubClsid
  • ProxyStubClsid32
  • 類型庫

看看在...處(Default)Version值在TypeLib之內。

現在找到下面的節點,使用(Default)的值作爲<TypeLib ID>

HKEY_CLASSES_ROOT \類型庫\ <TypeLib ID> \

由於該元素的孩子,你會發現一個以上的元素,然後的一個是第一個註冊的Version。如果你檢查其他元素,你會發現他們沒有指向任何東西。 刪除其他人!!!已解決!

+0

@Wug,發現問題!謝謝你的幫助。 – Victor

+1

這正是我所需要的,它解決了我的問題,謝謝你! – animaonline

+1

也在這裏修復 - 非常感謝! –

0

只需安裝Office 2010/MS word/.NET可編程性支持。

7

升級到最新的Office版本後,我開始得到相同的異常。我嘗試了一些建議的修復方法,包括以與@Victor描述的方式類似的方式清理註冊表。

秋交會什麼(儘管它可能是多種因素的組合)是「修復」安裝:

程序和功能→最新辦公室版本→修復

+1

這對我來說也適用於Office 365和Windows 7.謝謝! – Wudge

+0

適合我,我只有VS2010和Office 2016 –

0

我今天得到了同樣的問題,VS2015和Office 2013改變目標平臺到x64爲我工作。

1

辦公室維修爲我工作。在我的情況下,我已經安裝了項目,我相信改變了配置,並且無法調用從Excel工作簿中將數據遷移到SQL的過程。