お疲れ様です。おれちゃんでござる!
前回はPythonで新たなプログラムのGUIを作ってた話をしたましたね。
GUIはユーザーとプログラムのインターフェースということなんですけど、作っているプログラムは何をしているか気になるでしょう。
え?気にならないの?😨😨
いや、どうしても紹介したいなのでお読みいただけると嬉しいです💦
概念
エクセルは嫌です。
万能なツールを偽装してるですけど全く便利ではございません。
少し複雑になるとすぐ手間がすごくかかる作業になります。
エクセル使用をなるべく減ることを誓言しました。
すごく手間がかかる作業であるエクセルでAWSの見積書作りの話を聞いた時に、それを小さなプログラムで解決することにしようと思いました。
概念はこうなります:
プログラムにDrawioの構成図を読み込ませるとGUIに構成図にあるサービスが表示する。
表示と共に各サービスの詳細フィールドも表示する。
ユーザーが各サービスのフィールドに値を入力してエクセル出力ボタンを押したら、、、
数秒でエクセルが自動的に完成です!
AWS APIでサービス単位価格リクエスト
先ずは各サービスの詳細情報で単位価格をAWS API叩いて値を抜粋することです。
例としてElastic File System(略してEFS)の単位価格をとりましょう!
一番集中させたいところはフィルターです。
get_efs_price関数は一つの値しか返さないために作りました。これは単位価格です。
いくつかの値のレスポンスになったらこのコードはリストの第一番目の値を抜粋するので、リストを一つだけのエレメントになるためどんどんフィルターで絞らないといけないです。
フィルターしないと以上のようにAWSの全部のEFSのタイプの価格をJsonのレスポンスな風に出てきます。
regionCodeをユーザーが選んだAWSリージョンにして、storageClassをGeneral Purposeを固定したらレスポンス以下になります。
ちゃんとフィルターしたら以上のレスポンスになるし、関数のなかでで少し頑張れば以下になります。
サービスごとに関数を作ることでどんなサービスでも単位価格の値がとれます!
エクセル書かずにパソコンに任せる
openpyxlのPythonライブラリーでエクセルを読み取りと書き込みすることができます。
Drawioで抜粋した情報とユーザーが入力した情報で見積書を書こうと思っています。
同じEFSサービスを例としてあげます。
一番目の列でデフォルト値を設定しますがGUIの中でユーザーが入力した値がちゃんと引き継がれています。
Input値を分解してもっと読みやすい変数に入れてからエクセルの列の各セルの内容を書きます。
先ずはsheetというリストで固定している値と変数を入れてループでエクセルに書き入れます。
以上のループで値を書き入れ、適切な行に特別なセルの書式を設定します。
最後に「_format_row_header」と「_set_row_header」の関数でセルの合体とサービス名を入れます。
結果は以下になります。
最後に
こうして自動的に、簡単にエクセル資料を生成することができます。
これからどんどんこのような小さいプログラムとスクリプトなどでエクセルから手を離れたいと思います。
また次お楽しみにしてね ^^💦