OpenpyxlでExcel操作時に出るエラーの原因と対処法|ファイル・ワークブック操作関連

InvalidFileExceptionの原因と対処法

InvalidFileExceptionとは?

InvalidFileException は、openpyxlで load_workbook() 関数を使ってファイルを読み込む際に、対象ファイルが、有効なExcelファイル(.xlsxなど)でないときに発生する例外です。

エラー例

from openpyxl import load_workbook 

# .txtファイルなどを読み込むとエラーになる 
wb = load_workbook('data.txt')

ReadOnlyWorkbookExceptionの原因と解決方法

ReadOnlyWorkbookExceptionとは?

ReadOnlyWorkbookException は、load_workbook() 関数read_only=True を指定してワークブックを読み込んだ場合に、そのワークブックに対して書き込み処理(セルへの代入など)を行おうとすると発生します。

エラー例

from openpyxl import load_workbook 

# 読み取り専用モードで読み込む 
wb = load_workbook('sample.xlsx', read_only=True) 
ws = wb.active 

# セルに書き込もうとするとエラー発生 
ws['A1'] = 'こんにちは' # ❌ ReadOnlyWorkbookExceptionが発生

SheetTitleExceptionの原因と対処法

SheetTitleExceptionとは?

SheetTitleException は、openpyxl でシートを作成または名前を変更する際に、無効な名前を指定した場合に発生する例外です。
Excelには、シート名に関していくつかの制限があります。

シート名に関するExcelの制限

  • シート名の長さは最大 31文字まで
  • 以下の記号は使用不可: : \ / ? * [ ]
  • シート名は空(ブランク)であってはならない
  • 同一ブック内で重複する名前は使えない

WorkbookAlreadySavedの原因と対処法

WorkbookAlreadySavedとは?

WorkbookAlreadySaved は、Workbook(write_only=True) を使ってワークブックを作成した場合に、一度保存したあとに再度 .save() を実行すると発生する例外です。

❓ なぜWorkbookAlreadySavedエラーが起こるのか?

write_only=True で作成したワークブックは、

「1回だけ保存できるストリーム(流れるデータ)」として処理されるのが特徴です。

つまり、保存した瞬間にデータはすべて書き出されてしまい、
2回目に保存しようとすると中身が空になっていてエラーになるというわけです。

📊 処理のイメージ(図解)👇

+---------+     +---------+     +---------+
| Data 1  | --> | Data 2  | --> | Data 3  | --> (保存)
+---------+     +---------+     +---------+
    ↑             ↑              ↑
 write out     write out      write out
  
  • ✅ 1回目の保存:順番にデータが書き出されて保存完了
  • ❌ 2回目の保存:データはすでに流れていて存在しない → エラー

📌 解決策:
複数回保存したい場合は、Workbookを毎回新しく作り直す必要があります。

対処法

このエラーを防ぐには、以下のいずれかの方法を取りましょう。

  • 複数回保存したい場合は、Workbookを毎回新しく作り直す
  • write_only=False にして通常モードでWorkbookを作成する

公式ドキュメント

openpyxl.utils.exceptions — openpyxl 3.1.3 documentation

コメント

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