業務で毎日日報を書かなければならない方、多くいらっしゃると思います。そんなとき毎日ひな形を複製して、シート名に日付を入れなおしたりしていません?ちょっとした作業ですが結構面倒ですよね?
今回はそんな作業を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やその他プログラミング言語も実際に通って頂いての授業の他、オンライン授業やオンラインサポートも行っております。
お困りごとのある方、ご興味がある方は、ぜひお問い合わせください。
お問い合わせは こちら から。
体験授業のお申込みは こちら から。
Comments