5

我正在使用 Microsoft Word 主互操作程序集来从属 MS Word。我的应用程序打开了自己的 Word 窗口(使用Microsoft.Office.Interop.Word.Application的实例)。应用完成后,我想关闭我打开的 Word 窗口,但我不想影响用户可能打开的其他 Word 窗口。如果我使用 Application.Quit 那么所有的 Word 窗口最终都会关闭。如果我使用 Application.ActiveWindow.Close,则 word文档将关闭,但我创建的 Word 窗口仍保持打开状态,并出现不受欢迎的空白屏幕。

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

4

2 回答 2

4

我意识到这有点晚了,但这对我有用;

在创建您的 Word 应用程序对象时,创建一个临时 Word 对象,首先打开它,然后打开您的正确 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

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

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

于 2014-11-20T11:41:09.947 回答
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 不会杀死 winword.exe

于 2011-10-25T14:03:28.287 回答