Home » Python » OpenPyXLの使い方 » OpenPyXLでシートを1枚だけ選択する

OpenPyXLでシートを1枚だけ選択する

動作検証バージョン:Windows 10 Pro(64-bit)+ Python 3.8.3(32-bit) + OpenPyXL 3.0.7

「python openpyxl シート選択」
という検索キーワードでアクセスがありました。

xlsxファイル等を読み書きするPythonの外部ライブラリ「OpenPyXL」を使って、Excelのワークシートを選択するには、どのようなコードを書けばいいのか探していた方による検索です。

Excelで作られたxlsxファイルを操作するライブラリOpenPyXLで、このような処理は少々面倒です。

OpenPyXLでワークシートを選択するサンプル

Cドライブtempフォルダーに、複数のワークシートが存在するorg.xlsxファイルを用意しておいてから以下のスクリプトを実行してください。

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[0]

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

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

OpenPyXLでのシート選択は面倒

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

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

bk.active = bk.worksheets[0]

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

bk.active = bk.worksheets[-1]

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

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

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

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

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

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

最終更新日時:2023-05-07 16:25

[スポンサードリンク]

Home » Python » OpenPyXLの使い方 » OpenPyXLでシートを1枚だけ選択する

「OpenPyXLの使い方」の記事一覧

検索


Copyright © インストラクターのネタ帳 All Rights Reserved.

.