#概要
新規ドキュメントを作成します。
次回は文字を書き込みます。
前回までに紹介したメソッド/プロパティは省略。
オブジェクト名 | プロパティ/メソッド | 説明 | リンク |
---|---|---|---|
Application | - | Wordアプリを表すオブジェクト | [msdn][app_msdn] |
ActiveDocument | 作業中の文書(Document) | [msdn][app_activedoc_msdn] | |
Documents | - | Documentのコレクション | [msdn][docs_msdn] |
Count | コレクション内のオブジェクト数 | [msdn][docs_count_msdn] | |
Add() | 新しい文書を作成する | [msdn][docs_add_msdn] | |
Document | - | Documents内の1つの文書 | [msdn][doc_msdn] |
Name | ファイル名のみ1 | [msdn][doc_name_msdn]2 | |
Activate() | 作業中の文書にする3 | [msdn][doc_activate_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)取得
#参考
- [オブジェクト モデル - 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 文書でテキストを検索、置換する][vbscript_word_search]
- [みんなのワードマクロ][macro]
[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
-
注釈の機械翻訳がひどいので、msdn_en-usのRemarksを見たほうがいいか ↩
-
msdnには、なぜかBookmark.Nameの例が書かれている。(タイトルはDocument.Nameなのに) ↩
-
スクリプトで作業中(Active)の概念が必要なときって何だろうか。(GUI操作ならわかるけど)
[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
[docs_count_msdn]:https://msdn.microsoft.com/ja-jp/vba/word-vba/articles/documents-count-property-word
[docs_open_mdsn]:https://msdn.microsoft.com/ja-jp/vba/word-vba/articles/documents-open-method-word
[doc_close_mdsn]:https://msdn.microsoft.com/ja-jp/VBA/Word-VBA/articles/document-close-method-word
[doc_fullname_msdn]:https://msdn.microsoft.com/ja-jp/VBA/Word-VBA/articles/document-fullname-property-word
[doc_name_msdn]:https://msdn.microsoft.com/ja-jp/VBA/Word-VBA/articles/document-name-property-word
[doc_activate_msdn]:https://msdn.microsoft.com/ja-jp/VBA/Word-VBA/articles/document-activate-method-word
[doc_path_msdn_ja-jp]:https://msdn.microsoft.com/ja-jp/VBA/Word-VBA/articles/document-path-property-word
[doc_path_msdn_en-us]:https://msdn.microsoft.com/en-us/VBA/Word-VBA/articles/document-path-property-word
[docs_add_msdn]:https://msdn.microsoft.com/ja-jp/vba/word-vba/articles/documents-add-method-word
[app_activedoc_msdn]:https://msdn.microsoft.com/ja-jp/vba/word-vba/articles/application-activedocument-property-word
[doc_saveas2_mdsn]:https://msdn.microsoft.com/ja-jp/VBA/Word-VBA/articles/document-saveas2-method-word
[doc_activate_msdn]:https://msdn.microsoft.com/ja-jp/VBA/Word-VBA/articles/document-activate-method-word ↩