[エラーの原因と対処法]Worksheet xxx does not exist[openpyxl]

スポンサードリンク
アイキャッチ Python
過去の自分
過去の自分

openpyxlで作ったシステムを動かしたら、
「KeyError: ‘Worksheet xxx does not exist.’」というエラーが出た…。
これはいったいどうしたらいいの?

今の自分
今の自分

ワークシートに関するエラーですね!
原因と対処法を解説いたします!

今回は、「KeyError: ‘Worksheet xxx does not exist.’」の原因と対処法を
Python歴3年の私が、できるだけわかりやすく解説し、解決に導きます。

スポンサードリンク

「Worksheet xxx does not exist」エラーの原因

代表的な原因は以下の3つです。

  • 指定したシート名が間違っている
  • 削除したシートを指定している
  • 変更前のシート名を指定している

まず、この「Worksheet xxx does not exist」はどのようなエラーなのでしょうか。

スポンサードリンク

「Worksheet xxx does not exist」はどんなエラー?

「Worksheet xxx does not exist」は、
直訳すると、「ワークシート xxx は存在しません」となります。

要は、指定したワークシートが見つかりませんでしたということですね。

では、ワークシートが見つからない原因を見ていきましょう。

スポンサードリンク

「Worksheet xxx does not exist」の原因と対処法

冒頭でも触れましたが、代表的な原因は以下の3つです。

  • 指定したシート名が間違っている
  • 削除したシートを指定している
  • 変更前のシート名を指定している

1つ1つ解説いたします。

指定したシート名が間違っている

一番多い原因はコレです。

以下の構文を見てください。

import openpyxl

wb = openpyxl.load_workbook('input.xlsx')
ws = wb['Sheet2']

wb.save('input.xlsx')

▼input.xlsx

実行結果:「KeyError: ‘Worksheet Sheet2 does not exist.’」

実際のワークシートは「Sheet1」しか無いにもかかわらず、構文では「Sheet2」を指定してしまっています。

「Sheet2」は存在しないため、今回のようなエラーとなります。

よくある指定間違いの例

  • 小文字・大文字の違い(Sheet1 / sheet1 / SHEET1)
  • スペースやアンダーバーあるなし(Sheet1 / Sheet 1 / Sheet_1)

指定したシート名が間違っている場合の対処法

指定のシート名が間違っている場合の対処法は下記の3つです。

  1. 指定のシート名(構文)を変更する
  2. 実際のシート名を変更する
  3. シート番号で指定する

1と2は、「実際のシート名」「構文指定のシート名」一致させるということです。

3はシート名ではなく、「シート番号」で指定することで、エラーを回避することができます。

#シート名で指定
ws = wb['Sheet2']

#シート番号で指定
ws = wb.worksheets[0]

上記構文では、「0番目」つまり、一番左端のシートを指定したことになります。

ただし、複数のシートの順番が入れ替わっていた場合、意図しないシートを操作してしまう場合がありますのでご注意ください。

シート指定の方法は、下記記事で解説しております。

削除したシートを指定している

次は、削除したシートを指定しているパターンです。

import openpyxl

wb = openpyxl.load_workbook('input.xlsx')

ws = wb.remove(wb['Sheet1'])

ws = wb['Sheet1']

wb.save('input.xlsx')
実行結果:KeyError: 'Worksheet Sheet1 does not exist.'

5行目で「Sheet1」を削除したにもかかわらず、7行目で「Sheet1」を指定しているため、エラーが起こります。

削除したシートを指定している場合の対処法

削除したシートを指定している場合の対処法は以下の2つです。

  • 削除をやめる
  • シート名での指定をやめる

【削除をやめる】
軽量化や秘密保持などの理由で、シートを削除するのはよくあることです。
削除をやめることで、これらの問題が再発する可能性があるため、自己責任で行ってください。

【シート名での指定をやめる】
シート名ではなく、シート番号で指定をすることができます。
前項で解説済ですので、詳細は割愛させていただきます。

変更前のシート名を指定している

次は、名前を変更した後のシートを、変更前のシート名で指定しているパターンです。

import openpyxl

wb = openpyxl.load_workbook('input.xlsx')

ws = wb['Sheet1']

ws.title = '変更後シート'

ws = wb['Sheet1']

wb.save('input.xlsx')
実行結果:KeyError: 'Worksheet Sheet1 does not exist.'

7行目で「Sheet1」の名前を「変更後シート」に変更したにもかかわらず、9行目で「Sheet1」を指定しているため、エラーが起こります。

変更前のシート名を指定している場合の対処法

変更前のシート名を指定している場合の対処法は以下の2つです。

  • 変更後のシート名で指定する
  • シート番号で指定する

【変更後のシート名で指定する】
変更後のシート名は、構文を読み返して探す他ありません。
構文作成時に、できるだけ「#シート名変更」などのコメントを入れるようにしましょう。

【シート名での指定をやめる】
シート名ではなく、シート番号で指定をすることができます。
前項で解説済ですので、詳細は割愛させていただきます。

スポンサードリンク

最後に

「KeyError: ‘Worksheet xxx does not exist.’」の原因と対処法を解説いたしました。

このエラーが出たら、まずワークシートの名前をチェックしてみてください。

当ブログでは、Pythonに関する情報を配信しております。
この記事がわかりやすいと感じた方は、ぜひ他の記事も読んでいってください。

最後までお読みいただき、ありがとうございました。がんばってください!

タイトルとURLをコピーしました