前回の記事で、自動でエクセルシートを複製する方法を学習しました。
この方法では必ず毎回一番後ろにシートがコピーされてしまいます。
これでもいいんですが、どうせ毎回更新するなら、更新したシートは一番前に配置したい、とのリクエストがあると思いますので、今回は生成したシートを一番前に移動させる方法を説明します。
使うのは前回と同じ、外部ライブラリの 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 つまり選択された状態にしている、ってことです。
これでコピーされたシートが一番前に移動しました。一つ一つ言われてみればわかるんだけどなぁ、って感じですかね?
ということで今回は前回の補足でした。
教室では実際に通って頂いての授業の他、ちょっとしたお困りごとに対するオンライン授業やオンラインサポートも行っております。お困りごとのある方、ご興味がある方は、ぜひお問い合わせください。
お問い合わせは こちら から。体験授業のお申込みは こちら から。