業務で毎日日報を書かなければならない方、多くいらっしゃると思います。
そんな時、毎日ひな形を複製して、シート名に日付を入れなおしたりしていません?
ちょっとした作業ですが結構面倒ですよね?
今回はそんな作業をPythonを使って一発で解決する、「自動で当日分の日報シートを生成する方法」についてご紹介いたします。
下の図のように、テンプレート(今回はシート名を「temp」にしています)を複製し、当日日付(今回は「20201202」で数字を詰めています)で作成したいと思います。
では早速Pythonで以下のコードを記述していきましょう。
from datetime import date //❶datetimeライブラリ dateクラス を取得
from openpyxl import load_workbook //❷openpyxl ライブラリ load_workbookを取得
wb = load_workbook('日報.xlsx') //❸日報というファイルを読み込んで、wbに代入
for ws in wb.worksheets:
ws.sheet_view.tabSelected = None //複数シートのグループを解除
ws_temp = wb['temp'] //❹ws_temp に[temp]というシートを一時保存
ws_copy = wb.copy_worksheet(ws_temp) //ws_copy に ws_temp をコピー
today = date.today() //today という変数に当日の日付をセット
ws_copy.title = f'{today:%Y%m%d}' //❺ws_copy のシート名を変更
wb.save('日報.xlsx') //❻同じファイル名で保存
基本のコードは以上です。
コメントにも記載してある通りですが、解説をしていきます。
❶ このプログラムでは日付を扱いますので、標準ライブラリの datetime の dateクラスを取得します。
当日の日付は、date.today() メソッドで取得します。
❷ ワークブックを読み取るためには外部ライブラリのopenpyxl の load_workbook()メソッド を読み込んで活用します。
openpyxl ではシートを新規作成したり複製したとき、元のブックで選択されているシートは選択されたままになります。
そのため、複製したシートのみを選択状態にしたい場合、もともと選択されていたシートも選択されてしまい、複数のシートがグループ化された状態になります。
❸ for文ではこのグループ化を解除するために、sheet_view.tabSelected を None にしています。
❹ ws_temp = wb[‘temp’]
ws_copy = wb.copy_worksheet(ws_temp)
ここでは、ひな形のシート:シート名[temp]を、変数 ws_temp としていったん保存。
変数 ws_copy にcopy_worksheet()メソッドで、変数 ws_temp を複製します。
❺ ws_copy.title = f'{today:%Y%m%d}’
では ws_copy のシート名を指定しています。
事前に取得した本日の日付、todayを使って、年と月と日を結合させてシート名にします。
❻最後は wb.save()メソッド で同じ名前で保存しています。
違う名前にしたい場合はここで名前を指定します。
これで上の様に本日の日付のシートが一番右に作成されました。
当日のシートは左に出したい、という場合はどうすればよいか?これは次回説明します。
教室ではPythonやその他プログラミング言語も実際に通って頂いての授業の他、オンライン授業やオンラインサポートも行っております。お困りごとのある方、ご興味がある方は、ぜひお問い合わせください。
お問い合わせは こちら から。体験授業のお申込みは こちら から。