質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
86.02%
openpyxl

openpyxlは、Excel2007以降のファイル(xlsx/xlsm/xltx/xltm)を読み書きするためのPythonライブラリです。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

OpenpyXLで警告文が出る理由を特定したい( UserWarning: Cannot parse header or footer so it will be ignored)

taku-s
taku-s

総合スコア11

openpyxl

openpyxlは、Excel2007以降のファイル(xlsx/xlsm/xltx/xltm)を読み書きするためのPythonライブラリです。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

1回答

0グッド

0クリップ

571閲覧

投稿2022/12/06 12:08

前提

PythonのOpenPyXlモジュールを使用します。
用意されているエクセルのフォーマットをコピーし、コピーしたエクセルフォーマットに数値や文字列をプログラムで書き込み保存をするプログラムを書いています。

実現したいこと

プログラムを実行すると、openpyxl.load_workbook関数を実行する時点で以下の警告文が発生されます。この警告文は、エクセルのどこの設定による警告なのかを把握したいです。
※どこの設定によりエラーが発生するのかわかれば、エクセルのフォーマットを修正してエラー警告文が出ないようにできると考えた為。

UserWarning: Cannot parse header or footer so it will be ignored warn("""Cannot parse header or footer so it will be ignored""")

該当のソースコード(抜粋)

Python

1import os 2import openpyxl 3import shutil 4 5path = os.getcwd() 6inputfile = 'read.xlsx' 7 8i = 0 9while i < 3: 10 file_name = "file_" + str(i) + ".xlsx" 11 shutil.copy(inputfile, "output\\" + file_name) 12 os.chdir(path + "\\output") 13 workbook = openpyxl.load_workbook(file_name, data_only=True) 14 worksheet = workbook["test"] 15 worksheet.cell(row=1, column=1).value = "test" 16 workbook.save(file_name) 17 i += 1

試したこと

openpyxl.load_workbook関数のオプションを以下で試してみました。

  • read_only=True ※読み込み専用になりエラー発生
  • data_only=True ※警告文は変わらず
  • keep_vba=True ※警告文は変わらず
  • keep_links=True  ※警告文は変わらず

以下サイトより
https://gammasoft.jp/blog/openpyxl-load-custom-format/
openpyxlのバージョンを2.6.0にすることで警告だった箇所がKeyErrorとなり手がかりが掴めそうなのでバージョンをおとして実行してみました。
→KeyError: 56となりましたが、56がなにを意図しているのかが不明でした。
以下ドキュメントに56の記載がありませんでした。
https://openpyxl.readthedocs.io/en/stable/_modules/openpyxl/styles/numbers.html
また以下のエラーとなりましたが、このエラーから手がかりが掴めませんでした。。。

workbook = openpyxl.load_workbook(file_name, data_only=True) File "C:\Users\xxx\Anaconda3\envs\xxx\lib\site-packages\openpyxl\reader\excel.py", line 312, in load_workbook reader.read() File "C:\Users\xxx\Anaconda3\envs\xxx\lib\site-packages\openpyxl\reader\excel.py", line 273, in read apply_stylesheet(self.archive, self.wb) File "C:\Users\xxx\Anaconda3\envs\xxx\lib\site-packages\openpyxl\styles\stylesheet.py", line 189, in apply_stylesheet stylesheet = Stylesheet.from_tree(node) File "C:\Users\xxx\Anaconda3\envs\xxx\lib\site-packages\openpyxl\styles\stylesheet.py", line 103, in from_tree return super(Stylesheet, cls).from_tree(node) File "C:\Users\xxx\Anaconda3\envs\xxx\lib\site-packages\openpyxl\descriptors\serialisable.py", line 104, in from_tree return cls(**attrib) File "C:\Users\xxx\Anaconda3\envs\xxx\lib\site-packages\openpyxl\styles\stylesheet.py", line 93, in __init__ self._normalise_numbers() File "C:\Users\xxx\Anaconda3\envs\xxx\lib\site-packages\openpyxl\styles\stylesheet.py", line 166, in _normalise_numbers fmt = BUILTIN_FORMATS[style.numFmtId] KeyError: 56

https://stackoverflow.com/questions/54106638/userwarning-cannot-parse-header-or-footer-so-it-will-be-ignored-on-loading-xl
上記サイトを確認し、エクセルフォーマットより、
ファイル->情報->問題のチェック->ドキュメントの検査->ヘッダーとフッターを削除しました。
しかし、警告エラーは相変わらず発生してしまいました。

補足情報(FW/ツールのバージョンなど)

openpyxl:2.6.1以上
office 2019
python 3.10.6

以下のような質問にはグッドを送りましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

グッドが多くついた質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

下記のような質問は推奨されていません。

  • 間違っている
  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

回答1

0

自己解決

グラフ描写が原因でした。
デバッグとブレイクポイントを使い、警告文を吐き出す箇所を特定したところグラフに関する箇所でした。
グラフをダブルクリックして設定を確認したところ、全て「自動」に変更されていました。

openpyxlはグラフと画像に関しては対応ができないということも判明しました。

投稿2022/12/08 10:23

taku-s

総合スコア11

良いと思った回答にはグッドを送りましょう。
グッドが多くついた回答ほどページの上位に表示されるので、他の人が素晴らしい回答を見つけやすくなります。

下記のような回答は推奨されていません。

  • 間違っている回答
  • 質問の回答になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

このような回答には修正を依頼しましょう。

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
86.02%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

openpyxl

openpyxlは、Excel2007以降のファイル(xlsx/xlsm/xltx/xltm)を読み書きするためのPythonライブラリです。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。