此方法或属性不可用,因为文档窗口未处于活动状态

时间:2015-09-25 16:25:29

标签: c# vsto

我在向文档添加内容控件时遇到问题。 我需要在指定范围内将richtextcontentcontrol添加到文档中的段落,但不要将activedocument添加到activedocument,以记录我从路径打开的那个。

Word.Range range = paragraph.Range;
range.SetRange(1, 3);
try
{
    var richTextControl2 = document.Controls.AddRichTextContentControl(range, "richTextControl" + counter);
    richTextControl2.PlaceholderText = "Enter your first name";
}
catch(COMException e)
{
    Debug.WriteLine("Error :" + e);
}

文档是Microsoft.Office.Tools.Word.Document,段落是Microsoft.Office.Interop.Word.Paragraph 此例外与AddRichTextContentControl一致 所有错误都是:

  

System.Runtime.InteropServices.COMException(0x800A11FD):此方法或属性不可用,因为文档窗口未处于活动状态。

1 个答案:

答案 0 :(得分:1)

只有一个可能有用的提示,因为我目前面临相同的错误描述,使用Document.PrintOut()打印一个不可见的文档。我认为错误可能与您的情况有相同的原因。

我目前使用Office 2003和2013在win32上使用非常旧的OLE / COM代码。我想更改该代码,因为它在打开文档时显示Word窗口,而Word在我们的自动化启动时已经可见。一般情况下代码工作多年,但如果在可见的Word窗口中打开文档,我们就会遇到使用COM进行搜索+替换的性能问题。

只有当没有可能存在前可见窗口的Word进程存在且我打开带有visible = false的文档时,才会遇到错误。如果我首先使用.OpenOld()通过OLE / COM初始化Word进程,或者只需打开来自例如的文档就可以看到Word。探险家,我没有得到那个错误。

我使用.OpenOld()(很短的时间),因为我们的代码使用Word.Application.8直到现在,Word 97中的.Open()似乎是Word 2003中的.OpenOld()。我不会&#39 ; t期望我们的客户执行.OpenOld()。但不知道,不想打破它。所以它只是一个后备。不过,这种变化给了我错误。

此代码以某种方式为我解决了错误:

IF __oWord:IWordApplication:可见    __oIWDoc:= oIWordDocuments:打开(__ oFS:fullPath ,,,,,,,,,,, lNewDocVisible) 其他    __oIWDoc:= oIWordDocuments:OpenOld(__ oFS:fullPath) ENDIF

对我来说,下一步是在.PrintOut()之前设置文档窗口。 Word可能已被使用,可能是用户在打开文档和打印文档之间关闭的。但即使这样做,我也不认为这是一种值得信赖的方式。目前我想知道,如何安全地打开和打印一个看不见的文件。 如果您因为几乎相同的原因而得到错误,请分享您的结果:)

希望能得到帮助,非常感谢, 汤姆霍斯特曼