📝

整形されたエクセルの入出力

2024/12/08に公開

背景

お客さんに納品する際のエクセルはきちんと整形されたものがほとんどです。一からpandasでデータ処理してエクセルを出力しても、納品までに手を加えて見た目を整える工程が欠かせません。運用フェーズではこのような加工の工数が嵩んできます。そこでなるべく納品するエクセルの質を落とさずにほぼ自動でエクセルファイルを出力する方法を検討したまとめになります。

使用したライブラリについて

最も重要なのは要求される形式に差異なく合わせたテンプレファイルを用意することです。テンプレファイルはセルの結合など様々な処理がなされたものです。pandasのdataframeで読み込むとこれらのエクセルの情報が失われてしまいます。これを防ぐために今回はopenpyxlを使用しました。他のライブラリも様々ありましたがこれが最も信頼できるということで今回はこちらを選択しました。
openpyxlで可能なセルの操作

  • 値の入力・出力
  • セルの結合
  • 関数の入力
  • 色を変更
  • ...

アーキテクチャについて

実現したい要件は、集計→整形されたエクセルファイルを出力→メールで配信という3段階でした。手元で構築したシステムの要素は以下です。

Google Cloudでの実装です。
定期実行:Cloud Scheduler
集計:Cloud Functions
出力先:Cloud Storage
配信:Gmail

今回はメール配信の認証部分で手詰まりを起こしたため、今回はCloud Storageに出力されたエクセルファイルの署名付きリンクを取得し、画面に返す方法で配信機能を実現しました。

Code

https://github.com/ryujun1117/Basketball/tree/ade252a0e9b4cd24b1fd48010b29c0ed1ac1ac07/team-stats

まとめ

今回は納品を想定してエクセルの品質を高く保ちつつ、Pyhtonによる自動化を試みました。具体的にはデータの集計から保存、配信までの流れを自動化することをサブの目的としてシステム面の実装を行いました。
メールでの配信機能が課題なので今後も取り組みます。
※他にもLINEなどのチャットサービスなどの連携も可能性ありそうです。

Discussion