PythonをつかってExcelファイルを操作するための基本的な方法をご紹介します。
こちらでご紹介する外部ライブラリの「OpenPyXL」をうまく使えるようになれば、PythonからExcelファイルを扱うことができるようになります。
Web操作の自動化などと「OpenPyXL」を組み合わせて使用することによって、取得情報を直接Excelファイルに反映させるなど、より高度な操作を実現することができます。
いつも手作業でExcel操作をされている場合は、今回ご紹介する自動化の方法を活用できるかもしれませんので、まずはご一読ください。
OpenPyXLとは
「OpenPyXL」とは、PythonをつかってExcel操作するためのサードパーティライブラリです。
具体的なExcelの操作内容としては、ワークブックの作成・読込、ワークシートの取得・作成、セルの取得・書込などの一般的なものから、印刷設定やグラフ作成などの少し特殊なものまであります。
すでにPythonを学ばれている場合、PythonをつかったExcel操作の自動化と言えば「Pandas」をイメージされるかもしれません。
「OpenPyXL」と「Pandas」の概要はこちらのとおりですので、それぞれを目的に応じて使い分けをしましょう。
項目 | OpenPyXL | Pandas |
操作対象 | Excelファイルを対象 | Excelではない別の表形式データ(データフレームなど)を対象 |
演算機能 | 演算機能なし (四則演算などを使いたい場合は、セルの値に数式を直接的に文字列として入力する必要があります。) | 四則演算や合計値・平均値などの複雑な計算が可能 |
書式設定 | 可能(Excelファイルを操作対象としているため) | 不可(操作対象がExcelファイルではないため) |
複雑な計算の必要がないカンタンなExcel操作であれば「OpenPyXL」を使いましょう。
OpenPyXLの基本操作
「OpenPyXL」の基本的な使い方を解説します。
事前準備
こちらでご紹介する内容は「外部ライブラリ」を使用しています。
以降、ご紹介する内容については以下とおり「OpenPyXL」がインポートされていることが前提となります。
import opnepyxl
ワークブックの新規作成
はじめにワークブックの新規作成からExcelファイルの保存までの基本的な「OpenPyXL」の使い方をご説明します。
ワークブックの作成
まずは「新しいExcelファイル」の作成方法をご紹介します。
こちらの記述でExcelファイルを変数「wb」に作成することができます。
wb = openpyxl.Workbook()
ただし、まだワークブックを「出力(名前を付けて保存)」していないため、Excelファイルとしてデスクトップなどから開くことはできない状態です。
セルへの値の書込
セルに値を書き込むにあたって、「ワークシート」を有効化する必要があります。
有効化の方法としては、対象の「ワークブック」を指定したうえで「active」メソッドを使用します。
具体的には以下のような使い方をします。
ws = wb.active
「ワークシート」を有効化したのちに、セルに値を書き込みます。
以下はセル「A1」、セル「A2」に値を書き込むための記述です。
ws["A1"] = "セルは「A1」です。" ws.cell(2, 1).value = "セルは「A2」です。"
ご覧のとおり、セルへの書き込み方法は2パターンあります。
「セル名」の指定
ひとつ目は「セル名」を指定する方法です。
「ws[“A1”] 」と記述することによって、セル「A1」を指定することができます。
「セル番地」の指定
ふたつ目は「セル番地」を指定する方法です。
「ws.cell(2, 1)」と記述することによって、「行番号:2」「列番号:1」を指定することができます。
行番号とは、上から順に数えて1行目は「1」、2行目は「2」といった具合に「何番目の行か」を表す番号のことです。
おなじ考え方で、列番号とは、左から順に数えて1列目は「1」、2列は「2」といった具合に「何番目の列か」を表す番号のことです。
この考え方に基づけば、「行番号:2」「列番号:1」はセル「A2」を表していることになります。
ただし、「セル番地」を指定する方法の場合、セル番地を指定したうえで「.value」を記述する必要がありますのでご注意ください。
ワークブックの保存
ワークブックを名前を付けて保存します。
この記述をすることによって、デスクトップなどからExcelファイルとしてファイルを開くことができる状態になります。
wb.save("test_excel.xlsx")
こちらが新規作成されたExcelファイルです。
ちなみにExcelファイルが保存される場所は、プログラムのソースファイルが保存されている場所と同じところです。
スポンサーリンク
既存ワークブックへの書込
Excelファイルの新規作成ではなく、あらかじめ作成されているExcelファイルを編集する方法をご紹介します。
こちらのExcelファイルをつかって操作方法を解説します。
ワークシートが2つあるワークブック「sample.xlsx」という名前のファイルを使用します。
ワークブックの読取
以下のとおり、読込対象とするワークブック名を指定します。
変数「wb」にExcelファイルが格納されます。
wb = openpyxl.load_workbook("sample.xlsx")
なお、こちらの例ではソースファイルとおなじディレクトリ(フォルダ)にExcelファイル「sample.xlsx」を保存している場合の記述方法です。
もし別のディレクトリに保存されているExcelファイルを読込対象とする場合は、ファイルパスを指定する必要があります。
例えば、読込対象のExcelファイルがCドライブのデスクトップに保存されている場合は「”C:\Users\<ユーザー名>\Desktop\sample.xlsx”」のように記述します。
セルへの値の書込
今回のサンプルファイルには「ワークシート」が2つありますので、操作対象となる「ワークシート」をシート名で指定します。
ws = wb["Sheet2"]
先ほどと同様の方法で、セル場所とセル値を指定します。
ws["A4"] = "A4" ws["B4"] = "B4"
ワークブックの保存
ワークブックを名前を付けて保存します。
wb.save("sample.xlsx")
読込対象とおなじ名前のExcelファイル名を指定することによって、上書き保存がされます。
(読込対象とは別の名前でExcelファイルを保存したい場合は、他のExcelファイル名と重複しないファイル名を記述する必要があります。)
こちらがファイルの内容です。
セル値が追加されていることが確認できます。
既存ワークブックからの読取|単一セル
Excelファイルに保存されているセルの値をPythonをつかって読み込む方法をご紹介します。
先ほどと同様、こちらのExcelファイルをつかって操作方法を解説します。
ワークシートが2つあるワークブック「sample.xlsx」という名前のファイルです。
ワークブックの読取
読込対象とするワークブック名を指定します。
こちらは既存のワークブックへの書込をおこなう際とおなじ記述方法です。
wb = openpyxl.load_workbook("sample.xlsx")
セルからの値の読取
まずは、シートが複数ある場合は、対象となるシートを指定します。
変数「wb」からシート名を指定して、変数「ws」に代入します。
ws = wb["Sheet2"]
変数「cell_a1」にセル「A1」の値を代入します。
まぎらわしいですが、「ws[“A1”]」と記述することによって、セルの位置「A1」を指定しています。
cell_a1 = ws["A1"]
読取値の確認
取得した値を確認します。
変数「cell_a1」に代入されている値を確認するために「value」メソッドを使用します。
cell_a1.value
出力結果はこちらです。
セル「A1」に入力されている情報を取得することができました。
'A1'
既存ワークブックからの読取|複数セル
セル情報の読取方法としては、「単一セル」だけではなく、「複数セル」を対象とすることもできます。
先ほどの例では、単一セル「A1」を指定して値を取得していますが、セル範囲を指定することによって複数セルの情報を取得することができます。
基本的な考え方は「単一セル」の読取とおなじですので、 ざっくりと内容をご紹介します。
先ほどとおなじExcelファイルを使用して解説します。
具体的にはこのような方法でセル範囲を指定します。
サンプルコードの4行目の部分で、記号「:(コロン)」をつかってワークシートの選択範囲を記述しています。
import openpyxl wb = openpyxl.load_workbook("sample.xlsx") ws = wb["Sheet2"] cells = ws["A1:B2"]
変数「cells」にはこのような情報が代入されています。
"((<Cell 'Sheet2'.A1>, <Cell 'Sheet2'.B1>),
(<Cell 'Sheet2'.A2>, <Cell 'Sheet2'.B2>))"
変数「cells」には複数の値が格納されていますので、その中から単一セルの値を取り出す場合はインデックス番号を指定する必要があります。
こちらは「1行目」かつ「2列目」を指定するための記述です。
インデックス番号と行列番号はズレがあることにご注意ください。
cells[0][1].value
こちらが出力結果です。
ワークシート「Sheet2」のセル「B1」に掲載されている情報が取得されていることが確認できます。
'B1'
OpenPyXLの応用操作
「OpenPyXL」をつかったExcelの「書式設定」の方法についてご紹介をします。
冒頭でご紹介しました「Pandas」との違いのなかで、「OpenPyXL」の強みのひとつとなりますのでチェックしてみてください。
書式設定
文字色、セル背景色の設定方法や、罫線の設定方法についてご紹介します。
文字色の変更
文字色を変更することができます。
フォントの文字色はカラーコードをつかって指定します。
具体的な設定はつぎの通りです。
import openpyxl from openpyxl.styles import Font wb = openpyxl.load_workbook("test_color.xlsx") ws = wb["Sheet1"] cell = ws["A1"] cell.font = Font(color="FF0000") wb.save("test_color.xlsx")
こちらが実行結果です。
セル「A1」の文字色が変更されていることが確認できます。
セルの塗りつぶし
セルの背景色を変更することができます。
任意の色でセルを塗りつぶすことができるほか、塗りつぶしパターンの種類を指定することもできます。
具体的な設定方法はつぎの通りです。
import openpyxl from openpyxl.styles import PatternFill wb = openpyxl.load_workbook("color_pattern.xlsx") ws = wb["Sheet1"] cell = ws["A1"] cell.fill = PatternFill(patternType="solid", fgColor="add8e6") wb.save("color_pattern.xlsx")
こちらが実行結果です。
セル「A1」の背景色が変更されたことが確認できます。
背景色の設定では「文字色の変更」とおなじカラーコードを使用します。
セルの罫線
セルの罫線を設定することができます。
様々な種類の罫線を選択することや、セルに対しての罫線の設定位置も指定することができます。
具体的には以下のような方法で設定をします。
import openpyxl from openpyxl.styles.borders import Border, Side wb = openpyxl.load_workbook("border_pattern.xlsx") ws = wb["Sheet2"] side = Side(style="thick", color="990000") ws.cell(2, 2).border = Border(top=side, left=side, right=side, bottom=side, diagonal=side, diagonal=True) wb.save("border_pattern.xlsx")
実行結果はこちらです。
セル「B2」に罫線が設定されていることが確認できます。
条件付の書式設定
「繰返処理」や「条件分岐」と組み合わせてを設定することによって、より柔軟な使い方ができます。
こちらでは列単位で条件に合致するセル色を変更する方法をご紹介します。
例えばこのような記述をすることによって、A列のセルが「3より上」の場合にセルの背景色を変えることができます。
import openpyxl from openpyxl.styles import PatternFill wb = openpyxl.load_workbook("sample\sample1.xlsx") ws = wb["Sheet1"] fill = PatternFill(patternType="solid", fgColor="e0ffff") for i in range(ws.max_row): if ws.cell(i+1, 1).value > 3: ws.cell(i+1, 1).fill = fill wb.save("sample\sample1.xlsx")
こちらが実行結果です。
「3より上」のセル値の背景色が変更されていることが確認できます。
まとめ
Pythonの外部ライブラリ「OpnePyXL」をつかったExcel操作の自動化の例をご紹介しました。
基本的なセル値の読取や書込などに加えて、文字色やセルの背景色などの書式設定の設定をすることができます。
こちらでご紹介した他にも「OpenPyXL」をつかってExcel操作で自動化できる内容が多くありますので、詳細にご興味がありましたら一度「公式ドキュメント」をご覧ください。