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

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

動作検証バージョン: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
wb = openpyxl.load_workbook('C:\\temp\\foo.xlsx')
wb.create_sheet(title='hoge')
wb.create_sheet(title='hoge')
wb.create_sheet(title='hoge')
wb.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メソッドでシートを追加できます。

これに対しOpenPyXLの場合、メソッドを持っているのがWorkbookです。
メソッド名で使われている単語も、「Add」ではなく「Create」です。

結果としては同じシートの追加であっても、行われている処理は大きく違うことを感じられる気がします。

最終更新日時:2019-05-24 04:45

[スポンサードリンク]

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

TrackBack:0

TrackBack URL

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

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

検索


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

.