こんにちは!
Excelを自動で操作してみたい!
手作業の仕事を効率化してみたい!
と考えている方は多いと思います。そんな時に役立つのがopenpyxlというライブラリです。
この記事ではpythonのopenpyxlを使ってセルの値を取得する方法について解説します。
openpyxlについて・基本操作
openpyxlは、pythonでxlsx形式のエクセルファイルを操作するために使うライブラリです。
データ分析などにpythonを使用するときによく利用されるライブラリです。
- エクセルファイルの読み込み
- エクセルファイルの編集
- エクセルファイルの保存
openpyxlのインストール
openpyxlは外部ライブラリであるため、pythonには標準でインストールされていません。
そのためopenpyxlを利用するためにはインストールする必要があります。
以下の手順でインストールしましょう。
pip install openpyxl
ターミナルで上記コマンドを実行するとopenpyxlをインストールすることができます。
インストールにはpythonのパッケージマネージャーであるpipを使用しました。
pipはpythonをインストールしたときに一緒にインストールされていると思います。
ワークブック(エクセルファイル)の開き方
エクセルファイルはワークブックとして扱われます。
以下のコードでopenpyxlを使ってワークブックを開くことができます。
from openpyxl import load_workbook
wb = load_workbook('example.xlsx')
load_workbook()がワークブックを開く関数です。
ワークシート(エクセルのシート)の選択
ワークブック内の特定のシートを選択することができます。
ws = wb['Sheet1']
wbはload_workbook()で開いたワークブックです。開いたワークブックの特定のシートをwsに指定しています。
セルの値を取得する
ここから少し実践的な内容を解説していきます。まずはセルの値の取得方法です。
value = ws['A1'].value
print(value)
上記コードではwsというシートのA1セルの値を取得しvalueという変数に格納しています。
複数セルの値の取得
特定のセルだけでなく、複数のセルの値を取得することもできます。
複数セルの値を取得するには行や列をイテレート(繰り返し)する方法とセルの範囲を指定する方法があります。
一つずつ見ていきましょう。
行や列のイテレートで複数セルの値を取得する
iter_row()メソッドやtier_cols()メソッドを使用して特定の行や列をイテレートします。
for row in ws.iter_rows(min_row=1, max_row=2, min_col=1, max_col=3):
for cell in row:
print(cell.value)
上記の例ではrowは1行目から2行目を指定、colは1列目(A列)から3列目(C列)を指定しています。
なので上記コードはセルA1, B1, C1, A2, B2, C2の値を出力します。
範囲指定で複数セルの値を取得する
for row in ws['A1:C2']:
for cell in row:
print(cell.value)
この例も先ほどの例と同様A1からC2までのセルの値を出力します。
条件に基づいてセルの値を取得する
if文を使うことで条件に合うセルの値だけを取得することもできます。
for row in ws.iter_rows(min_row=1, max_row=5):
for cell in row:
if cell.value > 10:
print(cell.value)
上記コードでは1行目から5行目の範囲でセルの値が10より大きい場合だけ出力しています。
おまけ
openpyxlを利用したサンプルプログラムを紹介します。実際に自分で実行したり、修正したりしてみてください。
今回解説した内容とは少し違いますが、実際にopenpyxlを使用した例です。
こんなことができる、こんな使い方をするというイメージが持てるかなと思います。
from openpyxl import Workbook
from datetime import datetime, timedelta
# 新しいワークブックとワークシートを作成
wb = Workbook()
ws = wb.active
ws.title = "Sales Data"
# ヘッダー行を追加
headers = ["Date", "Product", "Quantity", "Unit Price", "Total Sales"]
ws.append(headers)
# サンプルデータを追加
products = ["Apple", "Banana", "Orange"]
base_date = datetime(2023, 1, 1)
for i in range(1, 11):
date = base_date + timedelta(days=i)
for product in products:
quantity = 10 * i
unit_price = 1.00 if product == "Apple" else 0.50 if product == "Banana" else 0.75
total_sales = quantity * unit_price
ws.append([date.date(), product, quantity, unit_price, total_sales])
# ファイルを保存
file_path = '/filepath/sample_sales_data.xlsx' # ここにはxlsxファイルを保存する場所のpathを記述
wb.save(file_path)
file_path
上記のコードを実行すると下のようなシートが指定した場所に保存されます。
まとめ
今回はpythonのopenpyxlライブラリを使用してセルの値を取得する方法を解説しました。
エンジニアではない方も業務を効率化したりできるので覚えておいて損のない知識だと思います!
当サイトでは他にもPythonの記事を公開しています。
また、Python以外にもJavaやJavaScriptなど様々なテーマについての記事を公開しています。
そちらも見て頂けると嬉しいです!
コメント