Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/300.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 通过VSTO加载项打开现有MS Word文档以获取异常时,无法关闭Microsoft Word,因为对话框处于打开状态_C#_Vsto_Office Addins - Fatal编程技术网

C# 通过VSTO加载项打开现有MS Word文档以获取异常时,无法关闭Microsoft Word,因为对话框处于打开状态

C# 通过VSTO加载项打开现有MS Word文档以获取异常时,无法关闭Microsoft Word,因为对话框处于打开状态,c#,vsto,office-addins,C#,Vsto,Office Addins,我开发了一个VSTO插件。我已经创建了一个功能区,它使一个搜索按钮出现在MS Word的外接程序选项卡中 此搜索按钮打开一个窗口,允许用户从云中搜索文档并打开/下载 我想打开正在搜索并从云端下载的文档,并将其打开到现有的MS Word窗口中 我的逻辑是: 当用户下载所选文档时。我正在本地目录中复制它,并试图打开它 示例代码: public void OpenDocument(string documentPath, Form form) { _searchForm.Close(); _s

我开发了一个VSTO插件。我已经创建了一个功能区,它使一个搜索按钮出现在MS Word的外接程序选项卡中

此搜索按钮打开一个窗口,允许用户从云中搜索文档并打开/下载

我想打开正在搜索并从云端下载的文档,并将其打开到现有的MS Word窗口中

我的逻辑是: 当用户下载所选文档时。我正在本地目录中复制它,并试图打开它

示例代码:

public void OpenDocument(string documentPath, Form form)  
{

_searchForm.Close();
_searchForm.Dispose();


Word.Document newDoc = Globals.ThisAddIn.Application.Documents.Open(documentPath);
newDoc.Activate();

}
但是,我得到了以下例外

无法关闭Microsoft Word,因为对话框处于打开状态。单击“确定”,切换到Word,然后关闭对话框


无法在MS Word的活动窗口中打开文档。但是,我可以设法利用变通办法来实现同样的目标

当通过MS Word打开任何新文档时,我检查,如果父窗口(活动窗口)为空,则

  • 我正在添加要打开的新文档

  • 然后,我将关闭活动窗口(检查后,如果它为空)

  • 示例代码

    //Get the active document.
    Word.Document activeDocument = Globals.ThisAddIn.Application.ActiveDocument;
    
    //Check, if Active Window is blank, then we can close it. Once the new Window is Opened. If not, 
    //we'll open the document in new window
    bool closeParentWindow = activeDocument.Content.End - activeDocument.Content.Start == 1 ;
    
    
    string activeDocName = activeDocument.Name;
    
    //Add the new document which's supposed to open
    Word.Document newDoc = this.Application.Documents.Add(path, System.Type.Missing, System.Type.Missing);
    newDoc.ActiveWindow.Caption = matterDocument.Document.Name;
    
    
    if (closeParentWindow)
    {
        //If Earlier Window/ Document Could be closed. Then need to invoke Close
        Word._Document docToClose = Application.Documents[activeDocName] as Word._Document;
        docToClose.Close(Word.WdSaveOptions.wdDoNotSaveChanges);
    }
    

    嗯,如果从表单中调用了
    OpenDocument
    ,那么表单此时无法完成/被释放,因为它仍在执行。此外,错误消息还提到试图关闭Word应用程序。我在问题中没有看到任何与此相关的代码,因此问题的确切位置尚不清楚…我已经能够解决异常,即“您无法关闭Microsoft Word,因为对话框已打开”。单击“确定”,切换到Word,然后关闭对话框”。使用下面的代码:Word.Document doc=this.Application.Documents.Add(path,System.Type.Missing,System.Type.Missing);但它正在打开一个新的MS Word窗口。我想按设计在现有的(活动Word窗口)中打开它,十多年来,不可能打开多个文档/Word窗口。每个文档都必须在单独的窗口中打开,即使所有这些窗口都是同一Word.Application实例的一部分。这就是你说的吗?谢谢Sindy。当我添加新文档(在单独的窗口中打开)时,有没有办法关闭一个MS Word窗口?非常感谢您的帮助。可能吧,但如果没有确切的细节,我们无法确定。