gologiusの巣

プログラミングなどの技術メモです。誰かの役に立てるとうれしいです。

【Python】 CSVをシンプルなExcel形式に変換する

やりたいこと

前置き

今回使ったCSVサンプルはここから拝借した。SJIS変換を手元でしている。

個人情報テストデータジェネレーター

ダミーとはいえ個人情報っぽい内容が記載されているのが気持ち悪かったので、 一応貼った画像は加工している。

本題

システムからCSVでファイルをダウンロードした後に、 加工せずにExcelで開くと↓のようになりますよね

これをExcelで人に渡す形式にしようとすると

  • 0飛びを防ぐために書式を文字列にしたり
  • フィルタしたり
  • ウインドウ固定したり
  • 列幅修正したり

とかしないといけなくて、面倒。

まともに取り込んで編集するためには↓のようなことをしないといけない。狂っている Excel 2019:従来のウィザードでデータをインポートするには

目指す姿

CSVを入力として、上記の対応を全部反映したExcelを自動生成する

結論(コード)

Python + pandas + openpyxl あたりでコード書いた。

CSVファイルをシンプルなExcelに変換する

超簡単な使い方説明

引数となるcsvファイルを対象に、excelファイルに変換する。

windowsなら

python converter.py %*

な感じのことをバッチファイル書いて、CSVファイルをバッチファイル上にD&Dして実行すればいい。

↓こういうこと

雑なスクリプト解説

CSVEXCELファイルへの変換自体は、pandasで実施している。 (openpyxlで完結しそうな気もするが、手元の環境でうまくいかなかったたため)

一回Excelファイルを作成し、そのExcelファイルに対して、openpyxlにて加工している。 pandasはあくまでデータ加工が得意なので、 Excel書式などの対応はpandasで頑張らないほうがよい模様。

列幅は愚直にループ回して最も文字数が多いセルの幅をセットしている。 幅の計算は半角全角によって適当な係数をかけて計算している。 厳密に計算しようとすると、フォントとフォントサイズとその文字のサイズをきちんと計算する必要がある模様。

余談

  • 必要であれば適宜改造して使ってもらってよいです。
  • ブログ加工より、CSVサンプルを探す→画像加工が地味に面倒だった
  • もっときれいに短く書ける人いれば教えて。