openpyxlで編集したエクセルを提出したら、
「Sheet2じゃなくてSheet1がアクティブになってたから、
まとめるデータを間違えたんだけど」って怒られた…。
openpyxlでアクティブシートを変更する方法は無いの?
あります!
グループ化を回避する方法も紹介しますよ!
openpyxlでアクティブシートを変更する方法を、
Python歴3年の私ができるだけわかりやすく解説し、解決に導きます。
openpyxlでアクティブシートを変更するには
「active」と「sheet_view」を使います。まずは実行見本をどうぞ。
実行見本
全コード
ひとまず全コードを網羅します。解説は後ほど行います。
import openpyxl
wb = openpyxl.load_workbook('input.xlsx')
ws1 = wb['Sheet1']
ws2 = wb['Sheet2']
ws1.sheet_view.tabSelected = False
wb.active = ws2
wb.save('input.xlsx')
ws1.sheet_view.tabSelected = False
wb.active = ws2
事前準備
- openpyxlのインストール
既存のエクセルファイルを編集するには「openpyxl」のインストールが必要です。
openpyxlのインストール方法
openpyxlを初めて使用する場合は、下記コードを入力・実行して、インストールしてください。
pip install openpyxl
※openpyxlを使用したことがある場合は、このインストール作業は不要です。
解説
アクティブシートを変更
>>06.ws2 = wb[‘Sheet2’]
>>10.wb.active = ws2
6行目の一文で「Sheet2」を変数に入れます。
その後、10行目で「Sheet2」をアクティブにしています。
これで「Sheet2」をアクティブにすることができます。
【 ワークシート変数 = ブック変数[‘アクティブにしたいシート名‘] 】
【 ブック変数.active = ワークシート変数】
しかしながら、これだけでは不完全なのです。
下図が実行見本です。
たしかに「Sheet2」はアクティブになったのですが、
「Sheet1」も選択されて、グループ化された状態になっています。
これでは受け取った人が気付かず編集したりすると、「Sheet1・2」が連動して修正されてしまうなど、別の問題が起きます。
では、このグループ化を回避するにはどうしたらいいでしょうか。
グループ化を回避
グループ化を回避するには、もともとアクティブになっていた「Sheet1」の選択を解除する必要があります。
>>05.ws1 = wb[‘Sheet1’]
>>08.ws1.sheet_view.tabSelected = False
5行目で「Sheet1」を変数に入れ、8行目でその「Sheet1」の選択を解除しています。
これで、グループ化がなくなり、「Sheet2」のみがアクティブになりました。お疲れ様でした。
【 ワークシート変数 = ブック変数[‘もともとアクティブになっていたシート名‘] 】
【 ワークシート変数.sheet_view.tabSelected = False 】
関連記事として、「アクティブセルをA1に変更する方法」というものがございます。
これで更に体裁が整いますので、よろしければご覧ください。
その他の解説
既存ファイルを開いて保存する方法などの操作の基本解説は、下記記事で行っております。
ご参考ください。
うまく動作しない時
エラーが出る
No such file or directory: ○○
これは、読み込むファイルやフォルダが見つからないというエラーです。
読み込むファイルのファイル名と構文のファイル名が一致しているか確認しましょう。
詳しい解説は、下記記事をご参考ください。
Permission denied: ○○
操作しようとしているファイルにアクセスできないというエラーです。
「ファイルを開いている状態なので編集できない」と言っていることが多いので、開いていれば閉じて再度トライしましょう。
詳しい解説は、下記記事をご参考ください。
Worksheet ○○ does not exist
「指定したシートがありません」というエラーです。
指定のシート名が間違っていないか、「sheet1」など先頭が小文字になっていないか確認しましょう。
詳しい解説は、下記記事をご参考ください。
○○ is not defined
今まで出てきていない変数などを処理しようとした時に出るエラーです。
変数名などが間違っていないかチェックしましょう。
詳しい解説は、下記記事をご参考ください。
その他のエラー
その他のエラーが出た場合は、エラー文をコピーしてNETで検索してみましょう。
まとめ
openpyxlでアクティブシートを変更する方法を解説いたしました。
「active」と「sheet_view」をセットで覚えておきましょう。
最後までお読みいただき、ありがとうございました。がんばってください!