Взаимодействие Word - как закрыть одно окно Word, не закрывая их все? - PullRequest
4 голосов
/ 10 октября 2011

Я использую Microsoft Word Primary Interop Assembly в качестве подчиненного MS Word.Мое приложение открывает свое собственное окно Word (используя экземпляр Microsoft.Office.Interop.Word.Application ).После того, как приложение сделает свое дело, я хочу закрыть открытое окно Word, но Я не хочу влиять на другие окна Word, которые пользователь может открыть .Если я использую Application.Quit, все окна Word закрываются.Если я использую Application.ActiveWindow.Close, тогда слово document закрывается, но созданное мной окно Word остается открытым с пустым экраном, что нежелательно.API, чтобы закрыть экземпляр Word, который я открыл, не затрагивая другие экземпляры?Это похоже на поведение, когда вы нажимаете X в правом верхнем углу окна Word.

Ответы [ 2 ]

3 голосов
/ 20 ноября 2014

Я понимаю, что это немного поздно, но это сработало для меня;

При создании вашего текстового приложения создайте временный объект Word, сначала откройте его, а затем откройте нужный документ Word ... затем закройте временный файл.

Может показаться, что он тратит пространство и память, но при этом он гарантирует, что созданный файл winword.exe будет работать самостоятельно, а вновь созданные документы Word не будут подключатьсяyours.

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, который создает ваше приложение, поэтому при закрытии приложения оно закрывает другой документ (даже если они появляются в разных экземплярах).

Мне потребовалосьдолго исправлять, и я надеюсь, что это поможет другим!

0 голосов
/ 25 октября 2011

с использованием 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

...