openpyxlでExcelのデータを処理した後,GUIで良い感じに表示したいと思っても結構面倒です。Microsoft Windowsで簡単にGUIをやるならプロデルが最適ですので,組み合わせてみました。
.xlsxファイルの読み込み
import sys
import openpyxl
def excel_to_tsv(excel_file_path, tsv_file_path):
workbook = openpyxl.load_workbook(excel_file_path)
sheet = workbook.active
with open(tsv_file_path, 'w', encoding='utf-8') as f:
for row in sheet.iter_rows(values_only=True):
tsv_line = '\t'.join([str(cell) if cell is not None else '' for cell in row])
f.write(tsv_line + '\n')
excel_to_tsv(sys.argv[1], 'output.tsv')
これで各セルの内容が得られます。出力はoutput.tsv
に固定しました。
プロデルでウィンドウを作る
プロデルはVisual Basicみたいな感じでウィンドウなどのGUI部品を設計できます。
マニュアルには明示的に書かれていませんが,半角&の後ろに文字を置くことで,ショートカットキーの設定ができます。
表部品を設置しましたが,ウィンドウの大きさが変わる度に表部品の大きさを変えるのは極めて面倒ですので,ドッキング方向を全体
にしておきました。これでサイズに関係なく良い感じにできます。
メニュークリック時の処理
ファイル(&F)
の下に開く(&O)
を用意しています。このメニュー項目の名前を「開く項目」としました。イベント手順は,プロデルデザイナ上で任意のGUI部品を右クリックすると「イベント手順の選択」というメニューが出てきますので,それを使えば簡単ですが,「メニュー項目」はそうなっていないので,自分で書く必要があります。
開く項目がクリックされた時の手順
開く画面のフィルタを「Microsoft Excel 2007|*.xlsx」に変える
ファイル名は、開くファイルを選択したもの
もしファイル名が無でなければ
ファイル名を読み込む。
もし終わり
終わり
選択ウィンドウ(古w)がこれで出てきますので,ファイル名を取得し,pythonに引き渡します。
[ファイル名]を読み込む手順
「python.exe」を「load_xlsx.py [ファイル名]」として起動して待つ
表というデータ表を作る。
表へ「output.tsv」から「UTF-8」で読み込む。
表部品1のデータ表を表へ変える。
終わり
引数の与え方ですが,これでうまくいきました。ファイル名にスペースがある場合にどうなるかは未検証です。
実行
今回は,防衛省の災害派遣及び不発弾等処理実績のExcelデータを使用しました。
おお!ちゃんと出てきました!!本当に簡単です。15分もあればこのようなWindows用のGUIアプリができてしまいます。