概要
Wordを起動/終了します。
Application.Quit()を呼ばないと、プロセスがバックグラウンドに残ります。
(VBScriptだとさらに良くない動作)
次回、新規ドキュメントを開きます。
今回利用するWordオブジェクト
オブジェクト名 | プロパティ/メソッド | 説明 | リンク |
---|---|---|---|
Application | - | Wordアプリを表すオブジェクト | [msdn][app_msdn] |
Visible | Wordを画面表示する | [msdn][visible_msdn] | |
Quit() | Word を終了する | [msdn][quit_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_msdn])。
Quit()を呼ばずに終了するとWordのプロセスが残ってしまうので注意してください。
#Wordを終了する : Quitメソッドを呼ぶ
Application.Quit()
補足
Application.Quit()を呼ばないと・・・
win32com.client.Dispatch()の場合は、既存のWordプロセスを使いまわしているようで、一つ残ります。VBScriptの場合はスクリプト実行した分だけ残ります。
マイクロソフトのサンプルでQuit()を呼んでないけど・・・?
ネットのvscriptサンプルだとQuit()を呼んでないものがそこそこあり、その中にマイクロソフトのサンプルもあるんですが、
[Office Space Microsoft Word 文書でテキストを検索、置換する - technet.microsoft.com][vbscript_word_search]
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として保存
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][object_model]
- [PyWin32 Documentation - Tim Golden's Stuff][tim_pywin32_docs]
- [VOV(VBA, OLE, VBScript)による自動操作 - スクリプト系プログラミング言語ファンのじたばた][vov]
- [COM(Component Object Model)についてふわっと学習していく その1 導入編 - Qiita][qiita_com]
- [VBScriptでWordファイルのページ数一覧を作ってみる - Segmentation Fault][macro_list]
- [Office Space Microsoft Word 文書でテキストを検索、置換する - technet.microsoft.com][vbscript_word_search]
- [みんなのワードマクロ][macro]
- [オブジェクトの解放 - technet.microsoft.com][vbscript_word_quit2]
- [Office アプリケーションを別のアプリケーションから制御する - msdn.microsoft.com][vbscript_word_quit1]
[quit_msdn]:https://msdn.microsoft.com/ja-jp/vba/word-vba/articles/application-quit-method-word
[visible_msdn]:https://msdn.microsoft.com/ja-jp/vba/word-vba/articles/application-visible-property-word
[object_model]:https://msdn.microsoft.com/ja-jp/vba/word-vba/articles/object-model-word-vba-reference
[qiita_com]:https://qiita.com/mintcandy/items/979a4a2669c8fc1f4f2f
[tim_pywin32_docs]:http://timgolden.me.uk/pywin32-docs/index.html
[vov]:http://www.dastec.org/vov/index.htm
[macro]:https://www.wordvbalab.com/
[macro_list]:https://www.wordvbalab.com/page-2266/
[vbscript_word_page]:http://www.segmentation-fault.xyz/entry/2017/11/25/222859
[vbscript_word_search]:https://technet.microsoft.com/ja-jp/library/ee692875.aspx
[vbscript_word_quit1]:https://msdn.microsoft.com/ja-jp/vba/excel-vba/articles/controlling-one-microsoft-office-application-from-another
[vbscript_word_quit2]:https://web.archive.org/web/20110405220235/https://technet.microsoft.com/ja-jp/scriptcenter/ff522015.aspx#8
[app_msdn]:https://msdn.microsoft.com/ja-jp/vba/word-vba/articles/application-object-word
[docs_msdn]:https://msdn.microsoft.com/ja-jp/vba/word-vba/articles/documents-object-word
[doc_msdn]:https://msdn.microsoft.com/ja-jp/vba/word-vba/articles/document-object-word
[paras_msdn]:https://msdn.microsoft.com/ja-jp/vba/word-vba/articles/paragraphs-object-word
[para_msdn]:https://msdn.microsoft.com/ja-jp/vba/word-vba/articles/paragraph-object-word
[sens_msdn]:https://msdn.microsoft.com/ja-jp/vba/word-vba/articles/sentences-object-word
[wrds_msdn]:https://msdn.microsoft.com/ja-jp/vba/word-vba/articles/words-object-word
[chrs_msdn]:https://msdn.microsoft.com/ja-jp/vba/word-vba/articles/characters-object-word
[rng_msdn]:https://msdn.microsoft.com/ja-jp/vba/word-vba/articles/range-object-word
[rng_txt_msdn]:https://msdn.microsoft.com/ja-jp/vba/word-vba/articles/range-text-property-word
[para_rng_msdn]:https://msdn.microsoft.com/ja-jp/vba/word-vba/articles/paragraph-range-property-word