1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

openpyxlで作ったExcelファイルがエラーになってしまう

Posted at

環境

  • Windows: 10 Education 21H2
  • Excel: バージョン 2209
  • Python: 3.9.6 (pyenv + pipenv)
  • Pipenv: version 2021.11.23
  • openpyxl: 3.0.10

問題

  • スクレイピング結果をopenpyxlでExcelファイルとして出力した
  • そのExcelファイルを開くときに '<ファイル名>' の一部の内容に問題が見つかりました。可能な限り内容を回復しますか?ブックの発行元が信頼できる場合は、[はい] をクリックしてください。 というダイアログが開いてしまう
    • ↓ 修正時のログ
    • 削除されたレコード: /xl/worksheets/sheet1.xml パーツ内の数式
    • 削除されたレコード: /xl/worksheets/sheet4.xml パーツ内の数式
    • 削除されたレコード: /xl/worksheets/sheet6.xml パーツ内の数式
    • 削除されたレコード: /xl/worksheets/sheet14.xml パーツ内の数式
    • 削除されたレコード: /xl/worksheets/sheet16.xml パーツ内の数式
    • 削除されたレコード: /xl/worksheets/sheet20.xml パーツ内の数式

解決の経緯

  • 同じような問題を調べたところ、「シート名に全角括弧が含まれている」や「使えない文字が含まれている」ことが原因になるらしい
    • しかしこれらの問題を消してもエラーは消えない
  • xlsxファイルをzipファイルに変換して、修正前と後を比較すると修正部分がわかるらしい
    • openpyxlとExcel間で文字の表現方法が少し異なるようで、純粋に比較してもわからなかった
  • 原因がわかった方法
    • 問題が発生していたシート内の列を徐々に減らし、問題となっている列を特定
    • その列の文字列を色々と変更してみて実験した

原因

  • セルの先頭にイコール = が付いているとエラー
  • openpyxlはデフォルトではセルを数値として処理しているらしく、= が付いていると数式として認識してしまう?
  • その結果、誤った数式であるのでエラーが出てしまう?

解決法

  • 以下のどちらか (詳細は参考URLをチェック)
    1. セルの先頭の ='= に変換
    2. セルの書式を文字列にする

参考

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?