4
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

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
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

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)取得

#参考

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?