エクセルのシート名を取得して、各シートを編集したい…。
openpyxlを使って、シート名を取得する方法を教えて!
了解!
取得後の実践例も併せてご紹介しますよ!
openpyxlでシート名を取得する方法を
Python歴3年の私が、できるだけわかりやすく解説し、解決に導きます。
openpyxlでシート名を取得するには
「sheetnames」を使います。まずは全コード・実行見本をどうぞ。
全コード・実行見本
シートが3つあるエクセルワークブック「input.xlsx」を用意しました。
import openpyxl
wb = openpyxl.load_workbook('input.xlsx')
sheet_names = wb.sheetnames
print(sheet_names)
wb.save('input.xlsx')
実行結果:['Sheet1','Sheet2','Sheet3']
sheet_names = wb.sheetnames
事前準備
- openpyxlのインストール
既存のエクセルファイルを編集するには「openpyxl」のインストールが必要です。
openpyxlのインストール方法
openpyxlを初めて使用する場合は、下記コードを入力・実行して、インストールしてください。
pip install openpyxl
※openpyxlを使用したことがある場合は、このインストール作業は不要です。
解説
シート名を取得する
>>4.sheet_names = wb.sheetnames
上記一文で、ワークブック内の全てのシート名を取得することができます。
【 変数 = ワークブック変数.sheetnames 】
実行見本のように、「変数」には全てのシート名が配列として入りますので、取り扱いには注意が必要です。
取り出したい場合は、for文を使うなどしてください(後ほど実践例を紹介いたします)
その他の解説
既存ファイルを開いて保存する方法などの操作の基本解説は、下記記事で行っております。
ご参考ください。
うまく動作しない時
エラーが出る
No such file or directory: ○○
これは、読み込むファイルやフォルダが見つからないというエラーです。
読み込むファイルのファイル名と構文のファイル名が一致しているか確認しましょう。
詳しい解説は、下記記事をご参考ください。
Permission denied: ○○
操作しようとしているファイルにアクセスできないというエラーです。
「ファイルを開いている状態なので編集できない」と言っていることが多いので、開いていれば閉じて再度トライしましょう。
詳しい解説は、下記記事をご参考ください。
その他のエラー
その他のエラーが出た場合は、エラー文をコピーしてNETで検索してみましょう。
取得後の実践例1
シート名を取得する方法がわかったところで、簡単な実践向きの例をご紹介いたします。
各シートのA1に「あ」という文字を記入してみましょう。
実践例1の全コード
import openpyxl
wb = openpyxl.load_workbook('input.xlsx')
sheet_names = wb.sheetnames
for sheet_name in sheet_names:
ws = wb[sheet_name]
ws['A1'] = 'あ'
wb.save('input.xlsx')
for文の基礎解説は下記記事で行っております。ご参考ください。
実践例1の解説
sheet_names = wb.sheetnames
→まずは各シートのシート名を取得します。
for sheet_name in sheet_names:
ws = wb[sheet_name]
ws['A1'] = 'あ'
→for文を使って、各シートのA1に「あ」を記入しています。
1行目:「sheet_names(配列)」の中から1つのシートを「sheet_name」という変数に入れる
2行目:「sheet_name」に入ったシートを開き、「ws」という変数に入れる
3行目:「ws」に入ったシートのA1に「あ」を記入する
※これをシートが無くなるまで繰り返す
実践例1の実行結果
全てのシートのA1に「あ」という文字が入りました。
「1つ1つシートを指定して記入するのと何が違うのか?」というところですが、
シート名を取得することで、シートが何枚あるのかわからない状態でも、全シートに処理をすることができます。
今回はシートが3枚でしたが、1枚でも10枚でも、100枚でもコードを書き直す必要がありません。
とっても便利ですよね。
今回の実践例自体に実用性はありませんが、行の追加や日付の書き込みを組み合わせることで、
特定の位置に編集日を入れることができたりします。
行の追加、日付の書き込み方法は、下記記事をご参考ください。
取得後の実践例2
次は、全シートの全てのセルを太字にしてみましょう。
実践例2の全コード
import openpyxl
from openpyxl.styles.fonts import Font
wb = openpyxl.load_workbook('input.xlsx')
sheet_names = wb.sheetnames
font_bold = Font(bold = True)
for sheet_name in sheet_names:
ws = wb[sheet_name]
for row in ws:
for cell in row:
cell.font = font_bold
wb.save('input.xlsx')
少し長くなりましたが、こちらも比較的簡単ですので、ぜひ覚えてください。
文字を太字にする方法の基本解説は、下記記事で行っております。
実践例2の解説
sheet_names = wb.sheetnames
→実践例1と同様にシート名を取得します。
for sheet_name in sheet_names:
ws = wb[sheet_name]
for row in ws:
for cell in row:
cell.font = font_bold
→for文を使って、各シートの全てのセルを太字にしています。
1行目:「sheet_names(配列)」の中から1つのシートを「sheet_name」という変数に入れる
2行目:「sheet_name」に入ったシートを開き、「ws」という変数に入れる
3行目:「ws」に入ったシートの中から1つの行を、変数「row」に入れる
4行目:「row」に入った行の中から1つのセルを、を変数「cell」に入れる
5行目:「cell」に入った1つのセルの文字を太字にする
※これをセル・行・シートが無くなるまで繰り返す
forが多くでわかりずらいですが、3行目以降のfor文は「for文の基礎解説」でわかりやすく説明しています。
実践例2の実行結果
全シートの全てのセルが太字になりました。
これを応用することで、全シートの全てのセルに罫線を入れたり、特定の行に網掛けを入れたりすることができます。
最後に
openpyxlでシート名を取得する方法を解説いたしました。
ご紹介した実践例の他にも、いろいろなことに応用できますので、ぜひご活用ください。
当ブログでは、Pythonに関する情報を配信しております。
この記事がわかりやすいと感じた方は、他の記事も読んでいってください。
最後までお読みいただき、ありがとうございました。