西西軟件園多重安全檢測(cè)下載網(wǎng)站、值得信賴的軟件下載站!
軟件
軟件
文章
搜索

首頁(yè)編程開(kāi)發(fā)其它知識(shí) → Microsoft.Office.Interop.Word.ApplicationClass錯(cuò)誤的解決方案

Microsoft.Office.Interop.Word.ApplicationClass錯(cuò)誤的解決方案

相關(guān)軟件相關(guān)文章發(fā)表評(píng)論 來(lái)源:西西整理時(shí)間:2015/1/9 23:00:46字體大小:A-A+

作者:西西點(diǎn)擊:3790次評(píng)論:0次標(biāo)簽: Office

  • 類型:桌面工具大。1KB語(yǔ)言:繁體 評(píng)分:7.6
  • 標(biāo)簽:
立即下載

無(wú)法將類型為“Microsoft.Office.Interop.Word.ApplicationClass”的 COM 對(duì)象強(qiáng)制轉(zhuǎn)換為接口類型“Microsoft.Office.Interop.Word._Application”。此操作失敗的原因是對(duì) IID 為“{00020970-0000-0000-C000-000000000046}”的接口的 COM 組件調(diào)用 QueryInterface 因以下錯(cuò)誤而失敗: 加載類型庫(kù)/DLL 時(shí)出錯(cuò)。 (異常來(lái)自 HRESULT:0x80029C4A (TYPE_E_CANTLOADLIBRARY))。

生成word的過(guò)程中如上報(bào)錯(cuò)。

解決方法:

1.打開(kāi)任務(wù)管理器,如果任務(wù)管理器中有很多word相關(guān)的進(jìn)程,關(guān)閉之。

2.如果關(guān)閉后仍然無(wú)效,你要考慮下,你的電腦上是不是曾經(jīng)安裝過(guò)金山的wps辦公軟件。如果曾安裝過(guò)并且現(xiàn)在已經(jīng)卸載,那么請(qǐng)重新下載最新的wps辦公套件安裝。就ok了。

類型"Microsoft.Office.Interop.Word.ApplicationClass"未定義構(gòu)造函數(shù) 
解決辦法:解決方案資源管理器 -> 引用 -> "Microsoft.Office.Interop.Word" -> 右鍵選擇屬性 -> 嵌入互操作類型的值改為"false"即可。

就軟件而言,互操作性——這條術(shù)語(yǔ)用來(lái)描述的是不同的程序(programs)借助于同一套交換格式(exchange formats)來(lái)交換數(shù)據(jù),讀寫(xiě)相同文件格式(file formats)以及采用相同協(xié)議(protocols)的能力。(互操作性的這種定義并‘沒(méi)有’期望那種在不同處理器平臺(tái)<processor platforms >之上執(zhí)行相同二進(jìn)制代碼<binary code>的能力。)互操作性的缺乏可能是在程序設(shè)計(jì)期間對(duì)于標(biāo)準(zhǔn)化(standardization)缺乏重視的一種后果。實(shí)際上,在計(jì)算機(jī)世界(computing world)的那些并未基于標(biāo)準(zhǔn)的部分當(dāng)中,互操作性也的確并非理所當(dāng)然的事情。

根據(jù)國(guó)際標(biāo)準(zhǔn)ISO/IEC 2382-01 信息技術(shù)詞表,基礎(chǔ)術(shù)語(yǔ)(ISO/IEC 2382-01, Information Technology Vocabulary, Fundamental Terms),互操作性定義如下:“在幾乎或幾乎無(wú)須用戶了解各種功能單元的獨(dú)特特性的情況下,這些功能單元之間進(jìn)行通訊、執(zhí)行程序或者傳輸數(shù)據(jù)的能力”。以上兩段是維基百科對(duì)“互操作性”的解釋,讓我們對(duì)“嵌入互操作類型”有了個(gè)基本的概念。

那就接著講什么叫“嵌入互操作類型”,下面是摘自msdn雜志上的一段?赡軙(huì)給我們一些啟迪和認(rèn)識(shí)。

嵌入 COM 互操作類型

這更像是 C# 編譯器功能,而不像是 C# 語(yǔ)言功能,但您現(xiàn)在可以使用 COM 互操作程序集,而不要求該程序集在運(yùn)行時(shí)必須存在。目的是減輕將 COM 互操作程序集與您的應(yīng)用程序一起部署的負(fù)擔(dān)。

當(dāng) COM 互操作在最初版本的 .NET Framework 中引入時(shí),就確立了主互操作程序集 (PIA) 的概念。引入此概念,是為了解決在組件之間共享 COM 對(duì)象的難題。for instance:如果您有一些不同的互操作程序集,分別定義了一個(gè) Excel Worksheet,則我們無(wú)法在組件之間共享這些 Worksheet,因?yàn)樗鼈兙哂胁煌?.NET 類型。PIA 通過(guò)只存在一次而解決了這個(gè)難題:所有客戶端都使用它,因此 .NET 類型始終是匹配的。

盡管 PIA 在理論上是個(gè)好主意,但在實(shí)際部署中卻被證明是個(gè)大麻煩,因?yàn)樗挥幸环,而有多個(gè)應(yīng)用程序可能會(huì)嘗試安裝或卸載它。而由于 PIA 通常很大,事情更復(fù)雜了。Office 在默認(rèn) Office 安裝方式中并未部署它們,用戶只需通過(guò)使用 TLBIMP 來(lái)創(chuàng)建自己的互操作程序集,即可輕松繞過(guò)這一個(gè)程序集系統(tǒng)。

因此,現(xiàn)在為了扭轉(zhuǎn)這種局面,發(fā)生了兩件事:

對(duì)于兩個(gè)結(jié)構(gòu)相同且共享相同識(shí)別特征(名稱、GUID 等)的 COM 互操作類型,運(yùn)行時(shí)能夠聰明地將其看作同一個(gè) .NET 類型。C# 編譯器利用這一點(diǎn)的方式是在編譯時(shí)直接在您自己的程序集中重現(xiàn)互操作類型,因此不再要求在運(yùn)行時(shí)存在該互操作程序集。

由于篇幅所限,我不得不省略一些詳細(xì)信息,但即使不了解這些信息,您也應(yīng)該能夠毫無(wú)障礙的使用這個(gè)功能,就像動(dòng)態(tài)功能一樣。您通過(guò)將引用上的“嵌入式互操作類型”屬性設(shè)置為 true,告訴編譯器為您將互操作類型嵌入到 Visual Studio 中。

由于 C# 團(tuán)隊(duì)希望這種方法成為引用 COM 程序集的首選方法,因此在默認(rèn)情況下,Visual Studio 會(huì)將添加到 C# 項(xiàng)目中的任何新互操作引用的此屬性設(shè)置為 True。如果您使用命令行編譯器 (csc.exe) 來(lái)編譯您的代碼,請(qǐng)使用 /L 開(kāi)關(guān),而不是 /R 開(kāi)關(guān),來(lái)嵌入您必須引用的互操作程序集中的互操作類型。

類型“Microsoft.Office.Interop.Word.ApplicationClass”未定義構(gòu)造函數(shù)

錯(cuò)誤 4317 無(wú)法嵌入互操作類型“Microsoft.Office.Interop.Word.ApplicationClass”。請(qǐng)改用適用的接口。 

類型“Microsoft.Office.Interop.Word.ApplicationClass”未定義構(gòu)造函數(shù) 

解決辦法: 

在Visual Studio 中點(diǎn)擊菜單項(xiàng)“視圖->解決方案資源管理器”,在其中點(diǎn)開(kāi)“引用”文件夾,在"Microsoft.Office.Interop.Word" 上點(diǎn)擊鼠標(biāo)右鍵,選擇“屬性”,將屬性中的“嵌入互操作類型”的值改為“false”即可。

HRESULT:0x80030002 無(wú)法將類型為“Microsoft.Office.Interop.Word.ApplicationClass”的 COM 對(duì)象強(qiáng)制轉(zhuǎn)換為接口類型“Microsoft.Office.Interop.Wor

無(wú)法將類型為“Microsoft.Office.Interop.Word.ApplicationClass”的 COM 對(duì)象強(qiáng)制轉(zhuǎn)換為接口類型“Microsoft.Office.Interop.Word._Application”。此操作失敗的原因是對(duì) IID 為“{00020970-0000-0000-C000-000000000046}”的接口的 COM 組件調(diào)用 QueryInterface 因以下錯(cuò)誤而失敗: 找不到 。 (異常來(lái)自 HRESULT:0x80030002 (STG_E_FILENOTFOUND))。

上次是 HRESULT:0x80004002(E_NOINTERFACE),修復(fù)了一下office變成如上所示。

出現(xiàn)原因:可能是安裝office時(shí)安裝過(guò)不同版本造成的。

本人安裝的是office 2003,并安裝過(guò)office2007的兼容包,也安裝過(guò)office visio 2007

解決辦法:
在注冊(cè)表中找到:HKEY_CLASSES_ROOT\TypeLib\{00020813-0000-0000-C000-000000000046}\1.6 刪除之就可以了。

因?yàn)槲矣玫氖莖ffice 2003對(duì)應(yīng)的是1.5,所以刪除1.6
office 2007對(duì)應(yīng)的是1.6,所以要根據(jù)情況判斷。(我的是安裝了2007之后有安裝了2010,10可以,07不可以,我后來(lái)卸載掉10,用07版測(cè)試發(fā)現(xiàn)該注冊(cè)表項(xiàng)下1.7還在,所以刪除掉1.7,07版就正常了)

后記:
  一般來(lái)說(shuō),一個(gè)COM對(duì)象在提供的時(shí)候,通常還會(huì)提供一個(gè)類型庫(kù),在其中定義了COM對(duì)象的所有方法名稱、參數(shù)名稱、屬性名稱等等信息。我們要做的就是從類型庫(kù)中取出這些信息。當(dāng)然,某些只供C++程序員使用的COM對(duì)象沒(méi)有類型庫(kù),而代之以C++的頭文件和/或idl文件,對(duì)這種情況,一般沒(méi)有辦法在程序中枚舉出對(duì)象的方法屬性:畢竟去找C++頭文件不太現(xiàn)實(shí),何況在非開(kāi)發(fā)環(huán)境下,根本就沒(méi)有頭文件的說(shuō)。

  在一般情況下,COM對(duì)象的TypeLib信息存儲(chǔ)在注冊(cè)表中:在HK_CLASSROOT\CLSID\{ClassID}\的注冊(cè)表項(xiàng)下,有一個(gè)名為T(mén)ypeLib的子項(xiàng),其中定義了這個(gè)COM對(duì)象類型庫(kù)的ID;而在HK_CLASSROOT\TypeLib 注冊(cè)表項(xiàng)下,列舉了系統(tǒng)中所有TypeLib。

PS:word兼容性真不好搞,目前也沒(méi)有一套完美的解決方案,希望大牛指導(dǎo)。

Interop type 'Microsoft.Office.Interop.Word.ApplicationClass' cannot be embedded

'Microsoft.Office.Interop.Word.ApplicationClass' cannot be embedded. Use the applicable interface instead.

解決方法:

       In your Project, expand the "References", find the Microsoft Office Interop reference. Right click it and select properties, and change "Embed Interop Types" to false.

如下圖:

    相關(guān)評(píng)論

    閱讀本文后您有什么感想? 已有人給出評(píng)價(jià)!

    • 8 喜歡喜歡
    • 3 頂
    • 1 難過(guò)難過(guò)
    • 5 囧
    • 3 圍觀圍觀
    • 2 無(wú)聊無(wú)聊

    熱門(mén)評(píng)論

    最新評(píng)論

    發(fā)表評(píng)論 查看所有評(píng)論(0)

    昵稱:
    表情: 高興 可 汗 我不要 害羞 好 下下下 送花 屎 親親
    字?jǐn)?shù): 0/500 (您的評(píng)論需要經(jīng)過(guò)審核才能顯示)