今天在使用 PowerPoint 时,(在遭遇了各种令人抓狂的奇葩问题之后,又)出现了如下提示:

无法将类型为“Microsoft.Office.Interop.PowerPoint.ApplicationClass”的 COM 对象强制转换为接口类型“Microsoft.Office.Interop.PowerPoint._Application”。此操作失败的原因是对 IID 为“{91493442-5A91-11CF-8700-00AA0060263B}”的接口的 COM 组件调用 QueryInterface 因以下错误而失败: 库没有注册。 (异常来自 HRESULT:0x8002801D (TYPE_E_LIBNOTREGISTERED))。

英文版的错误提示如下:

Unable to cast COM object of type ‘Microsoft.Office.Interop.PowerPoint.ApplicationClass’ to interface type ‘Microsoft.Office.Interop.PowerPoint._Application’. This operation failed because the QueryInterface call on the COM component for the interface with IID ‘{91493442-5A91-11CF-8700-00AA0060263B}’ failed due to the following error: Library not registered. (Exception from HRESULT: 0x8002801D (TYPE_E_LIBNOTREGISTERED)).

搜了半天,没搜到 PowerPoint 的内容,倒是发现不少人的 Word、Excel、Outlook 等也出现了类似的情况。最后,判断出现这种错误的原因是:

曾经装过 Office 2013,后来又卸载了,但是微软的卸载程序卸得不干净,在注册表中留下了许多残余项目,当程序去调用 Office 组件时,它们根据注册表的记录,试图去调用 Office 2013 的库,但那些库已经不存在了,所以就报错。

知道了原因,解决办法就很显然了:删除注册表中的残余项目。

然而,要找到到底是注册表的哪个项目,真是废了我半天劲。中间的无数艰辛此处就略过不表了,最后,让我终于能用的动作是删除了如下的项:

HKEY_CLASSES_ROOT\TypeLib\{91493440-5A91-11CF-8700-00AA0060263B}\2.b

这个项展开,里面有个键名称是“PrimaryInteropAssemblyName”,数值为“Microsoft.Office.Interop.PowerPoint, Version=15.0.0.0, Culture=neutral, PublicKeyToken=71E9BCE111E9429C”,就是它在作祟。

把整个“2.b”(好个 2b 的名字……)删掉,或者不敢删的话,给它改个名,就行了。

不过,注册表中还有许多类似的项目,在删除这个之前,我还删了好几个,不知道是不是也起了作用。(我每删一个就试一次,删掉这个“2.b”才终于成功了,之前删的那些可能有用也可能没用。)

建议凡是有“Microsoft.Office.Interop.PowerPoint, Version=15.0.0.0”的都可以删了,因为 version 15 就是 2013 版,既然我们已经卸载了 Office 2013,这些项目就完全没用了。

不得不骂一句微软,你自家的操作系统自家的程序,连个卸载程序都做不好,留那么多垃圾!

网上还有些人提出一些解决办法,比如重启电脑、在“添加、删除程序”里选择“修复 Office”等等,经过实验在我这全都没用,唯有清理注册表痕迹才是最佳办法。

如果你安装过其他版本的 Office 出现问题,也可以用类似办法解决。注册表里只留你当前安装的那个版本的信息,其他的删掉即可。