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

时间:2016-01-19 13:43:32

标签: 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/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文件?

2 个答案:

答案 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 }},PyWin32pywinauto等。)