はじめに
コピペが面倒だったので、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ファイルは存在しなければ新規作成、存在すれば上書きします。
#!/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)から九九の表を読み込み、表示します。
#!/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ファイルは存在しなければ新規作成、存在すれば上書きします。
#!/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)からテキストを読み込み、表示します。
#!/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が起動して、シバンはコメント扱いなのでしょうね。