C# 发生COMException:错误代码=-2146824070

C# 发生COMException:错误代码=-2146824070,c#,ms-word,ms-office,office-interop,error-code,C#,Ms Word,Ms Office,Office Interop,Error Code,我正在使用Word的互操作库,我遇到一个COM异常: 消息:“类型不匹配” 错误代码:-2146824070 资料来源:“Microsoft Word” 引发错误的方法是: object docStart = doc.Content.End - 1; object docEnd = doc.Content.End; object start = subDoc.Content.Start; object end = subDoc.Content.End; Word.Range rng = doc

我正在使用Word的互操作库,我遇到一个COM异常:

消息:“类型不匹配” 错误代码:-2146824070 资料来源:“Microsoft Word”

引发错误的方法是:

object docStart = doc.Content.End - 1;
object docEnd = doc.Content.End;
object start = subDoc.Content.Start;
object end = subDoc.Content.End;

Word.Range rng = doc.Range(ref docStart, ref docEnd);
rng.FormattedText = subDoc.Range(ref start, ref end);
(尝试设置FormattedText属性时引发错误。)

调试时的局部变量是:

docStart: 0
docEnd: 1
start: 0
end: 10

我不确定我的问题是什么。有什么想法吗?谢谢

我会将最后一行分成两部分进行调试

  • 调用子文档范围(将reslt放入临时变量中)
  • 将其设置为
    rng.FormattedText

  • 检查#1是否真的在做你期望的事情。我猜不会是因为
    end
    超出了
    documentEnd

    最后一行需要

    rng.FormattedText = subDoc.Range(ref start, ref end).FormattedText; 
    
    也就是说,您需要在行尾添加
    .FormattedText

    不能将FormattedText设置为范围对象,只能将其设置为FormattedText对象


    事实上,它们都是System.\uuuComObject类型,这意味着它们都被包装在一个RCW中。包装器中的对象类型不同。

    需要是
    rng.FormattedText=subDoc.Range(ref start,ref end)。FormattedText无法将格式化文本设置为范围对象…是否来自同一Word实例的
    doc
    subDoc
    ?您不能将格式化文本从Word的一个实例分配给另一个实例,它们必须位于同一实例中(即相同的
    应用程序
    )。我正在使用相同的应用程序打开它们。我发布的方法位于为每个文档调用的类中。执行此检查后,我看不到tempRng和rng.FormattedText类型之间的任何差异。它们都是{System.{ComObject}类型,我也不能让它工作。。。仍然给我一个类型不匹配