2
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【Python】Workbook.move_sheetメソッドを使ってシートを移動させる。

Last updated at Posted at 2021-02-03

pythonを使用してExcelファイルの操作を勉強しています。
本日の気づき(復習)は、シートの移動に関してです。
pythonでExcelを操作するため、openpyxlというパッケージを使用しています。

左から順に「001」「002」「003」~「010」という名前のシートを持つ
ブック「テスト」があると仮定して、シート「005」を移動させたいとします。

Workbook.move_sheetメソッド

wb.move_sheet(シート名, offset=移動する値)

上記のように記述すると
現在のシートの位置を基準にoffsetの引数の数だけ移動してくれます。
ちなみに、「offset=1」だったら右へ一つ分。「offset=-1」であれば左へ一つ分移動します。

例)move_sheet.py
from openpyxl import load_workbook

wb = load_workbook('テスト.xlsx')

wb.move_sheet('005', offset=-1)

wb.save('テスト_移動後.xlsx')

末尾へ移動

上記の応用で今度は末尾へシートを移動させます。
今回は、順番も総シート数も解っているので「offset=5」にすればいいだけなのですが
それだと味気ないので、ちょっと工夫してみます。

先日復習していたlen関数を使って移動を試みます。

例)move_end_sheet.py
from openpyxl import load_workbook

wb = load_workbook('テスト.xlsx')

wb.move_sheet('005', offset=len(wb.sheetnames))

wb.save('テスト_末尾へ移動後.xlsx')

エラー出るかなと不安でしたが、しっかり移動してくれました。
これで、100シートとかあっても怖くない!

先頭へ移動

こちらも、末尾へ移動同様
「005」シートがどこにあっても先頭へ移動させれるように工夫してみます。

「005」シートがどこにあるのかわからないので
先ずは「005」シートの位置を知るために、Workbook.indexメソッドを使ってみます。

Workbook.indexメソッド

wb.index(シート)

で、シートの数(インデックス番号)を取得できます。
後は、シート数分だけ左に移動するだけです。

例)move_top_sheet.py
from openpyxl import load_workbook

wb = load_workbook('テスト.xlsx')

ws_005 = wb['005']
wb.move_sheet('005', offset=-wb.index(ws_005))

wb.save('テスト_先頭へ移動後.xlsx')

これで、先頭に移動してくれた!・・・のですが
ブックを開いて確認してみると何か違和感が・・・。
「005」「001」のシートが選択されている状態なのです。
こちらは原因と対処法が解りましたら追記いたします。

追記:グループ解除

上記の「005」「001」のシートが選択されている状態になった原因ですが
もともとブックで選択されていたシートが「001」だったためのようでした。
対処法としては
一旦グループ選択状態を解除して、再度先頭のシートを選択しなおす
と、良いようです。

修正)move_top_sheet.py
from openpyxl import load_workbook

wb = load_workbook('テスト.xlsx')

ws_005 = wb['005']
wb.move_sheet('005', offset=-wb.index(ws_005))

# シートのグループ選択を解除する
for ws in wb.worksheets:
    ws.sheet_view.tabSelected = None
# 再度先頭のシートを選択状態にする
wb.active = 0

wb.save('テスト_先頭へ移動後.xlsx')

こちらで、先頭のシートのみが選択状態にする事が出来ました!

2
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?