Python 2.7 如何检查xlsx文件是否有效?

Python 2.7 如何检查xlsx文件是否有效?,python-2.7,excel-2013,openpyxl,Python 2.7,Excel 2013,Openpyxl,我正在使用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/l

我正在使用
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
回溯(最近一次呼叫最后一次):
文件“/home/ute/OM/Python_Scripts/preparePlanFileFromExcelReport.py”,第13行,在
wb=加载\u工作簿(不同的报表文件)
文件“/usr/local/lib/python2.7/dist packages/openpyxl/reader/excel.py”,第151行,在load_工作簿中
存档=\u验证\u存档(文件名)
文件“/usr/local/lib/python2.7/dist-packages/openpyxl/reader/excel.py”,第118行,在归档文件中
存档=ZipFile(f,'r',压缩)
文件“/usr/lib/python2.7/zipfile.py”,第714行,在__
self.\u GetContents()
文件“/usr/lib/python2.7/zipfile.py”,第748行,在_GetContents中
self.\u RealGetContents()
文件“/usr/lib/python2.7/zipfile.py”,第763行,在_RealGetContents中
raise BadZipfile,“文件不是zip文件”
zipfile.BadZipfile:文件不是zip文件
经过一些搜索,我发现如果您的文件不是有效的xlsx文件,则会弹出此错误


我可以使用MS Excel 2013正常打开该文件,但如何判断该文件是否为有效的xlsx文件?

如果它确实不是zip文件,则它实际上不是Excel文件,因为这是规范的一部分。但是,Excel会将一些实际上不是Excel文件的文件视为是Excel文件。例如,一些库使用它来导出Excel可以读取的特殊类型的HTML


如果您认为该文件是正确的,并且问题出在openpyxl上,那么请提交一份错误报告和一个示例文件。

您的问题有点自我回答:您的错误消息已经告诉您:(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文件,但只是命名错误,那么您可以使用来读取该文件(它同时处理.xls和.xlsx)

如果希望能够读取Excel可以读取的任何文件(无论文件扩展名如何),唯一现实的选择是让Excel自己打开该文件,这可以使用COM接口(、等)来完成