无法将类型为“Microsoft.Office.Interop.Word.ApplicationClass”的 COM 对象强制转换为接口类型“Microsoft.Office.Interop.Word._Application”

时间:2024-03-11 14:37:32

office修复真实案例

1. 用户无法预览word

客户电脑上安装的客户端无法正常预览word,并报错;

电脑参数:

  1. Windows版本:Windows 10 企业版 2015 长期服务方案

  2. 处理器:Intel(R) Core(TM) i5-4590S CPU @ 3.00GHz 3.00GHz

  3. 内存:8.00 GB

  4. 系统类型:64 位操作系统,基于 x64 的处理器

  5. office 版本:2013

错误详情:

2020-04-24 11:47:19,425 DEBUG [][0]- 正要使用Word应用打开文件C:\Users\Administrator\Documents\移动授课\魏林\七年级\1班\语文\20200424113510\人教部编版七年级上册1 .1《春》 教学案.doc。
2020-04-24 11:47:24,967 ERROR [][0]- word转换pdf失败,无法将类型为“Microsoft.Office.Interop.Word.ApplicationClass”的 COM 对象强制转换为接口类型“Microsoft.Office.Interop.Word._Application”。此操作失败的原因是对 IID 为“{00020970-0000-0000-C000-000000000046}”的接口的 COM 组件调用 QueryInterface 因以下错误而失败: 库没有注册。 (异常来自 HRESULT:0x8002801D (TYPE_E_LIBNOTREGISTERED))。System.InvalidCastException: 无法将类型为“Microsoft.Office.Interop.Word.ApplicationClass”的 COM 对象强制转换为接口类型“Microsoft.Office.Interop.Word._Application”。此操作失败的原因是对 IID 为“{00020970-0000-0000-C000-000000000046}”的接口的 COM 组件调用 QueryInterface 因以下错误而失败: 库没有注册。 (异常来自 HRESULT:0x8002801D (TYPE_E_LIBNOTREGISTERED))。
   在 System.StubHelpers.StubHelpers.GetCOMIPFromRCW(Object objSrc, IntPtr pCPCMD, IntPtr& ppTarget, Boolean& pfNeedsRelease)
   在 Microsoft.Office.Interop.Word.ApplicationClass.get_Documents()
   在 EasyClassServer.Widgets.OfficeFileHandler.WordToPDF(String sourcePath, String targetPath)
2020-04-24 11:47:24,980 ERROR [][0]- 打开word错误,无法将类型为“Microsoft.Office.Interop.Word.ApplicationClass”的 COM 对象强制转换为接口类型“Microsoft.Office.Interop.Word._Application”。此操作失败的原因是对 IID 为“{00020970-0000-0000-C000-000000000046}”的接口的 COM 组件调用 QueryInterface 因以下错误而失败: 库没有注册。 (异常来自 HRESULT:0x8002801D (TYPE_E_LIBNOTREGISTERED))。System.InvalidCastException: 无法将类型为“Microsoft.Office.Interop.Word.ApplicationClass”的 COM 对象强制转换为接口类型“Microsoft.Office.Interop.Word._Application”。此操作失败的原因是对 IID 为“{00020970-0000-0000-C000-000000000046}”的接口的 COM 组件调用 QueryInterface 因以下错误而失败: 库没有注册。 (异常来自 HRESULT:0x8002801D (TYPE_E_LIBNOTREGISTERED))。
   在 System.StubHelpers.StubHelpers.GetCOMIPFromRCW(Object objSrc, IntPtr pCPCMD, IntPtr& ppTarget, Boolean& pfNeedsRelease)
   在 Microsoft.Office.Interop.Word.ApplicationClass.Quit(Object& SaveChanges, Object& OriginalFormat, Object& RouteDocument)
   在 EasyClassServer.Widgets.OfficeFileHandler.WordToPDF(String sourcePath, String targetPath)
   在 EasyClassServer.Widgets.OfficeFileHandler.<>c__DisplayClass41_0.<OpenWordFile>b__0()

解决方案

猜测是由于电脑之前安装过 Office 或者 WPS,卸载不干净导致。

  1. 打开注册表,找到 HKEY_CLASSES_ROOT\TypeLib{00020905-0000-0000-C000-000000000046}

  2. office 2007 对应 8.4,office2010对应 8.5,office2013对应 8.6,office2016、2019对应 8.7。当时机器上除了8.6,还有一个空的 8.7,将 8.7 删除后就可以了。