无法将类型为DocumentClassCOM对象强制转换为接口类型.Interop.Word._Document的解决方案
在通过代码调用Word对象时,有时会出现这个错误:
错误提示:
无法将类型为“Microsoft.Office.Interop.Word.DocumentClass”的COM 对象强制转换为接口类型“Microsoft.Office.Interop.Word._Document”。此操作失败的原因是对IID 为“{0002096B-0000-0000-C000-000000000046}”的接口的 COM 组件调用QueryInterface 因以下错误而失败: 库没有注册。 (异常来自 HRESULT:0x8002801D(TYPE_E_LIBNOTREGISTERED))。
这个问题的产生原因:
要么是安装了两个版本的Office,要么是同时安装了WPS和Office,当然这么安装一般情况下没有问题,但部分Office版本或WPS没有处理,就会出现对
IID为“{0002096B-0000-0000-C000-000000000046}”的接口在注册表中注册了两个或更多版本(正常应该是唯一的),导致程序在调用word对象时不知所措,进而提示:“库没有注册”。
解决办法:
既然找到了原因,解决起来,就非常简单了,就是删除注册表中多余的注册。
温馨提示:通过卸载或覆盖安装office,一般不能解决该问题,因为安装程序不会考虑这里的错误。
1、打开注册表,
路径:计算机\HKEY_CLASSES_ROOT\Interface\{00020970-0000-0000-C000-000000000046}\TypeLib
可以看到版本号是8.5:
再到注册表这个位置:计算机\HKEY_CLASSES_ROOT\WOW6432Node\TypeLib\{00020905-0000-0000-C000-000000000046}
(上面的注册表位置是64位Windows系统的,如果是32位的windows,则没有WOW6432Node重定向,即应该找这个位置:
计算机\HKEY_CLASSES_ROOT\TypeLib\{00020905-0000-0000-C000-000000000046}
)
把上面两个红框里,版本改为一致。如果有多余的,8.6或者8.7,删除即可。