发生 COMException:错误代码 = -2146824070

发布于 2025-01-01 12:08:00 字数 546 浏览 0 评论 0原文

我正在使用 Word 的 Interop 库,但收到 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

我不确定我的问题在这里。有什么想法吗?谢谢!

I am using the Interop library for Word, and I am getting a COM Exception:

Message: "Type Mismatch"
ErrorCode: -2146824070
Source: "Microsoft Word"

The method throwing the error is:

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);

(Error is being thrown when it tries to set the FormattedText property.)

The locals when debugging are:

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

I'm not sure what my issue is here. Any ideas? Thanks!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

临风闻羌笛 2025-01-08 12:08:00

我将通过将最后一行分成两部分来进行调试。

  1. 调用 subdoc.Range(将 reslt 放入临时变量中)
  2. 将其设置为 rng.FormattedText。

检查 #1 是否确实按照您的预期进行。我的猜测是不会,因为 end 超出了 documentEnd

I would debug by splitting the last line into 2 parts.

  1. calling subdoc.Range (putting the reslt in a temp variable)
  2. setting that to rng.FormattedText.

Check that #1 is actually doing what you expect. My guess is that it won't be because end goes beyond documentEnd.

岁月打碎记忆 2025-01-08 12:08:00

最后一行需要是

rng.FormattedText = subDoc.Range(ref start, ref end).FormattedText; 

,即您需要将 .FormattedText 添加到该行的末尾。

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

事实上,它们都是 System.__ComObject 类型,这意味着它们都包装在 RCW 中。包装器内的对象有不同的类型。

The last line needs to be

rng.FormattedText = subDoc.Range(ref start, ref end).FormattedText; 

I.e. you need to add .FormattedText to the end of the line.

You cannot set FormattedText to a range object, you can only set it to a formattedText object.

The fact that they are both of type System.__ComObject just means they are both wrapped in a RCW. The objects inside the wrappers are of different types.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文