「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"
0 件のコメント:
コメントを投稿