PySimpleGUIでExcelファイルの読み込み&出力

Laptop Keyboard Screen Workpython

エクセルを入出力に、データ処理のGUIツールをpythonで作りたい。

(pythonで行ったデータ処理を、VBAで書き直したくない)

シンプルなコードでGUIが作成できるPySimleGUIを触ってみました。

作成したプログラムは、エクセルファイルを読込み、書き換えするものです。

インストール

インストールはpipで行いました。

なお、開発環境としてはPyCharmが推奨されているようです。

pip install pysimplegui

全コードおよびGUI画面

今回作成したGUIとそのコードは以下の通りです。

import PySimpleGUI as sg
import xlwings as xw
import pandas as pd

# GUIのテーマカラー
sg.change_look_and_feel('DarkAmber')

# 各項目のレイアウト
layout = [[sg.Text('ファイル選択'),
          sg.InputText('ファイルパス・名',key='-file-'),
          sg.FilesBrowse('ファイル読込', target='-file-', file_types=(('Excell ファイル', '*.xlsx'),))],
          [sg.Button('実行',key='bt')]]


# ウィンドウ作成
window = sg.Window('エクセルファイルの入出力', layout)

# イベントループ
while True:
    event, values = window.read() #イベントの読み取り

    if event is None:   # ウィンドウ閉じるとき
        break

    # エクセルファイル処理関連
    elif event == 'bt':
        f = values['-file-'] # ファイルパスを取得

        if f != 'ファイルパス・名':
            # エクセルファイルのsheet1を読み込み
            sht = xw.Book(f).sheets['sheet1']
            # テーブルデータを読み込んだ後、転置して書き込む
            df = sht.range('A1').options(pd.DataFrame,header=False,index=False,expand='table').value
            sht.range('A1').value = df.T.values

            # ポップアップでメッセージ表示
            sg.popup('処理を実行しました')

        else:
            # ポップアップでメッセージ表示
            sg.popup('ファイル指定なし')

# 終了処理
window.close()

各処理について

GUIレイアウトの設定

PySimpleGUIにおけるGUIのレイアウトは、リストで管理されています。

レイアウトは行単位で配置することができ、今回は以下のようなリストでレイアウトを設定しています。

# 各項目のレイアウト
layout = [[テキスト,ファイルパス入力ボックス,ファイル読込ボタン], #1行目
          [実行ボタン]] #2行目

GUIのイベント処理

ボタンの押下などのイベントがなされた時、そのイベント名(keyで設定)やその時の値は「event」と「values」の2変数で取得するようです。

# イベントループ
while True:
    event, values = window.read() #イベントの読み取り

    if event is None:   # ウィンドウ閉じるとき
        break

    # エクセルファイル処理関連
    elif event == 'bt':#実行ボタンの押下を判定
        f = values['-file-'] # ファイルパスを取得

        '''エクセル関連の処理'''

# 終了処理
window.close()

Excelファイルの取り扱い

Excelファイルの読み込みと書き出しはxlwingsを使用しています。

また今回のプログラムは、読込んだExcelのテーブルデータをpandasで転置して、同じファイルに上書きするものです。

クイックスタート — xlwings dev ドキュメント

参考サイト

公式のドキュメント

PySimpleGUI
None

公式git hubでのデモプログラム

PySimpleGUI/PySimpleGUI
Launched in 2018 Actively developed and supported. Supports tkinter, Qt, WxPython, Remi (in browser). Create custom layout GUI's simply. Python 2.7 & 3...

日本語での入門書

コメント

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