#概要
Wordを起動/終了します。
Application.Quit()を呼ばないと、プロセスがバックグラウンドに残ります。
(VBScriptだとさらに良くない動作)
次回、新規ドキュメントを開きます。
#今回利用するWordオブジェクト
オブジェクト名 | プロパティ/メソッド | 説明 | リンク |
---|---|---|---|
Application | - | Wordアプリを表すオブジェクト | msdn |
Visible | Wordを画面表示する | msdn | |
Quit() | Word を終了する | msdn |
#Wordを起動する
Applicationオブジェクトを生成すると、Wordがバックグラウンドプロセスで起動します。
VisibleプロパティをTrueに設定すると画面上に出てきます。事情がいろいろあるので、最初のうちはApplication.Visible=Trueにしておくのがいいと思います。
import win32com.client
#Wordを起動する : Applicationオブジェクトを生成する
Application=win32com.client.Dispatch("Word.Application")
#Wordを画面表示する : VisibleプロパティをTrueにする
Application.Visible=True
#Wordを終了する
Application.Quitメソッドを呼ぶとWordが終了します。パラメータで終了時の振る舞い(e.g.開いている文書を保存するなど)が指定できます(msdn)。
Quit()を呼ばずに終了するとWordのプロセスが残ってしまうので注意してください。
#Wordを終了する : Quitメソッドを呼ぶ
Application.Quit()
#補足
##Application.Quit()を呼ばないと・・・
win32com.client.Dispatch()の場合は、既存のWordプロセスを使いまわしているようで、一つ残ります。VBScriptの場合はスクリプト実行した分だけ残ります。
##マイクロソフトのサンプルでQuit()を呼んでないけど・・・?
ネットのvscriptサンプルだとQuit()を呼んでないものがそこそこあり、その中にマイクロソフトのサンプルもあるんですが、
Office Space Microsoft Word 文書でテキストを検索、置換する - technet.microsoft.com
Set objWord = CreateObject("Word.Application")
objWord.Visible = True
・・・略・・・
If objSelection.Find.Execute Then
Wscript.Echo "The search text was found."
Else
Wscript.Echo "The search text was not found."
End If
これは、「Visible=Trueにしていればユーザが画面操作でプロセスを消せるでしょ?」
[オブジェクトの解放 - technet.microsoft.com][vbscript_word_quit2]
> このタイプのオブジェクトの場合、**ユーザーが手動でシャットダウンできるように Visible プロパティを使って Excel を画面に表示する**か、またはスクリプトから Excel を閉じる必要があります。
・・・という割り切りがあります。
「大してメモリ使わないし、サクッと終了するから、Set X = Nothingもいらないでしょ。」
[オブジェクトの解放 - technet.microsoft.com][vbscript_word_quit2]
> 要約すると、**オブジェクトをNothingに設定しても、実行中のアプリケーションは終了せず、非常に複雑で、実行時間が長く、メモリを多く消費するスクリプトでない限り、VBScript がオブジェクトを解放してくれるので、オブジェクトをNothingに設定する必要はありません**(では、ここで休憩してもかまいません)。
・・・とも考えてのことだと思います。
##WordもSet X = Nothingでは消せない
(1) 以下をundead_word_process.vbsとして保存
```vb:undead_word_process.vbs
Set App = CreateObject("Word.Application")
Set App = Nothing
(2) undead_word_process.vbsを10回ダブルクリック
(3) 30秒くらい待つ
(4) タスクマネージャでバックグラウンドプロセスを確認
(5) 見えないWordが10個起動している
#関連
Python(pywin32)でWordを操作する[1] - Wordオブジェクトモデル
Python(pywin32)でWordを操作する[2] - Wordを起動/終了する
Python(pywin32)でWordを操作する[3] - 新規ドキュメント作成
Python(pywin32)でWordを操作する[4] - 文字列を入力/取得/削除する
Python(pywin32)でWordを操作する[5] - ドキュメントをファイルに保存する、Wordのオプション変更
Python(pywin32)でWordを操作する[6] - 特定のタイトルが付いているウィンドウの操作
Python(pywin32)でWordを操作する[7] - 既存文書を開く/閉じる(Documents.Open(), Document.Close())
Python(pywin32)でWordを操作する[8] - 段落単位の文字列取得, 統計(ページ数, 段落数,etc)取得
#参考
- オブジェクト モデル - MSDN
- PyWin32 Documentation - Tim Golden's Stuff
- VOV(VBA, OLE, VBScript)による自動操作 - スクリプト系プログラミング言語ファンのじたばた
- COM(Component Object Model)についてふわっと学習していく その1 導入編 - Qiita
- VBScriptでWordファイルのページ数一覧を作ってみる - Segmentation Fault
- Office Space Microsoft Word 文書でテキストを検索、置換する - technet.microsoft.com
- みんなのワードマクロ
- オブジェクトの解放 - technet.microsoft.com
- Office アプリケーションを別のアプリケーションから制御する - msdn.microsoft.com