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

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

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

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

Python 3.x

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

Q&A

2回答

8088閲覧

zipfile.BadZipFile: File is not a zip fileの解決方法

shenzhenmakoto

総合スコア0

openpyxl

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

Python 3.x

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

0グッド

0クリップ

投稿2022/03/08 16:23

編集2023/06/07 23:19

Excel×Python最速術を解きながら進めているのですが、
「zipfile.BadZipFile: File is not a zip file」
のエラーが発生してしまいました。
テキスト通りに進めているものの思うように進まないので皆様のお知恵をお借りできれば嬉しいです。

コード ```import pathlib from socket import gaierror # 標準ライブラリ import openpyxl # 外部ライブラリ pip install openpyxl import csv # 標準ライブラリ lwb = openpyxl.Workbook() #売上一覧表ワークブック lsh = lwb.active #売上一覧表ワークシート list_row = 1 path = pathlib.Path("../data/sales") #相対パス指定 for pass_obj in path.iterdir(): if pass_obj.match("*.xlsx"): wb = openpyxl.load_workbook(pass_obj) for sh in wb: for dt_row in range(9,19): if sh.cell(dt_row, 2).value != None: #より説明的なコード #lsh.cell(row=list_row, column=1).value = \ # sh.cell(row=2, column=7).value #伝票NO lsh.cell(list_row, 1).value = sh.cell(2, 7).value #伝票NO lsh.cell(list_row, 2).value = sh.cell(3, 7).value #日付 lsh.cell(list_row, 3).value = sh.cell(4, 3).value #得意先コード lsh.cell(list_row, 4).value = sh.cell(7, 8).value #担当者コード lsh.cell(list_row, 5).value = sh.cell(dt_row, 1).value #No lsh.cell(list_row, 6).value = sh.cell(dt_row, 2).value #商品コード lsh.cell(list_row, 7).value = sh.cell(dt_row, 3).value #商品名 lsh.cell(list_row, 8).value = sh.cell(dt_row, 4).value #数量 lsh.cell(list_row, 9).value = sh.cell(dt_row, 5).value #単価 lsh.cell(list_row, 10).value = sh.cell(dt_row, 4).value * \ sh.cell(dt_row, 5).value #金額 lsh.cell(list_row, 11).value = sh.cell(dt_row, 7).value #備考 list_row += 1 lwb.save("..\data\sales\salesList.xlsx") """ with open("..\data\sales\salesList.csv","w",encoding="utf_8_sig") as fp: #file pointaの略称 writer = csv.writer(fp, lineterminator="\n") for row in lsh.rows: writer.writerow([col.value for col in row])

下記はターミナルでの反応です

zhenren63@rooter 03 % cd ./data zhenren63@rooter data % ls sales sample.xlsx zhenren63@rooter data % /usr/local/bin/python /Users/zhenren63/Desktop/python_prg/sales_slip2csv.py Traceback (most recent call last): File "/Users/zhenren63/Desktop/python_prg/sales_slip2csv.py", line 13, in <module> wb = openpyxl.load_workbook(pass_obj) File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/openpyxl/reader/excel.py", line 315, in load_workbook reader = ExcelReader(filename, read_only, keep_vba, File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/openpyxl/reader/excel.py", line 124, in __init__ self.archive = _validate_archive(fn) File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/openpyxl/reader/excel.py", line 96, in _validate_archive archive = ZipFile(filename, 'r') File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/zipfile.py", line 1258, in __init__ self._RealGetContents() File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/zipfile.py", line 1325, in _RealGetContents raise BadZipFile("File is not a zip file") zipfile.BadZipFile: File is not a zip file zhenren63@rooter data %

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

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

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

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

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

shenzhenmakoto

2022/03/08 16:28

ファイルを正しいディレクトリ移動したものの同様のエラーが発生しております。 zhenren63@rooter python_prg % ls Sample22030801.xlsx sales_slip2csv.py sample220308.py sample4.py testsample.py cell_scan.py sample2.py sample3.py sample5.py zhenren63@rooter python_prg % /usr/local/bin/python /Users/zhenren63/Desktop/9593/日経BP/excel_python/03/python_prg/sales_sli p2csv.py Traceback (most recent call last): File "/Users/zhenren63/Desktop/9593/日経BP/excel_python/03/python_prg/sales_slip2csv.py", line 13, in <module> wb = openpyxl.load_workbook(pass_obj) File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/openpyxl/reader/excel.py", line 315, in load_workbook reader = ExcelReader(filename, read_only, keep_vba, File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/openpyxl/reader/excel.py", line 124, in __init__ self.archive = _validate_archive(fn) File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/openpyxl/reader/excel.py", line 96, in _validate_archive archive = ZipFile(filename, 'r') File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/zipfile.py", line 1258, in __init__ self._RealGetContents() File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/zipfile.py", line 1325, in _RealGetContents raise BadZipFile("File is not a zip file") zipfile.BadZipFile: File is not a zip file zhenren63@rooter python_prg %
meg_

2022/03/08 17:08

エラーの出ているエクセルファイルはExcelで問題なく開くことが出来ますか?
y_waiwai

2022/03/08 22:47

このままではコードが読みづらいので、質問を編集し、</>(コードの挿入)ボタンを押し、出てくる’’’の枠の中にコードを貼り付けてください
shenzhenmakoto

2022/03/09 02:13

y_waiwai様 早速編輯致しました。
shenzhenmakoto

2022/03/09 02:14

meg_様 エクセルファイルは開くことできます
guest

回答2

0

engine='openpyxl'パラメータない場合は問題がないんでしょうか?

投稿2023/06/07 14:19

Tiger

総合スコア6

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

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

0

普通に考えれば、"拡張子がxlsxだけどxlsxファイルじゃないファイルが紛れ込んでいる"と判断するのが自然でしょう。

python

1 wb = openpyxl.load_workbook(pass_obj)

python

1 try: 2 wb = openpyxl.load_workbook(pass_obj) 3 except Exception: 4 print(pass_obj, 'は読み込めません') 5 raise # または continue

とでもして、エラーが起きる行でエラーをトラップして、問題があるファイルを把握しましょう。

参考
https://docs.python.org/ja/3/tutorial/errors.html#handling-exceptions

投稿2022/03/09 05:58

quickquip

総合スコア11003

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

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

shenzhenmakoto

2022/03/09 07:32

アドバイスいただきありがとうございます。 追加してみましたが、今度は該当するファイルがない、と表示されています。 Traceback (most recent call last): File "/Users/zhenren63/Desktop/9593/日経BP/excel_python/03/python_prg/sales_slip2csv.py", line 11, in <module> for pass_obj in path.iterdir(): File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/pathlib.py", line 1015, in iterdir for name in self._accessor.listdir(self): FileNotFoundError: [Errno 2] No such file or directory: '../data/sales' zhenren63@rooter 03 %
quickquip

2022/03/09 07:47

カレントディレクトリが間違っている(意図しているところじゃない)だけかと
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.53%

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

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

質問する

関連した質問