こんにちは、タナカです。
この記事では、pythonでopenpyxlという外部ライブラリを使って、Excelのセル情報を取得し、自動的に操作する方法を紹介します。
pythonで何か自動化できるものはないかと考えたとき、一番最初に思い浮かんだのがExcelの自動操作です。
例えば、別々のシートの情報を一つのシートに集約したり、ある条件に一致する情報のみを抜き出したり、様々なことを実現できます。
Excelの自動化を実現するためには、openpyxlというライブラリの基本的なことを理解しておく必要があります。
まずは基礎として、1つのセルを対象に自動操作する方法を説明します。
- pythonでExcelを自動的に操作する方法がわかる
- openpyxlを使って1つのセル情報の取得・変更方法がわかる
1. pythonでExcelを操作するとは
Excelを自動的に操作するとは、人が介在することなく、あるセルの値を別のシートにコピペしたり、グラフを作成したりすることを言います。
pythonを使うことでExcelの複雑な処理を自動化することができます。
Excelを自動操作する方法としては、外部ライブラリと呼ばれるものを使用することが一般的です。その中でも有名な外部ライブラリとしては、openpyxlやxlwingsなどがあります。
今回はopenpyxlと呼ばれるライブラリを使用してExcelの自動操作を行いたいと思います。
参考にopenpyxlのリファレンスがこちらになります。
→https://openpyxl.readthedocs.io/en/stable/
openpyxlを使用するうえで1つ注意点があり、拡張子が「.xlsx」しか対応していないということです。「.xls」などの拡張子は扱えませんので、ご注意ください。
もし、「.xls」を操作する必要があるのであれば、xlwingsなどの別のライブラリを使うことになります。
2. openpyxlを使う
早速、openpyxlについて説明していきます。
2-1. oepnpyxlを使うための準備
前述したとおり、openpyxlは外部ライブラリになりますので、pythonをインストールした段階では入っておりません。
そのため、下記コードをコマンドプロンプトやターミナルなどに入力しopenpyxlをインストールする必要があります。
anacondaで仮想環境を作成している場合は、Anaconda Promptを起動し、仮想環境に入ってからコマンドを入力してください。
pip install openpyxl
openpyxlをインストールすることができたら実際にコードを書いていきます。
2-2. openpyxlでExcelファイルを読み込む
今回説明に使うExcelファイルの中身はこのようになっています。 3行B列のセルに「tanaka」と書かれており、このセルに対して操作を行っていきます。
まずは対象のExcelファイルを読み込んでいきます。
import openpyxl
# Excelファイルのパス
file_path = 'test.xlsx'
# Excelファイルの読み込み
wb = openpyxl.load_workbook(file_path)
# ワークシートの指定
ws = wb['Sheet1']
変数名はwb(workbook)やws(worksheet)などを使うことが多いです。Excelファイルを読み込んだ後は、対象となるワークシートを指定します。今回扱うシートの名前が「Sheet1」なのでwb[‘Sheet1’]としています。
2-3. openpyxlでセルを操作する
セルが持つ基本的な情報としては下記が挙げられるのではないでしょうか。もちろんほかにもたくさんありますが、今回は下記項目を対象として説明していきます。
- 値
- 文字の基礎情報(色、フォント、大きさなど)
- 文字の位置情報
- セルの背景色
2-3-1. 値の取得・変更
ソースコードは下記になります。対象となるセルをrow、columnで指定し、valueという情報を取得しています。 valueには「tanaka」という文字列の情報が入っていることがわかります。
# 3行B列(B列 = 2列目)の値を取得
value = ws.cell(row = 3, column = 2).value
print(value)
# >>tanaka
# 3行B列(B列 = 2列目)の値をsatoに置き換え
ws.cell(row = 3, column = 2).value = 'sato'
value = ws.cell(row = 3, column = 2).value
print(value)
# >> sato
# ワークブックの保存(保存しないと更新されません)
wb.save(file_path)
元々valueという情報には「tanaka」という文字列が入っていましたが、「sato」という文字列を代入することで書き換えることができます。
2-3-2. 文字の基礎情報の変更
対象となるセルはvalue以外にもfontという情報を持っています。下記コードで確認することができます。
font = ws.cell(row = 3, column = 2).font
print(font)
例えば、フォントの種類にMSPゴシックが使われていることがわかります。このfont情報を書き換えることで文字情報を変更することが可能です。 実際にfont情報を書き換えていきます。
# font情報を書き換えるためにFontをインポート
from openpyxl.styles import Font
# font情報書き換え
ws.cell(row = 3, column = 2).font = Font(name = '明朝体', color = 'FF0000', size = 20)
フォントの種類を明朝体、色を赤、サイズを20に変更しました。
2-3-3. 文字の位置情報の変更
次は、対象となるセルの位置情報を変更していきます。セルは、fontと同じようにalignmentという情報を持っています。下記コードで確認することができます。
alignment = ws.cell(row = 3, column = 2).alignment
print(alignment)
例えば、horizontal(水平の位置)はNoneとなっており、vertical(垂直の位置)はcenterになっています。このalignmentの情報を書き換えることで位置情報を変更することができます。
# alignment情報を書き換えるためにAlignmentをインポート
from openpyxl.styles import Alignment
# alignment情報書き換え
ws.cell(row = 3, column = 2).alignment = Alignment(horizontal = 'center', vertical = 'bottom')
水平位置をcenter、垂直位置をbottomに変更しました。
2-3-4. セルの背景色の変更
最後に対象となるセルの背景色を変更していきます。セルは、fontと同じようにfillという情報を持っています。下記コードで確認することができます。
fill = ws.cell(row = 3, column = 2).fill
print(fill)
fontやalignmentと同様にfillの情報を書き換えることで背景色の情報を変更することができます。
# fill情報を書き換えるためにPatternFIllをインポート
from openpyxl.styles import PatternFill
# fill情報書き換え
ws.cell(row = 3, column = 2).fill = PatternFill(patternType='solid', fgColor = 'FF0000', bgColor = 'FF0000')
背景色を赤色に変更しました。
1つのセルに対する自動操作は以上になります。基本的な書き方はどれも一緒でしたね。
まとめ
1つのセルに対して、openpyxlを使って自動的に操作する方法を説明しました。
セルは下記情報を保持しており、その情報をプログラム上で書き換える処理を書くことで自動操作が可能になります。
- 値
- 文字の基礎情報(色、フォント、大きさなど)
- 文字の位置情報
- セルの背景色
今回の基礎が理解できれば、他にもセルの罫線を書き換えたりと様々なことができるようになると思います。
最後に今回説明に使用したコードを示しておきます。
import openpyxl
from openpyxl.styles import Font # font情報を書き換えるためにFontをインポート
from openpyxl.styles import Alignment # alignment情報を書き換えるためにAlignmentをインポート
from openpyxl.styles import PatternFill # fill情報を書き換えるためにPatternFIllをインポート
# エクセルファイルのパス
file_path = r'test.xlsx'
# エクセルファイルの読み込み
wb = openpyxl.load_workbook(file_path)
# ワークシートの指定
ws = wb['Sheet1']
# 3行B列(B列 = 2列目)の値を取得
value = ws.cell(row = 3, column = 2).value
print(value)
# >>tanaka
# 3行B列(B列 = 2列目)の値をsatoに置き換え
ws.cell(row = 3, column = 2).value = 'sato'
value = ws.cell(row = 3, column = 2).value
print(value)
# >> sato
# font情報書き換え
ws.cell(row = 3, column = 2).font = Font(name = '明朝体', color = 'FF0000', size = 20)
# alignment情報書き換え
ws.cell(row = 3, column = 2).alignment = Alignment(horizontal = 'center', vertical = 'bottom')
# fill情報書き換え
ws.cell(row = 3, column = 2).fill = PatternFill(patternType='solid', fgColor = 'FF0000', bgColor = 'FF0000')
# ワークブックの保存
wb.save(file_path)
もっと体系的に勉強したい人は下記の本もおすすめです。僕もこの本を使って勉強していました。