はじめに
会社で地図アプリに表示するデータを作成する処理を作ったのですが、そのデータが都道府県ごとのフォルダにデータが分けられていて、都道府県ごとに一つずつ表示したスクリーンショットをエクセルに貼り付けてほしい、と依頼がありました。
シートを47個以上も作成するだけでも物憂い仕事です。シートを一枚作るごとにコーヒーブレイクしてブログ巡回をして30分くらい無駄にするに決まっています。
そうならないようにシートを47都道府県分一気に作る処理が欲しかったのです。
あわよくばそれを汎用的にして、テキストファイルを引数に取るだけで作成できるものにしたいと考えました。
作った処理
自分はC#をよく使うのですが、これだけの処理にC#はなんだかな……、と思いまして、Pythonで作れないか検討しました。
それで、作った処理が以下になります。
※事前にopenpyxlはpipでインストールしておいてください。
import sys
import openpyxl
# コマンドラインの第一引数を入力ファイル名とする
file_name = sys.argv[1]
# エクセルのワークブックを新規に作成する
excel_book = openpyxl.Workbook()
# シートのインデックス
sheet_index = 0
# ファイルを開き、各行の内容を空文字でない限りシート名とする
with open(file_name, 'r') as file:
for one_line in file:
# 改行は消しておかないとシート名に改行がついてしまう
sheet_name = one_line.replace('\n', '')
if sheet_name:
excel_book.create_sheet(index=sheet_index, title=sheet_name)
sheet_index += 1
# 余計なシートがあるので削除する
excel_book.remove(excel_book['Sheet'])
# エクセルファイルを保存
excel_book.save('tmp.xlsx')
問題点など
シート名が長すぎたり重複していたりするのに対応していませんが、わかっていて使うぶんには問題ないかと思いました。
受け取ったテキストファイルの文字コードはShift_JISでないと駄目なようです。
保存するファイル名が固定ですが、ファイル保存ダイアログを出して自由に変えられるようにするなどしても良いかもしれません。または、第二引数で指定するのでも良いかもしれないです。
終わりに
自分はこの処理のおかげでだらだらと仕事をしないで済みました。
ほかの人もこれを使って仕事を楽にしてくれたら幸いです。