我使用openpyxl
来处理Excel工作表。它工作正常,但后来我遇到了一个文件,它给我以下错误:
Traceback (most recent call last):
File "/home/ute/OM/Python_Scripts/preparePlanFileFromExcelReport.py", line 13, in <module>
wb = load_workbook(differenceReportFile)
File "/usr/local/lib/python2.7/dist-packages/openpyxl/reader/excel.py", line 151, in load_workbook
archive = _validate_archive(filename)
File "/usr/local/lib/python2.7/dist-packages/openpyxl/reader/excel.py", line 118, in _validate_archive
archive = ZipFile(f, 'r', ZIP_DEFLATED)
File "/usr/lib/python2.7/zipfile.py", line 714, in __init__
self._GetContents()
File "/usr/lib/python2.7/zipfile.py", line 748, in _GetContents
self._RealGetContents()
File "/usr/lib/python2.7/zipfile.py", line 763, in _RealGetContents
raise BadZipfile, "File is not a zip file"
zipfile.BadZipfile: File is not a zip file
经过一些搜索后,如果您的文件不是有效的 xlsx 文件,我发现此错误会弹出。
我可以使用MS Excel 2013正常打开文件,但是如何判断该文件是否是有效的xlsx文件?
答案 0 :(得分:1)
如果它确实不是zip文件,那么它实际上不是Excel文件,因为这是规范的一部分。但是,Excel会将一些实际上不是Excel文件的文件视为原样。例如,有些库使用它来导出Excel可以读取的特殊类型的HTML。
如果您认为该文件正确且问题与openpyxl有关,请提交错误报告和示例文件。
答案 1 :(得分:0)
您的问题是一种自我回答:您的错误消息已经告诉您(1)OpenPyXL无法打开文件,(2)原因是该文件不是有效的zip文件(因此不是有效的.xlsx文件)。
如果出于某种原因,即使文件无效,您仍需要程序继续,您可以使用通常的try..except
机制:
import openpyxl
from zipfile import BadZipfile
try:
wb = load_workbook(differenceReportFile)
except BadZipfile:
print 'Invalid zip file.'
# continue processing here
如果你想处理.xlsx文件真正一个.xls文件的可能性,但只是错误命名,那么你可以使用xlrd来读取文件(它处理.xls和.xlsx)。
如果您希望能够读取Excel可以读取的任何文件(无论文件扩展名如何),您唯一可行的选择是让Excel本身打开文件,您可以使用COM界面({{3 }},PyWin32,pywinauto等。)