概要
新規ドキュメントを作成します。
次回は文字を書き込みます。
今回利用するWordオブジェクト
前回までに紹介したメソッド/プロパティは省略。
オブジェクト名 | プロパティ/メソッド | 説明 | リンク |
---|---|---|---|
Application | - | Wordアプリを表すオブジェクト | msdn |
ActiveDocument | 作業中の文書(Document) | msdn | |
Documents | - | Documentのコレクション | msdn |
Count | コレクション内のオブジェクト数 | msdn | |
Add() | 新しい文書を作成する | msdn | |
Document | - | Documents内の1つの文書 | msdn |
Name | ファイル名のみ1 | msdn2 | |
Activate() | 作業中の文書にする3 | msdn |
ActiveDocumentプロパティは、作業中の文書(ActiveなDocument)ならば、Application→Documents→DocumentとたどらなくてもDocumentにアクセスできることを示しています。
コード
以降はコード(というか、qtconsoleの確認結果)を示していきますが、前回の起動終了のようなテンプレ的な処理は省略します。↓の「★なんらかの処理★」部分に記述しているイメージで読んでください。
import win32com.client
#Wordを起動する : Applicationオブジェクトを生成する
Application=win32com.client.Dispatch("Word.Application")
#Wordを画面表示する : VisibleプロパティをTrueにする
Application.Visible=True
★なんらかの処理★
#Wordを終了する : Quitメソッドを呼ぶ
Application.Quit()
Wordのコレクションについて
Wordのコレクションの各要素には、Documents(1)、Documents(2)、・・・と丸括弧でアクセスします。以下に注意が必要です
- 角括弧ではないこと
- nは1から始まること
- Add()、Close()などの呼び出しやGUI操作(e.g.windowのクローズ操作)でコレクションの位置が変わる
- シーケンシャルアクセスはイテレートするのが圧倒的に早いこと
新しい文書を作成する
Application.Documents.Add()を呼び出すとDocumentsに新しいDocumentが追加され、戻り値で追加されたDocumentの参照が返ってきます。
また、Application.ActiveDocumentが指す先も追加されたDocumentになっています。
# Documentオブジェクトの個数を確認
In [79]: Application.Documents.Count
Out[79]: 0 # Documentオブジェクトは0個
#Add()する。追加したDocumentの参照が返ってくるのでdocで受け取っておく。
In [80]: doc=Application.Documents.Add()
# Documentオブジェクトの個数を確認
In [81]: Application.Documents.Count
Out[81]: 1 # 1個追加されている。
# Nameを3つの方法で確認する。
In [82]: doc.Name
Out[82]: '文書 1'
In [83]: Application.ActiveDocument.Name
Out[83]: '文書 1'
In [84]: Application.Documents(1).Name
Out[84]: '文書 1'
Add()の呼び出しで、Application.ActiveDocumentやApplication.Documents(n)の参照先が変わります。変数で参照を受け取っておき、使いまわすのがいいと思います。
#doc2で2個目の参照を受け取っておく
In [85]: doc2=Application.Documents.Add()
# Nameを3つの方法で確認する。
In [86]: doc2.Name
Out[86]: '文書 2'
In [87]: Application.ActiveDocument.Name
Out[87]: '文書 2' # Add()の呼び出しで追加されたものがActiveDocumentになる
In [88]: Application.Documents(1).Name
Out[88]: '文書 2' # Add()の呼び出しでDocuments(1)が指しているものも変わってしまう!!!
In [89]: Application.Documents(2).Name
Out[89]: '文書 1' # Documents(2)に移動している。
# docで保持しておいた参照は変わらない
In [90]: doc.Name
Out[90]: '文書 1'
# Activate()を呼び出すと、
In [91]: doc.Activate()
In [92]: Application.ActiveDocument.Name
Out[92]: '文書 1' # ActiveDocumentになる
# Documents(1)、Documents(2)は変化なし
In [93]: Application.Documents(1).Name
Out[93]: '文書 2'
In [94]: Application.Documents(2).Name
Out[94]: '文書 1'
関連
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)取得