OpenPyXLでExcelのシートを削除するコードをご紹介しました。
シートを追加するコードについても記事にしておきます。
Workbook.create_sheetメソッドでExcelにシートを追加できる
OpenPyXLでは、Workbook.create_sheetメソッドでシートを追加できること、引数に何も指定しなければ末尾に、「0」を指定すれば先頭に追加できることは、少し調べるとわかるのですが、いくつか気になる点があります。
引数titleに既に存在するシートと同じ名前を指定した場合どうなるのか、シート名に使えない文字が含まれていたらどうなるのか、引数indexに(1枚しかシートがないのに999を指定するなど)インデックス番号として存在しない自然数を指定した場合にどうなるのか、あたりが私は気になりました。
create_sheetで既存シートと同じ名前を指定したとき
既存のシートと同じ名前を指定して、create_sheetメソッドを実行したときの挙動を確認するため、以下のようなスクリプトを用意しました。
bk = openpyxl.load_workbook('C:\\temp\\foo.xlsx')
bk.create_sheet(title='hoge')bk.create_sheet(title='hoge')
bk.create_sheet(title='hoge')
bk.save('C:\\temp\\foo2.xlsx')
Cドライブのtempフォルダーに、ORGシートだけが存在するfoo.xlsxを用意して、上記のスクリプトを実行すると、下図のようなfoo2.xlsxが作られます。
引数titleに、既存シートと同じ名前を指定した場合、指定されたシート名の末尾に、自然数が付加された名前になるということです。
create_sheetでシート名に使えない文字を指定したとき
wb.create_sheet(title='[')
のように、シート名に使えない文字を指定した場合は、
ValueError: Invalid character [ found in sheet title
とエラーが発生します。
create_sheetで大きな整数を指定したとき
wb.create_sheet(index=1048576)
のように、引数indexに大きな自然数を指定した場合、特にエラーになることなく、末尾にシートが追加されます。
オブジェクトと名前から感じるExcel VBAとの違い
Excel VBAの場合、拙著『いちばんやさしいExcel VBAの教本』のLesson 67でもお伝えしているとおり、WorksheetsコレクションのAddメソッド(厳密にはSheetsコレクションのAddメソッド)でシートを追加できます。
これに対しOpenPyXLの場合、メソッドを持っているのがWorkbookです。
メソッド名で使われている単語も、「Add」ではなく「Create」です。
結果としては同じシートの追加であっても、行われている処理は大きく違うことが感じられます。
最終更新日時:2022-12-27 10:47
- Newer:PowerPoint VBAで最後に挿入された図形を取得する
- Older:VBAでスライド上のグラフを取得する
Home » Python » OpenPyXLの使い方 » OpenPyXLのWorkbook.create_sheetでシートを追加する時の挙動