Categories: Python

【Python】Wordの文書の新規作成と読み書き

この記事では、Pythonを使ってWordの文書を新規作成する方法と作成した文書の内容を読み込んだり、書き換え・追記する方法を解説します。

準備:インストールとインポート

PythonでWordを扱うには「python-docx」が便利です。pipでインストールできるので以下のコマンドをコマンドラインで実行してください。

pip install python-docx

インストールしたpython-docxはdocxという名前でインポートすることができます。

import docx

Wordの文書を新規作成

Wordの新規文書は以下のようなコードで作成することができます。

import docx

# 白紙の新規文書作成
doc = docx.Document()

# カレントディレクトリに「test.docx」を保存
doc.save('test.docx')

上記コードを実行することでカレントディレクトリに「test.docx」という名前の新規文書を作成することができます。

ポイント
  • save()の引数には絶対パスや相対パスを指定することができる
  • 拡張子(.docx)は必ず付ける必要がある
  • 同じ名前のドキュメントが存在する場合は上書きする

文書を開く

docx.Document()の引数にパスやストリームを指定することでファイルを開くことができます。

import docx

# 先ほど作成した「test.docx」を開く
doc = docx.Document('test.docx')
例外
  • Wordで開いていたりするとPermissionErrorが送出される
  • 存在しない文書を開こうとしたらdocx.opc.exceptions.PackageNotFoundErrorが送出される

書きこむ

見出し

add_heading()を使うことで末尾に段落を追加し、そこに見出しを書き込むことができます。

Document.add_heading(text='', level=1)

level引数は 0~9 まで指定することができ、0は表題(タイトル)、1は見出し1として書き込むことができます。

import docx

doc_path = 'test.docx'

# 新規文書の作成
doc = docx.Document()

# 見出しの追加
doc.add_heading('表題', 0)
doc.add_heading('見出し1', 1)
doc.add_heading('見出し2', 2)
doc.add_heading('見出し3', 3)
doc.add_heading('見出し4', 4)
doc.add_heading('見出し5', 5)
doc.add_heading('見出し6', 6)
doc.add_heading('見出し7', 7)
doc.add_heading('見出し8', 8)
doc.add_heading('見出し9', 9)

# 保存
doc.save(doc_path)

上記コードを実行すると以下のような文書が作成されます。

文章

add_paragraph()を使うことで末尾に段落を追加し、そこに文章を書き込むことができます。

Document.add_paragraph(text: str = '', style=None)

style引数を指定することで文字のスタイルを変更することができます。また、テキストにはタブ文字や改行などのエスケープシーケンスを使用することができます。

import docx

doc_path = 'test.docx'

# 新規文書の作成
doc = docx.Document()

# 文章の追加
doc.add_paragraph('吾輩は猫である')           # 通常
doc.add_paragraph('吾輩は\n猫\tである')       # エスケープシーケンス
doc.add_paragraph('吾輩は猫である', 'Quote')  # スタイル変更: 引用文

# 保存
doc.save(doc_path)

上記コードを実行すると以下のような文書が作成されます。

使用可能なスタイルは以下のリンクを確認してください。

外部リンクParagraph styles in default template - Understanding Styles — python-docx 1.0.1 documentation

書式の設定

書式はadd_paragraph()で指定できないのでadd_run()で文を追加しつつ、設定していきます。

import docx

doc_path = 'test.docx'

# 新規文書の作成
doc = docx.Document()

# 段落のみの追加
p = doc.add_paragraph()

# 段落に文章を追加する
wagahai = p.add_run('吾輩')
p.add_run('は')
neko = p.add_run('猫')
p.add_run('である')

# 太字と斜体
wagahai.bold = True
neko.italic = True

# 保存
doc.save(doc_path)

上記コードを実行すると以下のような文書が作成されます。

追記

開いた文書からadd_paragraph()などを呼び出すことで末尾に追記することが可能です。

import docx

doc_path = 'test.docx'

# 先ほどの文書を開く
doc = docx.Document(doc_path)

# 追記部分
doc.add_heading('追記', 1)
doc.add_paragraph('名前はまだ無い。')

# 保存
doc.save(doc_path)

以下のように追記することができました。

読み込む

文書の内容を読み込むには文書をdocx.Document()で開き、paragraphs属性からすべての段落(paragraphオブジェクト)を取得します。そしたら、各段落からtext属性を呼び出すだけで内容を文字列として取得できます。

import docx

doc_path = 'test.docx'

# 文書を開く
doc = docx.Document(doc_path)

# 段落の取得(文書順のリスト)
paragraphs = doc.paragraphs

# 各段落からテキストを出力
for paragraph in paragraphs:
    print(paragraph.text)

実行結果

吾輩は猫である
追記
名前はまだ無い。

まとめ

この記事ではPythonを使ってWordの文書を操作する方法を解説しました。

文書を新規作成できたり、書き込みや追記、読み込みができたりとpython-docxを使うことでWord関係の処理は至れり尽くせりでしたね。

それでは今回の内容はここまでです。ではまたどこかで〜( ・∀・)ノ

ゆうまる

独学でプログラミングを勉強しているおじさん。いろんな言語を勉強したが浅く広くなためあまり仕事につながらない。また忘れっぽいため自分のブログを備忘録としても使っている。産まれてこのかたずっとネコを飼ってる生粋のネコ派。最近お腹が出てきて筋トレに奮闘中!

Recent Posts

【Dart】コンストラクタのデフォルト引数について

Dartのコンストラクタのデフォルト引数…

2週間 ago

【Unity】有料アセットを無料で手に入れる方法

この記事では、Unityの有料アセットを…

4か月 ago

【Python】任意の秒数だけ処理を一時停止する方法【sleep()関数】

この記事では、Pythonで任意の秒数だ…

1年 ago

【Python】メタクラスって結局なんなの?

この記事では、Pythonのメタクラスに…

1年 ago

【Unity】割合から数値に数値から割合に変換する

この記事では、割合から数値に変換する関数…

1年 ago