LoginSignup
5
4

More than 5 years have passed since last update.

Python(pywin32)でWordを操作する[3] - 新規ドキュメント作成

Last updated at Posted at 2018-05-19

概要

新規ドキュメントを作成します。
次回は文字を書き込みます。

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

word_obj.png

前回までに紹介したメソッド/プロパティは省略。

オブジェクト名 プロパティ/メソッド 説明 リンク
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にアクセスできることを示しています。

activedoc.png

コード

以降はコード(というか、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)、・・・と丸括弧でアクセスします。以下に注意が必要です

新しい文書を作成する

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

参考


  1. 注釈の機械翻訳がひどいので、msdn_en-usのRemarksを見たほうがいいか 

  2. msdnには、なぜかBookmark.Nameの例が書かれている。(タイトルはDocument.Nameなのに) 

  3. スクリプトで作業中(Active)の概念が必要なときって何だろうか。(GUI操作ならわかるけど) 

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