2020年12月6日2 分
最終更新: 2021年4月11日
前回の記事で、自動でエクセルシートを複製する方法を学習しました。この方法では必ず毎回一番後ろにシートがコピーされてしまいます。これでもいいんですが、どうせ毎回更新するなら、更新したシートは一番前に配置したい、とのリクエストがあると思いますので、今回は生成したシートを一番前に移動させる方法を説明します。
使うのは前回と同じ、外部ライブラリの openpyxl、シートの移動に使う関数は move_sheet() 。
move_sheet ( 対象シート名 , offset = 移動先を表す値 )
これで移動させることができます。offset に渡す値が正の値ならば与えた数値分右へ。負の値ならば逆に与えた値の大きさだけ左に移動します。
で、生成されたシートは一番後ろに生成されるので、index()メソッドを使えば生成されたシートが何番目のシートなのか?つまり先頭からのシート数がわかるわけですね?
この2つの関数を使うことで、一番後から一番前に移動することができそうです。
ということで前回のコードを改造していきます。
from datetime import date
from openpyxl import load_workbook
wb = load_workbook('日報.xlsx')
for ws in wb.worksheets:
ws.sheet_view.tabSelected = None
ws_temp = wb['temp']
ws_copy = wb.copy_worksheet(ws_temp)
today = date.today()
ws_copy.title = f'{today:%Y%m%d}'
wb.move_sheet(ws_copy, offset=-wb.index(ws_copy))
wb.active = 0
wb.save('日報.xlsx')
今回の追加はたったの2行。上の赤い部分ですよ。
wb.move_sheet(ws_copy, offset=-wb.index(ws_copy))
説明が重複しますが、move_sheet() メソッドを使って、コピーされたシートを移動させます。
移動させる値は、コピーされたシートの先頭からのシート数分、これを index() メソッドを使って取得しています。左に移動させたいので、この値にマイナスをつけて引数として渡している、ってことですね?
wb.active = 0
ここでは、0番目、つまり移動してきたコピーされたシートを active つまり選択された状態にしている、ってことです。