Pythonでフォルダ内のExcelファイルを検索して中身を取得してみる【OpenPyXL】

Pythonでフォルダ内のExcelファイルを検索して中身を取得してみる【OpenPyXL】 プログラミング
このページにはプロモーションが含まれています。

今回の記事では、PythonからExcelのファイルを開いて内容を取得する手順について、実際にPythonのコードを示して簡単に紹介したいと思います。

スポンサーリンク

ただ単にExcelファイルを開いて中身を読むだけではつまらないので、特定のフォルダ内に複数のExcelファイルを配置しておき、PythonのTkinterを使ったGUI画面の入力ボックスに入力したキーワードで複数のExcelファイルの中から一致する行を探し出す、ということをやってみます。

なお、今回の記事で使用した環境はWindows 11です。

PythonからExcelファイルを読むことができる

PythonからExcelファイルを扱うことは可能です。様々なライブラリが存在しますので要件に応じて選択すればよいかと思います。

PythonからExcelファイルを扱うには「OpenPyXL」が情報量が多く手軽に導入できる

PythonからExcelファイルを扱うにあたって情報量も多く導入が楽でオススメなのは「OpenPyXL」です。すでにPython環境が構築済みであれば、pipコマンド一発でインストール可能です。

OpenPyXLのインストール

pipでサクッとインストールしてしまいましょう。

>pip install openpyxl

Windows環境で上記コマンドがエラーになってしまいインストールができない場合は、python.exeの引数として以下のようにコマンドプロンプトから実行してやります。

>python -m pip install openpyxl

Excelファイルの準備

Excelファイルを「C:\tmp」フォルダに2つほど配置しました。ファイル名は以下のようにしました。

  • test_1.xlsx
  • test_2.xlsx

Excelファイルの中身は、以下の画像で示すようにシンプルなものです。

Pythonのコード

以下は実際に使用したPythonのコードです。

import tkinter as tk
from tkinter import Tk, Button
import glob
from openpyxl import load_workbook

class Application(tk.Frame):
    def __init__(self,master):
        super().__init__(master)
        self.pack()
        self.master.geometry("500x200")
        self.master.title("Excelシートを検索するアプリケーション")
        self.create_widgets()

    # ウィジェットの初期配置
    def create_widgets(self):
        # ラベル
        lbl_keyword = tk.Label(self, text='商品ID')
        lbl_keyword.grid(row=0, column=0)

        # Entry
        self.entry_keyword = tk.Entry(self)
        self.entry_keyword.grid(row=0, column=1)

        # 検索ボタン
        btn = Button(self, text="検索", command=self.btn_click)
        btn.grid(row=0, column=2)
    
    # 検索を実行する関数
    def btn_click(self):
        dir = "C:\\tmp\\" # excelファイルを配置するフォルダパス
        keyword = self.entry_keyword.get() # Entryに入力された値を取得
        files = glob.glob(dir + "*.xlsx") # 拡張子(.xlsx)のみを取得対象にする
        files = sorted(files) #ファイル名でソート
        for file in files: # フォルダ内のexcelファイルの数だけループ
            wb = load_workbook(file) # excelファイルを開く
            ws = wb["Sheet1"] # シートを読み込む

            # とりあえず全行・全列を読み込む
            for rows in ws.iter_rows(ws.min_row, ws.max_row, ws.min_column, ws.max_column):
                for cell in rows:
                    if str(cell.value) in keyword:
                        print("見つかりました")
                        print(f"ファイル名:{file}")
                        print("行:" + str(cell.row)) # >>> 行
                        print("列:" + str(cell.column)) # >>> 列
                        print("セル番地:" + str(cell.coordinate)) # >>> セル番地
                        product_name = ws.cell(row=cell.row, column=2).value #セルから商品名を取得
                        print(f"商品名は「{product_name}」です")
                        break
                    else:
                        continue
                    break
                else:
                    continue
                break
def main():
    root = tk.Tk()
    app = Application(master=root)
    app.mainloop()

if __name__ == "__main__":
    main()

PythonからExcelファイルの中身を検索するプログラムの実行

上記Pythonのコードを実行すると以下のウィンドウが表示されますので「商品ID」欄に、保存済みのExcelシートに存在する値を入力してから「検索」ボタンをクリックします。

Pythonのコンソールに以下のように表示されればOKです。ちゃんと検索条件でヒットした結果が取得できていますね。

おわりに

今回の記事ではPythonからExcelファイルを検索して内容を取得するPythonコードを紹介しました。最後までお読みいただきありがとうございます。

スポンサーリンク

コメント

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