LoginSignup
4
3

More than 5 years have passed since last update.

Python(pywin32)でWordを操作する[2] - Wordを起動/終了する

Last updated at Posted at 2018-05-18

概要

Wordを起動/終了します。
Application.Quit()を呼ばないと、プロセスがバックグラウンドに残ります。
(VBScriptだとさらに良くない動作)

次回、新規ドキュメントを開きます。

今回利用するWordオブジェクト

word_obj.png

オブジェクト名 プロパティ/メソッド 説明 リンク
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として保存

undead_word_process.vbs
Set App = CreateObject("Word.Application")
Set App = Nothing

undead.PNG

(2) undead_word_process.vbsを10回ダブルクリック
(3) 30秒くらい待つ
(4) タスクマネージャでバックグラウンドプロセスを確認
(5) 見えないWordが10個起動している

task_mgr.PNG

関連

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

4
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
3