【Python】でExcel(エクセル)を操作してみた

openpyxl

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上では次のようになっています。

openpyxlでセルを設定
実際のエクセル上ではこのようになっています

セルの値を取得

先ほどはセルの値を設定しました。セルの値を取得するためにはどのようにすれば良いのでしょうか?

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ファイルを保存

この簡単なファイルを実行すると、次のようなエクセルファイルが作成されます。

openpyxlでExcelファイルを作る
kこ

いかがでしたでしょうか?非常に簡単にエクセルを操作できますね。

今回紹介したようなものでは、コードでエクセルを操作するよりも手入力で操作した方が早いです。
しかし、膨大なデータ量を扱うときなどは、Pythonで自動化した方が圧倒的に時間が短縮できる場合があります。

ぜひ活用してみてください。