【Python】openpyxlでExcelを操作する ① -ファイル読み込み~保存

Excel作業は自動化できればできるだけいい

と、巷ではExcel自動化が結構前から流行ってきています。面倒なExcel作業をプログラムに任せてしまえば、作業効率はうなぎ上りです。特に、日々行うような業務を自動化できた時のインパクトは大きいです。

Excelの自動化する手段はいくつかありますが、Pythonもその1つです。Pythonを使えば、Excel操作はもちろん、他のアプリケーションやAPIとExcelを組み合わせて自動化することもできます。

今回から数回にわたっては、PythonでExcelを扱うための基礎的な部分を紹介できればと思います。本記事ではopenpyxlを基本としていきます。

openpyxlのインストール

事前準備としてopenpyxlをインストールします。pip、Anacondaの両方から取得可能です。

pipの場合

pip install openpyxl

Anacondaの場合

conda install openpyxl

ファイル読込

openpyxlを使ってPythonにExcelファイルを読み込んでみましょう。もともと存在するファイルを読み込むこともできれば、Python内で新規ブックを作成することもできます。

既存ファイルを読み込む場合

既存ファイルを読み込む場合は、openpyxl.load_workbook()を用います。引数にはファイルのパスを指定します。

openpyxl.load_workbook(ファイルのパス)

例えば以下の例では、スクリプトと同階層のSample.xlsxを読み込んでいます。

import openpyxl

filePath = "Sample.xlsx"

#既存のExcelファイルを読み込む
wb = openpyxl.load_workbook(filePath)

このとき、wbはworkbook.workbook.workbook 型のオブジェクトとなります。wbでは読み込んだファイルの情報だけでなく、Excelブック操作のための様々なメソッドも保持します。

wbはworkbook.workbook.workbook型のオブジェクトとなる
wbでは様々な関数も保持する

新規ブックを作成する場合

読み込みたい既存ファイルがない場合は、コード内で新規作成することも可能です。

この場合にはopenpyxl.Workbook()を用います。

openpyxl.Workbook()

import openpyxl

#Excelファイルを新規作成する
wb = openpyxl.Workbook()

ファイルと読み込んだときと同様に workbook.workbook.workbook 型のオブジェクトとなりますが、空のファイル情報を保持しています。

ファイルの中身を探る

プログラムにExcelファイルを読み込んだところで、ファイルの中身を探索してみましょう。プログラムを作る以上、特定のシートの特定セルを書き換え・削除といった処理は当然必要になってきます。

なので、シート指定やセルを指定して値を取り出すといったことは全員必修といえると思います。

Sample.xlsxは以下のような構成になっているので、これを使っていこうと思います。

シート1
シート1
シート2
シート2

シート指定

まずは操作するシートを指定します。以下の例では、シート1を指定して変数wsに格納します。

ws = wb["シート1"]

wsはworksheet.worksheet.worksheet型のオブジェクトとなり、シート情報とシート操作に必要なメソッドを保持します。

wsはworksheet.worksheet.worksheet型のオブジェクトとなる
wsでは様々な関数も保持する

セル指定

続いて選択したシートから指定したセルの値を取り出します。

特定のセルを取り出す場合

ある1つのセルを取り出したい場合は、以下のように指定します。以下では、シート1のA1セルを取り出します。

c1 = ws["A1"]

c1はcell.cell.cellオブジェクトとなります。

ここから値を取り出したいときは、c1.valueを使います。

print(c1.value)

>> A 

複数のセルの値をまとめて取り出す場合

複数のセルの値を取得したい場合はスライシングで指定します。中身はfor文で取得します。

以下の例では、B2~D4までの範囲のセルを取得し、順に出力しています。大きなfor文で行を取得、print文の中でその行のセル1つ1つを取得しています。

for row in ws["B2:D4"]:
    print([cell.value for cell in row])

>> [2, 'ネコ', None]
   [3, 'サル', None]
   [4, 'キジ', None]

ファイル書き出し

新規ファイルとして保存

ファイルの書き出しにはwb.save()を使います。新規のExcelファイルとして保存したい場合は、指定のフォルダに存在しないファイル名を指定します。

wb.save(”新規ファイル名”)

#新規ファイルとして保存(別名で保存)
wb.save("Sample2.xlsx")

上書き保存

読み込んだファイルに上書き保存したい場合には、読み込んだファイルのパスをそのまま指定して出力すればOKです。

wb.save(”読み込んだファイル名”)

#上書き保存(読み込んだファイルと同名で保存)
wb.save(filePath)

まとめ

openpyxlを使ってPythonでExcelを操作する(ファイル読込~出力)方法を紹介しました。実際の処理では読み込んだファイルの中身に追記したり上書きしたりといった処理をします。

今回もシートやセルの操作について触れましたが、次回以降もう少し踏み込んだ操作を見ていきたいと思います。

ではでは👋