前提・実現したいこと
Python初心者で勉強中です。
(実現したいこと)
定型のエクセルデータ(.xlsx)をまとめて読み込みリスト化もの(エクセルファイル(.xlsx))を作成しようとしています。
(前提状況)
・複数の関係者が、各自に配付された定型のエクセルデータに必要時事項を入力、それぞれが所定のシステムツールに
アップロード(エクセル形式(.xlsx))する。
・関係者がアップロードした定型のエクセルデータは、こちら側で、上記システムツールからZIPファイルとして
一括でダウンロードする形で入手できる(まとめてのダウンロードは、ZIP形式のみとなる。エクセル形式(.xlsx)での
ダウンロードは、一応可だが、その場合は1ファイルずつダウンロードする必要がある)。
・一括でダウンロードしたZIPファイルに格納されたエクセルファイルの形式は全て「.xlsx」となっている(確認済み)。
発生している問題・エラーメッセージ
ダウンロードしたZIPファイルに格納されている定型のエクセルデータ(.xlsx)を格納先のフォルダ(プログラムコード中の
「dl_data」フォルダ)に格納の上、以下のコードを実行した所、コンソールに以下のエラーメッセージが表示され、
実行できませんでした。
Traceback (most recent call last):
File "D:\Users\●●.spyder-py3\files\code\make_submissionllist_from_submittedexcelformats.py", line 24, in <module>
wb = load_workbook(pass_obj)
File "C:\ProgramData\Anaconda3\lib\site-packages\openpyxl\reader\excel.py", line 313, in load_workbook
reader = ExcelReader(filename, read_only, keep_vba,
File "C:\ProgramData\Anaconda3\lib\site-packages\openpyxl\reader\excel.py", line 124, in init
self.archive = _validate_archive(fn)
File "C:\ProgramData\Anaconda3\lib\site-packages\openpyxl\reader\excel.py", line 96, in _validate_archive
archive = ZipFile(filename, 'r')
File "C:\ProgramData\Anaconda3\lib\zipfile.py", line 1268, in init
self._RealGetContents()
File "C:\ProgramData\Anaconda3\lib\zipfile.py", line 1335, in _RealGetContents
raise BadZipFile("File is not a zip file")
BadZipFile: File is not a zip file
該当のソースコード
Python
1import pathlib 2from openpyxl import load_workbook 3import datetime 4import os 5os.chdir('C:\Users\●●\.spyder-py3\files') 6 7filepath3 = '.\【フォーマット】修士論文提出状況一覧.xlsx' 8 9wb3 = load_workbook(filename = filepath3) 10ws3 = wb3['●提出状況'] 11 12list_row = 2 13 14path = pathlib.Path('.\dl_data') 15for pass_obj in path.iterdir(): 16 if pass_obj.match('*.xlsx'): 17 wb = load_workbook(pass_obj) 18 ws4 = wb['①基本情報'] 19 ws5 = wb['②ユーザー入力用'] 20 21 ws3.cell(list_row, 4).value = ws4.cell(6, 3).value 22 ws3.cell(list_row, 5).value = ws4.cell(7, 3).value 23 ws3.cell(list_row, 6).value = ws4.cell(8, 3).value 24 ws3.cell(list_row, 7).value = ws4.cell(9, 3).value 25 ws3.cell(list_row, 8).value = ws4.cell(10, 3).value 26 ws3.cell(list_row, 9).value = ws4.cell(11, 3).value 27 ws3.cell(list_row, 10).value = ws4.cell(17, 3).value 28 ws3.cell(list_row, 11).value = ws4.cell(20, 3).value 29 ws3.cell(list_row, 12).value = ws4.cell(21, 3).value 30 ws3.cell(list_row, 13).value = ws4.cell(24, 3).value 31 ws3.cell(list_row, 14).value = ws5.cell(29, 4).value 32 ws3.cell(list_row, 15).value = ws5.cell(30, 4).value 33 ws3.cell(list_row, 16).value = ws5.cell(32, 4).value 34 ws3.cell(list_row, 17).value = ws5.cell(33, 4).value 35 ws3.cell(list_row, 18).value = ws5.cell(44, 4).value 36 ws3.cell(list_row, 19).value = ws5.cell(45, 4).value 37 38 list_row += 1 39 40 41now = datetime.datetime.now() 42wb3.save('.\提出状況一覧' + now.strftime('%Y%m%d_%H%M%S') + '.xlsx')
試したこと
・数あるエクセルデータ(.xlsx)の内、エラーの原因と思しきエクセルデータ(.xlsx)は一部のみで、
ほとんど(9割程度)は、上記コードで問題なく実行できる(リスト化できる)。
・エラーの原因と思しきエクセルデータ(.xlsx)を、改めて自身のPCのデスクトップ上で上書き保存(.xlsx)し
所定のフォルダ(先述の「dl_data」フォルダ)に格納した所、上記コードで問題なく実行できる(リスト化できる)。
補足情報(FW/ツールのバージョンなど)
anacondaで作成した仮想環境のspyderで実行した
Windows 10
Anaconda 2020年7月版
python 4.1.4
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/02/11 09:42