C# 在visualstudioc中通过代码打开Word文档#

C# 在visualstudioc中通过代码打开Word文档#,c#,.net,vsto,C#,.net,Vsto,我正在用Visual Studio开发一个Office开发。并接收下面的错误 Error: ** 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 cal

我正在用Visual Studio开发一个Office开发。并接收下面的错误

Error: 
**
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: No such interface supported (Exception from HRESULT: 0x80004002 (E_NOINTERFACE)).
**
代码:(另请参阅)


这个错误是什么?如何避免它?

尝试将if语句后的第一行替换为以下内容:

Microsoft.Office.Interop.Word.Application wdApp = new Microsoft.Office.Interop.Word.Application();
然后确保添加对“Microsoft Word 12.0对象库”COM对象的引用,该对象在解决方案资源管理器中类似于“Microsoft.Office.Interop.Word”


我对此进行了测试,出现了一个空白的MS Word应用程序。让我们看看我们是否能做到这一点。

问题是HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID{000209FF-0000-0000-C000-0000000000 46}无法注册。 尽管该类(Microsoft.Office.Interop.Word.ApplicationClass)存在于注册表中,但并不意味着它已注册。如果您在代码中引用“ApplicationClass”类,Microsoft不允许注册Microsoft.Office.Interop.Word.dll,原因是无法解释的;当部署到实际服务器时,您将遇到此问题。您不会在本地/生成计算机上收到错误消息/警告。 下面是一般性错误的样子:

正在检索具有CLSID的组件的COM类工厂 {000209FF-0000-0000-C000-0000000000 46}由于以下原因失败 错误:80040154类未注册(HRESULT异常: 0x80040154(REGDB_E_CLASSNOTREG))

结论: 即使您已安装/激活并获得了Microsoft Office 2007/2010许可。无法注册“Microsoft.Office.Interop.Word.dll”dll。我花了几乎整整一周的时间才弄明白这一点。注:自己看;下载安装运行“RegDllView”。您可以看到“WINWORD.EXE”的所有已注册DLL。注意,{000209FF-0000-0000-C000-0000000000 46}将不会显示。尝试使用该程序手动注册“Microsoft.Office.Interop.Word.dll”将失败,错误代码为127。我相信解决方法实际上是使用Microsoft.Office.Interop.Word.dll中提供的“文档”接口。它只是WINWORD.EXE的一个包装,这就是它的本质。

我知道它有点“过期”,但有些人可能仍然难以找到一个简单的解决方案(就像我一样),因此我的回答是

根据@Marine_Elite post,该类没有正确注册,但有一个解决方法(我认为)比在WINWORD.EXE周围编写自定义包装要容易得多

我使用了取自的示例,并将其应用于MSWORD.OLB
简而言之,您可能只需要下载并在上面提到的OLB上运行,但强烈建议您按照提供的链接中的所有步骤进行操作

我使用的最后一个命令是:
regtlibv12.exe“C:\Program Files\Microsoft Office\root\Office16\MSWORD.OLB”


从那以后,我的代码运行得很好,尽管我不确定重新启动后应用程序在不同的主机上,甚至在我自己的机器上会如何运行。但是,在后一种情况下再次注册OLB潜在问题是一个简单的解决方案。

您可以尝试使用代码中的这一行而不是第3行吗?存在一个无法识别的错误ApplicationClass。出现以下错误:无法嵌入互操作类型“Microsoft.Office.Interop.Word.ApplicationClass”。改用适用的接口。找不到类型或命名空间名称“ApplicationClass”(是否缺少using指令或程序集引用?)。无论如何,谢谢您使用Microsoft.Office.Interop.Word.dll中提供的“文档”界面的
是什么意思?在我的情况下,此answare搁置:此链接不起作用。plz检查
Microsoft.Office.Interop.Word.Application wdApp = new Microsoft.Office.Interop.Word.Application();