【旅程表 #01】くっつけて、openpyxl

リステはいいぞ

公式サイト: Re:ステージ!公式サイト
ゲームもあるみぃ: Re:ステージ!プリズムステップ




茶番はここまで(はやい)




今回は旅程表を自動で作るソフトを作っていきたいと思います

1.目標

私は乗り寄りの鉄オタもどきなのでちょくちょくどこかに出かけたりしているのですが、その時に↓のような旅程表を作っていました。
f:id:kanade_2001:20220213163924p:plain
これはnumbersで作ったもので、セルの幅などある程度まではテンプレートに保存できますが、路線カラーなど色をつけたりは一つ一つ手動でやっていました。ただこれを続けるのはめんどくさいですし、なんなら時刻とか路線名とかも自動で入力できるようにしたいのでこの度ソフトを作っちゃおうという結論になりました。


2. 使用するライブラリなど

今回は最終的にPDFなどで旅程表を出力することが目的なのでWeasyPrintのように直接PDFを組み立てるライブラリの仕様も検討しました。しかし、作るソフトウェア内部からのみはなくファイルを直接いじろうと思った時にxlsxファイルやcsvといったファイル形式で保存されていた方が楽なので、openpyxlでexcel形式のファイルを作った後にそれをpdf出力するという形式にします。このopenpyxlはpythonのライブラリの一つで、xlsx形式ファイルの入出力ができるものです。オープンな(MITライセンスです)pythonのxlsx用ライブラリなのでくっつけてopenpyxl(なのだと思っています)。xlsx形式を扱えるライブラリとしてはpandasも有名ですが、openpyxlの方が書式等の設定ができるので今回のようにお絵描きをする場合はopenpyxl一択だと思います。
また、cuiだとちょっとめんどくさそうなのでkenvyとかでGUIも作れたらいいなぁなんて。他には使うかどうかは未定ですが駅データ.jp(https://www.ekidata.jp/)さんの無料版データも用意して自動補完機能とかつけるかもしれません。あとこれまで避けてたGitHubを使ったり使わなかったりします。


3. openpyxl

とりあえず初日なので慣れることから
ファイル作成は

import openpyxl
workbook = openpyxl.Workbook()
workbook.save('Sample1.xlsx')

でいけます。
汎用性を考えてファイル名は別の変数を後から付け足しました。ファイルが既に存在するかの確認を含めて最終的に

import openpyxl
import os

name = "sample1.xlsx"

#Make file

filename = name
#filename = path + filename
#filename = os.path.expanduser(filename)
if os.path.exists(filename):
    print("File exists.")
    workbook = openpyxl.load_workbook(filename)
else:
    print("File doesn't exist.")
    workbook = openpyxl.Workbook()
    workbook.save(filename)

workbook.save(filename)

みたいな感じになりました。os.path.expanduserとかコメントアウトされてるところに関してはwindowsmacの兼ね合いでごっちゃになってるやつです(macならコメントアウトして動く)。

とりあえず初日は情報量ゼロだけどこんな感じで。次は簡単なデータを用意して整形などしていきたいと思います。