openpyxl基本のキ!PythonでExcelを操作しよう

2021年4月2日金曜日

Python

t f B! P L

「openpyxl」はPythonでExcelを操作するためのライブラリです。

この記事では「openpyxl」のインストールから、簡単な使い方を紹介します。

openpyxlのインストール

とりあえず「openpyxl」をインストールしましょう。

pipでインストール

pip install openpyxl

condaでインストール

conda install openpyxl

openpyxlをインポート

最初に次の1行を追加して「openpyxl」をインポートします。

import openpyxl

Excelワークブックの操作

openpyxlを使用するには、まず対象となるワークプックのオブジェクトを作成する必要があります。

ワークブックの新規作成

openpyxl.Workbook()関数で新規のワークプックを作成できます。戻り値には、作成したワークプックのオブジェクトが返ります。

workbook = openpyxl.Workbook()

openpyxl.Workbook()関数で新しくワークブックを作成すると、「Sheet」という名前で新しいワークシートが同時に作成されます。

Excelファイルのオープン

パスを指定してExcelファイルを開き、そのワークプックのオブジェクトを取得します。

workbook = openpyxl.load_workbook("MyBook.xlsx")

ファイルの保存

save関数で明示的に保存しないと、編集した内容が破棄されます。

workbook.save("path/to/filename")

Excelワークシートの操作

シートの追加・削除をしたり、値を書き込むセルへのシート参照を取得します。

ワークシートの作成

ワークブックの末尾にシートを追加します。

worksheet = workbook.create_sheet(title="シート名")

ワークシートを途中のシートに挿入する場合は、create_sheet関数の引数indexに、挿入するシートの位置を指定します。次のサンプルコードでは、3番目のシートの前に新しいシートを挿入してします。

worksheet = workbook.create_sheet(title="シート名", index=2)

※ シートのインデックスは0始まりであることに注意しましょう

ワークシートの取得

シート名を指定してワークシートへの参照を取得します。

worksheet = workbook("Sheet1")

インデックス指定でワークシートの参照を得ることも可能です。
シートのインデックスは0から始まる点には注意が必要です。

worksheet = workbook.worksheets[0]

シート数の取得

sheet_count = len(workbook.worksheets)

シート名の取得

例えば1シート目の、シート名を取得する場合は次のように書く。

sheet_name = workbook.worksheets[0].title

セルの取得

openpyxlでは、"A1"などのセルアドレス指定や、行/列番号を指定する方法でセルの参照を得ることができます。

アドレス指定でセルを取得

「A1」などのセルアドレス指定で、セルの参照を取得します。

# A1セルの参照を取得
cell = worksheet("A1")

範囲指定で複数セル取得

「A1:C3」のようなセル範囲を指定するアドレスで、複数セルへの参照を得ることも可能です。

範囲指定した時の戻り値は、単一セルを指定した場合とは異なり、二次元で構成されたtupleが返ります。
このtupleの1次元目には、行のリストが入り、2次元目には列(行に含まれるセル)が格納されます。

言葉だけでは、どのようなtupleが返ってくるのかイメージが難しいと思うため、実際にサンプルコードを組んで結果を見てみましょう。

# A1〜C3セルの参照を取得
rows = worksheet['A1:C3']  #rowsには行のリストがtupleで返る

for row in rows: 
  # 変数rowには行に含まれるセルのリストが入る
  for cell in row:
    print(cell.coordinate, end=',') #セルのアドレスを確認

上のコードを実行すると、次のような結果になります。

実行結果
-----------------------------------
A1,B1,C1,A2,B2,C2,A3,B3,C3

行/列番号指定でセルを取得

行と列番号を指定てセルへの参照を得ることも可能です。
行や列番号は1から始まる数値で指定する必要があるので注意が必要です。

cell = worksheet.cell(1, 1)

列へのアクセス

列を指定して、その列に含まれるセルへの参照を得ることもできます。

col = worksheet['A']

for cell in col:
  print(cell.coordinate, end=',')

「A:C」のように、複数の列を指定することもできます。

# A〜C列の参照を取得
col_range = worksheet['A:C'] 

for col in col_range: 
  for cell in col:
    print(cell.coordinate, end=',') #セルのアドレスを確認

セルの値を読み書き

前の章で取得したセル参照のvalueプロパティより、セルの値を読み書きできます。

# セルの値を取得
val1 = worksheet("A1").value

# セル値を書き込み
worksheet("A1").value = "Sample Value"

セルの範囲に値して値をめとめて設定できる?

範囲指定した時、worksheet["A1:C3"].value = "value"のようにして、まとめて値を設定したいところですが、残念ながらそれはできません。

forなどの繰り返し構文を使って、セルの範囲に対して1つずつ値を取得または設定します。

for row in worksheet["A1:C3"]: 
  for cell in row:
    cell.value = "Sample Value"
スポンサーリンク

QooQ