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

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

新規登録して質問してみよう
ただいま回答率
85.48%
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

解決済

1回答

3769閲覧

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

taku-s

総合スコア12

openpyxl

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

Python 3.x

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

Python

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

0グッド

0クリップ

投稿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

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

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

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

投稿2022/12/08 10:23

taku-s

総合スコア12

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問