なりたさまかく語りき

結局好きなこと書くのがいちばんよい。

Excelからデータ読み出してjpegカード画像にする

100日後に死ぬワニが完結して、色々あるけど100日続けたことが凄いと思った。

本題

カードゲーム作って自分で印刷するためにエクセルのリストからカード画像に自動で変換するスクリプトをつくった。 正直、エクセルのリストをもとにパワポで画像を作成するのがかなりの手間で、モチベがダウンしまくりだったので。 こいつで画像作成を爆速化したことでかなり楽になった。 ちょっと世界が平和になったのであった。

github.com

準備

必要なモジュールをインストール

pip install openpyxl

pip install Pillow

実行

python excel2cards.py

仕組み

Excel読み込み

openpyelというライブラリを使用

workbook = openpyxl.load_workbook('cardsheet.xlsx') #cardsheet.xlsx という名前のファイルを読み込む

sheet = workbook["Sheet1"] #Sheet1 という名前のシートを読み込む

読み込んだあとは

sheet.cell(row=i, column=j).value 

で i行j列の値を取得できる。

あとはカードの画像形式に落とし込む。

画像作成

Pillowというライブラリを使う。

im = Image.new("RGB",(708,1033),color) #大元になるカードをつくる。サイズ、背景色の指定 draw = ImageDraw.Draw(im) #描画(※保存されるわけではない)

あとは枠を座標指定して作ったカードに書き込んでいく。

draw.rectangle*1 #Title draw.rectangle*2 #Cost draw.rectangle*3 #illust draw.multiline_text*4#description draw.rectangle*5#flavor text

参考

Tutorial — openpyxl 3.0.3 documentation

PythonでExcelファイル(xlsx)を読み書きするopenpyxlの使い方 | note.nkmk.me

Pillow — Pillow (PIL Fork) 7.0.0 documentation

Pythonの画像処理ライブラリPillow(PIL)の使い方 | note.nkmk.me

*1:110, 10, 610, 90), fill=(255, 255, 255) ,outline=(0,0,0

*2:620, 10, 698, 90), fill=(255, 255, 255) ,outline=(0,0,0

*3:40, 110, 668, 500), fill=(255, 255, 255) ,outline=(0,0,0

*4:280, 260), "illust", fill=(0, 0, 0), font=font_big) draw.rectangle((40, 520, 668, 850), fill=(255, 255, 255) ,outline=(0,0,0

*5:40, 870, 668, 1015), fill=(255, 255, 255) ,outline=(0,0,0