Pythonでエクセルを自動化できるってご存知でしたか?「めんどくさいことはPythonにやらせよう」を読んで以来、Excelの自動化にすっかりハマってしまったので、情報共有させていただきます。
OpenPyXLの導入
Pythonでエクセルを操作するためには、OpenPyXLを導入します。
pip install openpyxl
でモジュールをインストールします。
Pythonの環境が整っていない方はこちらの記事が参考になるかもしれません。
基本操作
ここでは、必ず使う機能を紹介していきます。
シートを作成する
新しくExcelシートを作る場合は、次のように記述します。
from openpyxl import Workbook #Workbookモジュールをインポート
wb = Workbook() #エクセルファイルを作成してwbに格納
ws = wb.active #エクセルシートを作成してwsに格納
ws.title = "First Sheet" #シートの名前をFirst Sheetと設定
これでシートを作成できます。wb.activeでシートを作成すると、一番初めのシートとして作成されます。
他にも次のような作成方法があります。
ws1 = wb.create_sheet("Yoursheet",0) #初めのシートとしてYoursheetというシートを作成
ws2 = eb.create_sheet("Mysheet") #最後のシートしてMysheetというシートを作成
wb.create_sheet()メソッドを用いれば、好きな名前のシートを好きな場所に作成することができます。第二引数を指定しなければ、最後のシートになります。
セルの値を設定
セルの値を設定する方法は、たくさんありますが最も簡単な方法をまず紹介します。
ws['A1'] = 1 #A1のセルに1を設定
Excelでは横方向にアルファベット、縦方向に数値が割り当てられているので、’A1’とすれば、左上の初めのセルが取得できるのですね。
また、「何行何列目」というふうに数字だけで指定することもできます。
ws.cell(row=1, column=1, value=1) #A1のセルに1を設定
また、複数のセルの値を設定する方法もあります。
many = ws['A1':'B100'] #'A1'から'B100'までの200個のセルを取得
上のコードでは空のセルを定義しただけです。複数のセルを同時に扱うには、ちょっとしたテクニックが必要になります。例えば、次のコードをみてみてください。
many = ws['A1':'B100'] #セルを定義
num = 1
for row in many: #まず複数のセルを含んだ列がrowに格納
for cell in row: #rowから一つ一つのセルを取り出す
cell.value = num #1から順番にセルに値を格納する
num += 1
上のコードによってExcel上では次のようになっています。
セルの値を取得
先ほどはセルの値を設定しました。セルの値を取得するためにはどのようにすれば良いのでしょうか?
ws.cell(row=1, column=1, value=1) #A1のセルに1を設定
ws['A1'].value #1
上述のように、セルのオブジェクトに対して.valueで値にアクセスできます。
Excelファイルを保存する
次のようにコードを書けば、ファイルを名前をつけて保存することができます。
保存される場所は、Pythonファイルと同じ階層のフォルダのなか(カレントディレクトリ)です。
wb.save('my_first_try.xlsx') #Excelワークブックを「my_first_try」として保存
Excelファイルを読み込む
ここまでは、新規でExcelを作り操作する方法を紹介しましたが、既存のExcelファイルを取得することも当然できます。
wb1 = load_workbook('test.xlsx') #カレントディレクトリから「test.xlsx」を読み込む
サンプルコード
ここまでエクセル操作の基本操作を紹介しました。ここで、具体的なサンプルコードを作ってみます。
from openpyxl import Workbook #必要なモジュールをインポート
wb = Workbook() #変数wbにExcelのワークブックを作成
ws = wb.active #変数wsにシートを作成
ws.title = 'test' #シートの名前を'test'とする
number = ws['A1':'A10'] #A1からA10までのセルを定義
#1~10までの数字を格セルに格納↓
num = 1
for row in number:
for cell in row:
cell.value = num
num += 1
deta = ws['B1':'B10'] #B1~B10までのセルを定義
#1~10の2乗の値をそれぞれ格セルに格納↓
num = 1
for row in deta:
for cell in row:
cell.value = num**2
num += 1
wb.save('test.xlsx') #test.xlsxとしてExcelファイルを保存
この簡単なファイルを実行すると、次のようなエクセルファイルが作成されます。
いかがでしたでしょうか?非常に簡単にエクセルを操作できますね。
今回紹介したようなものでは、コードでエクセルを操作するよりも手入力で操作した方が早いです。
しかし、膨大なデータ量を扱うときなどは、Pythonで自動化した方が圧倒的に時間が短縮できる場合があります。
ぜひ活用してみてください。