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

C# 此方法或属性不可用,因为文档窗口未处于活动状态,c#,vsto,C#,Vsto,我在向文档添加内容控件时遇到问题。 我需要将指定范围内的richtextcontentcontrol添加到文档中的段落中,但不需要将activedocument添加到我从路径打开的文档中 Word.Range range = paragraph.Range; range.SetRange(1, 3); try { var richTextControl2 = document.Controls.AddRichTextContentControl(range, "richTextContr

我在向文档添加内容控件时遇到问题。 我需要将指定范围内的richtextcontentcontrol添加到文档中的段落中,但不需要将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.段落 此异常与
AddRichTextContentControl
所有错误是:

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


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

我在win32上使用非常旧的OLE/COM代码,目前使用的是Office 2003和2013。我想更改该代码,因为它在打开文档时显示Word窗口,而在自动化启动时Word已经可见。该代码通常可以使用多年,但如果文档在可见的Word窗口中打开,则使用COM进行搜索+替换时会出现性能问题

只有当不存在具有可能以前可见窗口的Word进程时,并且我打开visible=false的文档时,我才会面临此错误。如果我首先通过OLE/COM使用.OpenOld()初始化Word进程,或者仅通过从资源管理器(例如explorer)中打开文档就可以看到Word进程,那么我不会遇到该错误

我使用.OpenOld()(很短一段时间),因为我们的代码到目前为止都使用Word.Application.8,word97中的.Open()在word2003中似乎是.OpenOld()。我不希望我们的客户执行.OpenOld()。但永远不知道,我不想打破它。所以这只是一种退路。不过,这种改变给了我错误

这段代码以某种方式解决了我的错误:

如果u u oWord:IWordApplication:可见 __oIWDoc:=oIWordDocuments:Open(\uU of S:fullPath,,,,,,,,,,lNewDocVisible) 其他的 __oIWDoc:=oIWordDocuments:OpenOld(\uuOfs:fullPath) 恩迪夫

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

希望能帮上忙,谢谢,
汤姆·霍斯特曼(Tom Horstmann)

对此做了进一步的研究。只要激活当前使用的文档就足够了,如果没有其他文档已经打开并且可见:if__oWord:iWORD应用程序:可见。和__oWord:IWordApplication:Windows:count<2\uuuuOiWDOC:Activate()如果上述代码不起作用,则在Word 2013中,没有打开文档的Word窗口是可见的。是的,这是应用程序的问题。可见,不幸的是,我需要打开文档切换显示任何新窗口,所以我必须重新构建我的所有插件:/Document:Activate()似乎在没有真正显示窗口的情况下工作。但正如您所说,您需要重建插件,这对您的情况没有帮助吗?我必须打开许多docx文件,才能获得互操作文档,因此我必须使用application.visible=false(当然是自定义应用程序)