xlwingsでエクセルを編集しているんだけど、
最終的に見せたくない行がある…。
削除するんじゃなくて、非表示にする方法は無いの?
ありますよ!
では今回は、
「xlwingsで行や列を非表示にする方法」を
できるだけわかりやすく解説いたします。
非表示になっている行や列を「再表示する方法」
も紹介いたしますので、ぜひ最後まで読んでいってください。
【著者情報】
Python歴3年。
入社2年目の春に先輩が突然トンズラし、業務を半分肩代わりするハメに…。
今までの1.5倍の仕事をこなせるはずもなく、苦しむ毎日。
業務効率化を模索中にPythonと出合う。
業務とPythonの相性が良く、2倍以上の効率化を実現。現在も効率化を進行中。
xlwingsで行(列)を非表示にするには
「Hidden」を使います。まずは実行見本をどうぞ。
実行見本
全コード
ひとまず全コードを網羅します。解説は後ほど行います。
import xlwings
workbook = xlwings.books.active
worksheet = workbook.sheets.active
worksheet.api.Rows('1').Hidden = True
worksheet.api.Rows('1').Hidden = True
xlwingsの処理は、予想以上に時間がかかることがあります。
プログラムの最後に「print(‘実行完了’)」などを追記し、完了したのを確認してから結果を見ましょう。
事前準備
- xlwingsのインストール
エクセルファイルを実際に操作するには、「xlwings」のインストールが必要になります。
xlwingsのインストール方法
xlwingsを初めて使用する場合は、下記コードを入力・実行して、インストールしてください。
pip install xlwings
※xlwingsを使用したことがある場合は、このインストール作業は不要です。
インストール方法詳細やインストールができない場合の対処法、
基本的な使い方などは下記記事をご参考ください。
解説
※わかりやすさを重視しております。厳密には解釈が異なる場合がありますことをご了承ください。
インポート~シートの取得
import xlwings
workbook = xlwings.books.active
worksheet = workbook.sheets.active
上記コードにて、「xlwingsのインポート」「アクティブブック・アクティブシートの取得」をしています。
詳細は「アクティブシートの取得」の記事をご覧ください。
行(列)を非表示にする
worksheet.api.Rows('1').Hidden = True
上記一文にて、「指定の行を非表示」にすることができます。
今回の場合では、「1行目」を非表示にしています。
「Rows」は大文字と小文字が混在していますが、このままの記述でお願いします。
すべて小文字にすると動作しませんのでご注意ください。
()内には非表示にする行番号を記述します。
<テンプレ:行の非表示>
【 シートが入った変数.api.Rows(‘非表示にする行の番号‘).Hidden = True 】
「Rows」を「Columns」に変えることで、列を非表示にできます。
worksheet.api.Columns('A').Hidden = True
列を非表示にする場合は、()内に列名を記述します。
<テンプレ:列の非表示>
【 シートが入った変数.api.Columns(‘非表示にする列の名前‘).Hidden = True 】
複数の行(列)を非表示にする
複数の行(1行目~3行目)をまとめて非表示にすることも可能です。
#複数の行を非表示
worksheet.api.Rows('1:3').Hidden = True
#複数の列を非表示
worksheet.api.Columns('A:C').Hidden = True
最初の見本と比べて()内が変わっただけです。
「1:3」のように記述することで、1行目・2行目・3行目を非表示にすることができます。
行(列)を再表示する
すでに非表示になっている行や列を再表示する方法は以下のとおりです。
#行の再表示
worksheet.api.Rows('1').Hidden = False
#列の再表示
worksheet.api.Columns('A').Hidden = False
最初の見本と比べて右辺が変わっただけです。
非表示にする時は「True」でしたが、再表示するときは「False」と記述します。
非表示になっていない行や列を指定してもエラーになりません。
全ての行を再表示したい場合は、「1:999」のように指定することも可能です。
指定のしかた
行や列の指定方法ですが、以下の通りでも同じ結果が得られます。
#行を非表示(別の指定方法)
worksheet.api.Rows(1).Hidden = True
#列を非表示(別の指定方法)
worksheet.api.Columns(1).Hidden = True
最初の見本と比べて()内が変わっただけです。
行と列、どちらも「番号」で指定することができます。
この場合は「’(クォーテーション)」で囲う必要はありません。
うまく動作しない時
エラーが出る
‘NoneType’ object has no attribute ‘books’
エクセルブックやエクセルファイルを開いていないのに、ブックやファイルを取得しようとした場合に出るエラーです。
事前に対象のファイルを開くように指定するなど、構文を見直してみましょう。
○○ is not defined
今まで出てきていない変数などを処理しようとした時に出るエラーです。
変数名などが間違っていないかチェックしましょう。
詳しい解説は、下記記事をご参考ください。
その他のエラー
その他のエラーが出た場合は、エラー文をコピーしてNETで検索してみましょう。
空のブックが生成される・残る
作業環境によっては「空のブック(Book1)」が生成されたり、残ってしまう場合があります。
このまま作業を続けると、空のブックがどんどん増えていく可能性があるため対処が必要です。
対処法としましては、何か別のエクセルを開いたままにしておきましょう。
そうすることで、空のブックは生成されません。
作業を始める前に、適当なエクセルファイルをひとつ開いておくことをおすすめします。
いつまでたっても実行されない
エラーは出ていないのに、いつまでたっても実行されない場合は、実行内容がエクセルに届いていない可能性があります。
「books.active」「sheets.active」を使用していて、エクセルファイルが最小化されていると、実行内容がエクセルに届かない場合があります。(もう1度実行すると、同じ内容が2回実行される)
エクセルは最小化せず、コードエディタとエクセルを並べて表示させた状態で実行するとうまくいきやすいです。
最後に
xlwingsで行や列を非表示にする方法を解説いたしました。
当ブログでは、xlwingsやopenpyxlなど、Pythonに関する情報を配信しております。
この記事がわかりやすいと感じた方は、他の記事も読んでいってください。
挫折せずにPythonを独学で学習する方法は特におすすめです。
最後までお読みいただき、ありがとうございました。がんばってください!