【发布时间】:2015-09-21 14:35:38
【问题描述】:
我用xlrd处理.xls文件,用openpyxl处理.xlsx文件,效果很好。
然后我收到了一个表面上是 .xls 的文件,所以我尝试xlrd.open_workbook(),然后得到:
XLRDError: Unsupported format, or corrupt file: Expected BOF record; found '<?xml ve'
我查看this 问题,我推测我的文件虽然以扩展名.xls 结尾,但实际上必须是.xlsx。事实上,我可以在文本编辑器中查看它:
<?xml version="1.0" encoding="UTF-8"?>
<Workbook xmlns="urn:schemas-microsoft-com:office:spreadsheet"
xmlns:x="urn:schemas-microsoft-com:office:excel"
xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet"
xmlns:html="http://www.w3.org/TR/REC-html40">
:
:
:
(出于隐私原因,我无法发布整个文件,但我们的分析可能不需要它)。
所以我推测,如果我只是将 (cp) 复制到 .xlsx,我应该可以使用 openpyxl.load_workbook() 打开它,但我得到:
BadZipfile: File is not a zip file
如果它实际上是一个 xls(不太可能)但不能用xlrd 打开,如果它实际上是一个 xlsx 但不能用openpyxl 打开,即使在我将cp 转换为 . xlsx,怎么办?
注意:如果我在 Excel 中打开 .xls,将其另存为 .xlsx,然后使用 openpyxl 重试,它确实可以正常加载,但这个手动步骤并不是我在执行我的程序。
【问题讨论】:
-
你运行的是什么版本的 xlrd?
-
在 excel 生成的文件和原始 xls 之间做一个文件差异?也许差异是你可以改变的东西
-
@Zenadix 谢谢,但是 1) xlrd 应该 打开它但不正是我的问题。 2) 文本编辑器可以打开 .xlsx(您在上面看到的 XML 是在文本编辑器中打开的 .xlsx 的复制粘贴)。使用任何 .xlsx 和任何高级文本编辑器自行尝试。 3) Excel 应该或不应该对文件做什么并不重要。重要的是它确实在 Excel 中打开。因此,它是一个Excel文件。
-
@Pyderman 所以也许 Excel 可以读取您的文件,但这并不意味着您的文件是正确的
xlsx或xls文件。 Excel 也可以读取许多其他格式。 (阅读support.office.com/en-ca/article/…) -
如果这是一个带有 .xls 扩展名的 .xlsx 文件,那么 openpyxl 将拒绝它并说不支持 xls 文件。你用的是什么版本的openpyxl?
标签: python python-2.7 excel-2010 xlrd openpyxl