Word互操作 - 如何关闭一个Word窗口而不关闭所有这些?

时间:2011-10-10 12:45:49

标签: .net ms-word office-interop word-2003

我正在使用Microsoft Word主互操作程序集来从属MS Word。我的应用程序打开了自己的Word窗口(使用Microsoft.Office.Interop.Word.Application的实例)。应用程序完成后,我想关闭我打开的Word窗口,但我不想影响用户可能打开的其他Word窗口。如果我使用Application.Quit,那么所有Word窗口最终都会关闭。如果我使用Application.ActiveWindow.Close然后单词 document 关闭,但我创建的Word窗口仍然保持打开状态,这是一个空白屏幕,这是不可取的。

如何告诉Word通过其API关闭我打开的Word实例而不影响其他实例?这类似于单击Word窗口右上角的X时的行为。

2 个答案:

答案 0 :(得分:3)

我意识到这是一个迟到的修复,但这对我有用;

创建单词应用程序对象时,创建一个临时Word对象,先打开它,然后打开正确的单词文档......然后关闭临时单词对象。

这可能看起来浪费了空间和内存,但这样做可以确保您创建的winword.exe保留在它自己的位置,并且新创建的word文档不会与您的文件挂钩。

Private sub OpenWord()

Dim MyWord as Object
Dim MyTempWord as Object

//I use the CreateObject in my application, but this will be however 
//you declare your word application 

MyTempWord = CreateObject("Word.Application")
MyWord = CreateObject("Word.Application")
MyTempWord.Quit(SaveChanges:=0)


//*Carry on doing whatever your app does*

//*After Finishing App stuff Close it...*

     If MyWord IsNot Nothing Then
        MyWord.Quit(SaveChanges:=0)
        Marshal.FinalReleaseComObject(MyWord)
    End If

End Sub

要重现此问题,我必须在我的应用程序中打开单词,然后通过快捷方式(Microsoft office word)打开一个单独的单词。当我的应用程序调用MyWord.Quit()时,它会关闭两个文档实例。问题是新创建的文档挂钩到应用程序创建的WINWORD.EXE,因此当您关闭应用程序时,它会关闭另一个文档(即使它们出现在不同的实例中)。

我花了很长时间修复,我希望它可以帮助别人!

答案 1 :(得分:0)

使用Word.Application.Quit()Marshall.FinalReleaseComObject(Word.Application)我已经能够同时打开多个Word实例,并且只关闭我要关闭的特定实例。

这是一些快速示例代码(来自C#控制台应用程序):

using System.Runtime.InteropServices;
using Microsoft.Office.Interop.Word;

namespace WordTest
{
    internal class Program
    {
        private static void Main(string[] args)
        {
            var p = new Program();
            p.Test();
        }

        public void Test()
        {
            var msWord = new Application();

            CloseWord(msWord);
        }

        public void CloseWord(Application word)
        {
            if (word != null)
            {
                word.Quit();
                Marshal.FinalReleaseComObject(word);
            }
        }
    }
}

另请参阅:c# MSOffice Interop Word will not kill winword.exe