【Python】OpenPyXLをつかったExcel操作の基礎

Python

PythonをつかってExcelファイルを操作するための基本的な方法をご紹介します。

こちらでご紹介する外部ライブラリの「OpenPyXL」をうまく使えるようになれば、PythonからExcelファイルを扱うことができるようになります。
Web操作の自動化などと「OpenPyXL」を組み合わせて使用することによって、取得情報を直接Excelファイルに反映させるなど、より高度な操作を実現することができます。

いつも手作業でExcel操作をされている場合は、今回ご紹介する自動化の方法を活用できるかもしれませんので、まずはご一読ください。

スポンサーリンク

OpenPyXLとは

「OpenPyXL」とは、PythonをつかってExcel操作するためのサードパーティライブラリです。

具体的なExcelの操作内容としては、ワークブックの作成・読込、ワークシートの取得・作成、セルの取得・書込などの一般的なものから、印刷設定やグラフ作成などの少し特殊なものまであります。

すでにPythonを学ばれている場合、PythonをつかったExcel操作の自動化と言えば「Pandas」をイメージされるかもしれません。
「OpenPyXL」と「Pandas」の概要はこちらのとおりですので、それぞれを目的に応じて使い分けをしましょう。

項目OpenPyXLPandas
操作対象Excelファイルを対象Excelではない別の表形式データ(データフレームなど)を対象
演算機能演算機能なし
(四則演算などを使いたい場合は、セルの値に数式を直接的に文字列として入力する必要があります。)
四則演算や合計値・平均値などの複雑な計算が可能
書式設定可能(Excelファイルを操作対象としているため)不可(操作対象がExcelファイルではないため)

複雑な計算の必要がないカンタンなExcel操作であれば「OpenPyXL」を使いましょう。

「Pandas」については「【Python】初心者もこれで安心!Pandasの基本操作をまとめてご紹介」にて解説していますので、もしご存じでなれば一度チェックしてみてください。

プログラムをつかってExcelの操作をおこなう場合、Excelで使われている「名称」を理解する必要があります。 ふだん何気なく操作されているモノにもしっかりと名前が付いていますので、あまり聞き覚えがないのであればこれを機にチェックしておきましょう。

「OpenPyXL」で操作対象を指定する場合は、明示的にこれらの「名称」を指定する必要があります。

名称内容
ワークブックExcelファイルのこと
ワークシートExcelファイルの下に表示されているシートのこと
(ワークシートはひとつのワークブックに複数作成することができます。)
セルワークシートにあるひとつひとつのマス目のこと

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」という名前のファイルを使用します。

「OpenPyXL」で使用できるExcelファイルには制限がありますのでご注意ください。
「OpenPyXL」で扱うことのできるExcelファイルの拡張子は、「xlsx」と「xlsm」です。Excel2003以前のファイル形式である「xls」は扱うことができません。

ワークブックの読取

以下のとおり、読込対象とするワークブック名を指定します。
変数「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」の文字色が変更されていることが確認できます。

上記のサンプルコードで「FF0000」と記述されている箇所を変更することによって文字色を指定することができます。 設定可能な文字色は「原色大辞典」などのカラーコードが確認できるサイトをご覧ください。

セルの塗りつぶし

セルの背景色を変更することができます。
任意の色でセルを塗りつぶすことができるほか、塗りつぶしパターンの種類を指定することもできます。

具体的な設定方法はつぎの通りです。

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」の背景色が変更されたことが確認できます。

背景色の設定では「文字色の変更」とおなじカラーコードを使用します。

塗りつぶしのパターンで選択できる種類は以下のとおりです。
全部で18種類あります。

  • darkDown
  • darkGray
  • darkGrid
  • darkHorizontal
  • darkTrellis
  • darkUp
  • darkVertical
  • gray0625
  • gray125
  • lightDown
  • lightGray
  • lightGrid
  • lightHorizontal
  • lightTrellis
  • lightUp
  • lightVertical
  • mediumGray
  • solid

具体的には以下のようなかたちで表示されます。
A列に塗りつぶしパターン、B列にパターンごとの塗りつぶしを表示させています(カラーコードは「000000」の黒色です。)

ちなみに、上記の表示サンプルはこちらのコードで作成しています。
参考までにご覧ください。

import openpyxl
from openpyxl.styles import PatternFill

wb = openpyxl.load_workbook("color_pattern.xlsx")
ws = wb["Sheet2"]

for i in range(18):
    cell_pattern = ws.cell(i+1, 1).value
    ws.cell(i+1, 2).fill = PatternFill(patternType=cell_pattern, fgColor="000000")  

wb.save("color_pattern.xlsx")

セルの罫線

セルの罫線を設定することができます。
様々な種類の罫線を選択することや、セルに対しての罫線の設定位置も指定することができます。

具体的には以下のような方法で設定をします。

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」に罫線が設定されていることが確認できます。

Excelで設定できるように「OpenPyXL」でもいろいろな罫線のスタイルを指定することができます。

上記のサンプルでは「thick」を指定していますが、下表のとおり設定できる数は全部で12種類あります。

引数内容
dashDot一点鎖線
dashDotDot二点鎖線
dashed破線
dotted点線
double二重線
hair実線(極細)
medium実線(中)
mediumDashDot中一点鎖線
mediumDashDotDot中太二点鎖線
slantDashDot斜め斜線
thick実線(太)
thin実線(細)

具体的には以下のような表示がされます。
A列に罫線のスタイル、B列にスタイルごとの罫線を表示させています(カラーコードは「000000」の黒色です。)

罫線を引く場所を指定することができます。

ちなみに上記のサンプルでは、セルの四方(上下左右)と右肩上がりの斜線を設定しています。

引数内容
left罫線:左側
right罫線:右側
top罫線:上側
bottom罫線:下側
diagonal罫線:斜線(「diagonalDown」もしくは「diagonalUp」と同時使用)
diagonalDown罫線:「True」で右肩下がりの設定(「diagonal」と同時使用)
diagonalUp罫線:「True」で右肩上がりの設定(「diagonal」と同時使用)

条件付の書式設定

「繰返処理」や「条件分岐」と組み合わせてを設定することによって、より柔軟な使い方ができます。

こちらでは列単位で条件に合致するセル色を変更する方法をご紹介します。
例えばこのような記述をすることによって、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操作で自動化できる内容が多くありますので、詳細にご興味がありましたら一度「公式ドキュメント」をご覧ください。

タイトルとURLをコピーしました