エクセルを入出力に、データ処理の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 Documentation
参考サイト
公式のドキュメント
PySimpleGUI
None
公式git hubでのデモプログラム
https://github.com/PySimpleGUI/PySimpleGUI/tree/master/DemoPrograms
日本語での入門書
コメント