出典

 

コード例

import openpyxl as xl

bk = xl.load_workbook(r'C:\temp\org.xlsx')

# シートの選択状態を解除<ーーー■ここ!!!
for ws in bk.worksheets:
    ws.sheet_view.tabSelected = False

# 末尾のシートをアクティブに設定
bk.active = bk.worksheets[-1]

bk.save(r'C:\temp\new.xlsx')

 

末尾のワークシートが選択されたnew.xlsxファイルが作成されます。

 

Excel VBAやwin32com.clientの場合、ExcelライブラリのWorksheetオブジェクトに用意されている、選択を行うSelectメソッドやアクティブにするActivateメソッドを使います。OpenPyXLにも同じような名前のメソッドがあると考えてしまうかもしれませんが、違います。

OpenPyXLの場合、Workbookオブジェクトのactive属性に、そのブックに含まれるWorksheetオブジェクトを設定することで、ワークシートをアクティブにできます。

bk.active = bk.worksheets[-1]

代入文右辺の「bk.worksheets」は、Worksheetオブジェクトを要素として含むリストを返しますから、

bk.active = bk.worksheets[0]

とすれば、先頭のワークシートがアクティブになります。

シートのグループ化防止のために

このWorkbook.active属性への代入だけで済めばイイのですが、元々選択されていたシートの選択状態は解除されないために、複数のシートが選択された状態、シートがグループ化された状態になってしまう場合があります。

それを防ぐために、「bk.active = bk.worksheets[-1]」でワークシートをアクティブにする前に、for文

for ws in bk.worksheets:
    ws.sheet_view.tabSelected = False

で、全ワークシートのSheetView.tabSelected属性にFalseを指定して、選択状態を解除しています。