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

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

新規登録して質問してみよう
ただいま回答率
85.46%
Python 3.x

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

Q&A

解決済

1回答

4117閲覧

openpyxl のKeyErrorの原因と対処方法を教えてください

matsutai

総合スコア53

Python 3.x

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

0グッド

0クリップ

投稿2021/07/14 11:03

編集2021/07/14 13:40

openpyxl で、
wb = load_workbook('ファイル名.xlsx') としてファイルを読み込もうとしましたが、

keyError が発生します。中身を確認すると、

raise KeyError('There in no item named %r in the archive'% name)
KeyErro:"There is no item named'[Content_Types].xml'in the archive"

と出ますが、読み込むにはどうすればよいでしょうか?

ちなみに、一度上記のエクセルファイルを開いて、上書き保存してから、上記の読み込みをすれば
エラーは出ず読めるようになります。
一度保存をすることで、属性が設定されるような感じでしょうか?
分かる方がいらしたら教えたいただきたいです。
よろしくお願いします。

追記
「iQUAVIS」という市販のツールの中で作った表を、エクスポート機能で出力したものが .xlsx 拡張子で開けるようになります。python処理の目的は、出力ファイルの書式等の設定をpythonで後処理して、使えるようにしようとするものです。出力ファイルをそのまま読み込もうとすると上記のエラーになります。

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

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

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

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

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

TakaiY

2021/07/14 12:19

もとのxlsxファイルはどのように作成されたものなのでしょうか? xlsxファイルは実は内部にいろいろなファイルを含んていて、その少なくとも一つが足りないというエラーです。 なので、もとのxlsxファイルが不正なものの可能性があります。 たとえば、 xls ファイルの拡張子を xlsxに書き換えただけのものなど。
matsutai

2021/07/14 12:49

ご指摘ありがとうございます。情報が不足しておりました。 「iQUAVIS」という市販のツールの中で作った表を、エクスポート機能で出力したものが .xlsx 拡張子で開けるようになります。python処理の目的は、出力ファイルの書式等の設定をpythonで後処理して、使えるようにしようとするものです。出力ファイルをそのまま読み込もうとすると上記のエラーになります。
TakaiY

2021/07/14 13:15 編集

その情報は、質問を編集して質問の中に入れましょう。 Excelで作ったのでないとすれば、正しいxlsxフォーマットのものではないということなのだと思います。 それ以上のことはわからないので残念ですが回答できません。 だだ、Excelで読むことができるようなので、じつは odsなどの類似のフォーマットなのかもしれません。
guest

回答1

0

ベストアンサー

Excelファイル操作をプログラミングする前に、まずはxlsxをzipに変えて内部構造を見てみよう
あたりに解説がありますが、.xlsxファイルはzip形式の圧縮ファイルであり、中身はxml形式のデータです。

raise KeyError('There in no item named %r in the archive'% name)
KeyErro:"There is no item named'[Content_Types].xml'in the archive"

が出るということは、対象のファイルはzip形式の圧縮ファイルだけれども、現時点のopenpyxlが期待するなんらかのデータが欠けているということを意味しています。

  • 一度上記のエクセルファイルを開いて、上書き保存してから、上記の読み込みをすれば

エラーは出ず読めるようになります。

ということは、現時点のMicrosoft Excelはそのフォーマットのファイルを読めるけれども、その形式で書き出すことはしないということを意味しています。

これ以上のことは質問の内容からは読み取れませんが、可能性として以下の二通りが考えられます。

可能性1 対象のファイルは.xlsx形式の初期の頃にMicrosoft Excelで採用されていた形式だが現在では原則として使われず、読み込みだけはできるようになっている。

可能性2 対象のファイルは、他のアプリケーションとのファイル交換あるいは互換性のためにMicrosoft Excelで採用されていた形式だが現在では原則として使われず、読み込みだけはできるようになっている。

可能性1の場合は、将来のopenpyxlがサポートする可能性はほぼないでしょう。
可能性2の場合は、将来のopenpyxlがサポートする可能性はあるかもしれません。

現時点での対応策

方法1 一度上記のエクセルファイルを開いて、上書き保存してから読み込む
方法2 将来のopenpyxlがサポートするのを待つ

ぐらいしか思いつきません。

投稿2021/07/14 13:06

ppaul

総合スコア24666

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問