2011-10-10 5 views
4

私は、スレーブMS WordにMicrosoft Wordプライマリ相互運用機能アセンブリを使用しています。私のアプリケーションは、(Microsoft.Office.Interop.Word.Applicationのインスタンスを使用して)独自のWordウィンドウを開きます。アプリケーションがそのことをやった後、私が開いたWordのウィンドウを閉じたいが、開いているかもしれない他のWordウィンドウに影響したくない。。 Application.Quitを使用すると、すべてのWordウィンドウが閉じて終了します。 Application.ActiveWindow.Closeを使用すると、単語が閉じますが、作成したWordウィンドウは空白の画面で開いたままになります。これは望ましくありません。Word interop - すべてのウィンドウを閉じずに1つのWordウィンドウを閉じるにはどうすればいいですか?

他のインスタンスに影響を与えずに開いたWordインスタンスを閉じるために、そのAPIを通じてWordに指示するにはどうすればよいですか?これは、Wordウィンドウの右上隅にあるXをクリックしたときの動作に似ています。

答えて

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

2

私はこれが後半修正のビットですが、これは私のために働い実現。

単語アプリケーションオブジェクトを作成するときは、一時的なWordオブジェクトを作成し、最初に開き、適切な単語文書を開いてから、一時的な単語オブジェクトを閉じます。

これはスペースとメモリを無駄にしているように思えますが、作成したwinword.exeが自分のものであり、新しく作成されたワードドキュメントがあなたのものにならないようにします。

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のオフィスワード)を使用して別の単語を開く必要がありました。私のアプリケーションがMyWord.Quit()を呼び出すと、両方のドキュメントインスタンスを閉じます。問題は、新しく作成されたドキュメントがアプリケーションが作成するWINWORD.EXEにフックするため、アプリケーションを閉じるときに別のドキュメントを閉じます(別のインスタンスに表示されているにもかかわらず)。

私は修正に長い時間がかかりました。

+0

私のために働いたが、その背後にあるロジックを理解できなかった。 – m2pathan

関連する問題