【问题标题】:Unable to cast COM object of Office Interop Word无法转换 Office Interop Word 的 COM 对象
【发布时间】:2014-04-15 22:30:50
【问题描述】:

我的应用程序具有导出到 Microsoft Word 的功能,但自从我从 Microsoft Office 2010 升级到 Microsoft Office 2013 后,它就没有工作了。

代码如下:

Microsoft.Office.Interop.Word.Application appVersion = new Microsoft.Office.Interop.Word.Application();
appVersion.Visible = false;

这是错误信息:

无法将“Microsoft.Office.Interop.Word.ApplicationClass”类型的 COM 对象转换为接口类型“Microsoft.Office.Interop.Word._Application”。此操作失败,因为 IID 为“{00020970-0000-0000-C000-000000000046}”的接口的 COM 组件上的 QueryInterface 调用因以下错误而失败:不支持此类接口(来自 HRESULT 的异常:0x80004002 (E_NOINTERFACE)) .

有人告诉我要编辑注册表,但我的注册表中不存在 IID“{00020970-0000-0000-C000-000000000046}”。

【问题讨论】:

  • 这就是异常消息的意思,COM 也找不到注册表项。尝试找出注册表损坏的原因后重新安装。并且 尝试在 STA 线程上运行代码,这种封送处理并不便宜。

标签: .net com ms-office office-interop


【解决方案1】:

运行 Office 的修复安装通常可以解决该问题。

【讨论】:

  • 如果这不起作用,是否可以进行进一步的调试?
【解决方案2】:

我遇到了完全相同的问题,重新安装 Office 2013 解决了我的问题。

【讨论】:

    【解决方案3】:

    我从使用 Word 互操作切换到使用后期绑定。不影响重构大量代码的快速修复...

    之前:

    OfficeWord.Application msword = new OfficeWord.Application();
    

    之后:

    Type wordType = Type.GetTypeFromProgID("Word.Application");
    dynamic msword = Activator.CreateInstance(wordType);
    

    解决了我在一批公司计算机上的问题,这些计算机在客户支持升级 Office 后开始出现此问题。

    【讨论】:

    • 现在我知道动态的真正用途了,谢谢 ))
    【解决方案4】:

    老问题,但是我在尝试创建新单词应用程序时遇到了同样的问题,同样的错误消息。问题很简单,一旦我沮丧地关闭 VS 并去做其他工作。当我打开 Word 时,它检索到了 Word 关闭时尚未保存的文档,并想知道我想对它们做什么。我告诉它删除它们,关闭单词并且我的代码运行良好。仍在努力解决这个问题,但我想我会把它放在这里,以免其他人重新安装办公室,因为它很简单。

    【讨论】:

      猜你喜欢
      • 2011-08-17
      • 2018-11-16
      • 2017-11-10
      • 2011-10-29
      • 1970-01-01
      • 1970-01-01
      • 2011-06-07
      • 2010-11-17
      • 1970-01-01
      相关资源
      最近更新 更多