Home » Python » OpenPyXLの使い方 » OpenPyXLのWorkbook.create_sheetでシートを追加する時の挙動

OpenPyXLのWorkbook.create_sheetでシートを追加する時の挙動

動作検証バージョン:Windows 10 + Python 3.7.3 + OpenPyXL 2.6.2

OpenPyXLでExcelのシートを削除するコードをご紹介しました。
シートを追加するコードについても記事にしておきます。

Workbook.create_sheetメソッドでExcelにシートを追加できる

OpenPyXLでは、Workbook.create_sheetメソッドでシートを追加できること、引数に何も指定しなければ末尾に、「0」を指定すれば先頭に追加できることは、少し調べるとわかるのですが、いくつか気になる点があります。

[スポンサードリンク]

引数titleに既に存在するシートと同じ名前を指定した場合どうなるのか、シート名に使えない文字が含まれていたらどうなるのか、引数indexに(1枚しかシートがないのに999を指定するなど)インデックス番号として存在しない自然数を指定した場合にどうなるのか、あたりが私は気になりました。

create_sheetで既存シートと同じ名前を指定したとき

既存のシートと同じ名前を指定して、create_sheetメソッドを実行したときの挙動を確認するため、以下のようなスクリプトを用意しました。

import openpyxl

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が作られます。

OpenPyXLでシート追加時の挙動

引数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

[スポンサードリンク]

Home » Python » OpenPyXLの使い方 » OpenPyXLのWorkbook.create_sheetでシートを追加する時の挙動

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

検索


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

.