13
21

More than 3 years have passed since last update.

Python で excel・wordの読み書き

Last updated at Posted at 2020-03-20

はじめに

コピペが面倒だったので、Python で excel・wordの読み書き行いました。
しばらくしたら忘れそう&とにかく動かしたい時のために、書き置きしておきます。
動作確認は、2020年3月20日に行っています。

環境

  • OS : Windows10
  • Python : 3.7.6
  • openpyxl : 3.0.3
  • python-docx :0.8.10

扱うのがExcel・Wordファイルなので、Windows上のPythonで実行しています。
実行はすべてコマンドプロンプトから行っています。

Excelファイルの操作で必要なモジュールのインストール

Excelの操作にopenpyxl モジュールを使用しています。

>pip install openpyxl

参考:openpyxl - A Python library to read/write Excel 2010 xlsx/xlsm files

Wordファイルの操作で必要なモジュールのインストール

Word操作にpython-docx モジュールを使用しています。

>pip install python-docx

参考:python-docx 0.8.10 documentation

Excelファイルへ書き込む

九九の表をExcelファイル(kuku.xlsx)に書き込みます。
Excelファイルは存在しなければ新規作成、存在すれば上書きします。

excelwrite.py
#!/usr/bin/env python

from openpyxl import Workbook

# ファイル名
excel_write_file_name = "kuku.xlsx"

# シート名
sheet_name = "kuku"

# ワークブックオブジェクトの作成
# <class 'openpyxl.workbook.workbook.Workbook'>
wb = Workbook()

# ワークシートオブジェクトの作成
# <class 'openpyxl.worksheet.worksheet.Worksheet'>
sheet = wb.active

# シート名変更
sheet.title = sheet_name

# シート選択
ws = wb[sheet_name]

# 九九をワークシートオブジェクトに書き込み
for i in range(1, 10):
  for j in range(1, 10):
    sheet.cell(row=i, column=j, value=i * j)

# excel ファイルに書き込み
wb.save(excel_write_file_name)

実行します。

>excelwrite.py

実行結果として、「kuku.xlsx」ファイルが作成されています。
画面出力はありません。

実行時にExcelファイルを開いていると、書き込みに失敗してエラーになります。

Excelファイルから読み込む

Excelファイル(kuku.xlsx)から九九の表を読み込み、表示します。

excelread.py
#!/usr/bin/env python

from openpyxl import load_workbook

# ファイル名
excel_read_file_name = "kuku.xlsx"

# ワークブックオブジェクトの作成
# <class 'openpyxl.workbook.workbook.Workbook'>
wb = load_workbook(excel_read_file_name)

# シート名の一覧を取得
sheetname = wb.sheetnames

# 1つ目のシートを指定して、ワークシートオブジェクトを作成
# <class 'openpyxl.worksheet.worksheet.Worksheet'>
sheet = wb[sheetname[0]]

# 最大行数の取得
max_row = sheet.max_row

# 最大列数の取得
max_col = sheet.max_column

# 取得データの表示
for i in range(1, max_row + 1):
  for j in range(1, max_col + 1):
    cell = sheet.cell(column=j, row=i).value
    print(str(cell).rjust(2, " ") + " ", end="")
  print("")

実行します。

> excelread.py

実行結果です。
うまく読めると下記のように表が表示されさます。

 1  2  3  4  5  6  7  8  9
 2  4  6  8 10 12 14 16 18
 3  6  9 12 15 18 21 24 27
 4  8 12 16 20 24 28 32 36
 5 10 15 20 25 30 35 40 45
 6 12 18 24 30 36 42 48 54
 7 14 21 28 35 42 49 56 63
 8 16 24 32 40 48 56 64 72
 9 18 27 36 45 54 63 72 81

Wordファイルへ書き込む

Wordファイル(word.docx)へテキストを書き込みます。
Wordファイルは存在しなければ新規作成、存在すれば上書きします。

wordwrite.py
#!/usr/bin/env python

from docx import Document

# ファイル名
word_write_file_name = "word.docx"

# ドキュメントオブジェクト作成
# <class 'docx.document.Document'>
document = Document()

# テキスト書き込み
document.add_paragraph("Hello Word 1 page.")
document.paragraphs[0].add_run("add text")

# 改ページ追加
document.add_page_break()

# テキスト書き込み
document.add_paragraph("Hello Word 2 page.")
document.add_paragraph("Hello Word 3 page?")

# word ファイルに書き込み
document.save(word_write_file_name)

実行します。

>wordwrite.py

実行結果として、「wordwrite.py」ファイルが作成されています。
画面出力はありません。

Wordファイルを開いていると、書き込みに失敗してエラーになります。

Wordファイルから読み込む

Wordファイル(word.docx)からテキストを読み込み、表示します。

worderad.py
#!/usr/bin/env python

from docx import Document

# ファイル名
word_read_file_name = "word.docx"

# ドキュメントオブジェクト作成
# <class 'docx.document.Document'>
document = Document(word_read_file_name)

# データの表示
for i in document.paragraphs:
  print(i.text)

実行します。

>worderad.py

実行結果です。
うまく読めると下記のように表が表示されさます。

Hello Word 1 page.add text


Hello Word 2 page.
Hello Word 3 page?

最後に

Excelの作成時は、手作業でちまちまコピペしていましたが、これで一気に自動化が出来ました。
時間が経って、必要になったときにまた調べることになりそうなので、メモ代わりに書きました。

今回、Windowsで実行していて気が付きました。
シバンが#!/usr/bin/env pythonなのに、Windowsで動くんですね。
.py 拡張子でpythonが起動して、シバンはコメント扱いなのでしょうね。

13
21
1

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