【问题标题】:Unable to case COM object of type无法转换类型的 COM 对象
【发布时间】:2017-11-10 01:02:58
【问题描述】:

当我尝试使用 Word 互操作通过页面上的形状执行 foreach 时遇到一个奇怪的错误

我的代码如下

    foreach (word.Shapes p in pages[3].Application.ActiveDocument.Shapes )
    {
        p.SelectAll();
    }

由于某种原因,我得到的例外是这个,我不知道该怎么做才能解决这个问题。

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

【问题讨论】:

  • 不要使用word.Shapes,而是将foreach 变量作为var。无论如何,这都会起作用,然后看看它实际上是什么类型。
  • 您是否尝试过实际投射p?像这样:(Word.Shapes)p ?
  • @KobyDouek:在foreach 循环中显式指定类型将为您执行转换,因此转换不会产生影响。

标签: c# comobject


【解决方案1】:

Shapes 是集合类型,但为了迭代形状,您必须使用Shape 作为每个对象的类型。

【讨论】:

  • 谢谢 不知道我怎么没看到这个:)
猜你喜欢
  • 2019-03-02
  • 2010-11-17
  • 1970-01-01
  • 1970-01-01
  • 2016-02-02
  • 1970-01-01
  • 1970-01-01
  • 2015-03-19
相关资源
最近更新 更多