使用OpenPyXL读取提取的XLSX文件



所以我一直在使用Python 3.2,和OpenPyXL的可迭代工作簿,如这里的"优化阅读器"示例所示。

我的问题出现时,我试图使用此策略读取一个或多个文件,我已经从一个简单的。zip存档(手动和通过python zipfile包)中提取。当我调用.get_highest_column()时,我得到"A",.get_highest_row()得到1,当被要求打印每个单元格的值时,如下所示:

wb = load_workbook(filename = file_name, use_iterators = True)
ws = wb.worksheets[0]    # Only need to read the first sheet, nothing fancy
for row in ws.iter_rows():
    for entry in row:
        print(entry.internal_value)

打印A1、A2、A3、A4、A5、A6和A7中的值,而不管文件实际有多大。文件本身没有任何原因,它将在Excel中完全打开。我很困惑为什么它会这样做,但我认为解压缩的XLSX在从Excel中保存之前格式不同,OpenPyXL无法正确解释它。我甚至将"。xlsx"重命名为"。zip",这样我就可以浏览文件并检查差异,但除了从Excel中保存的文件在"xl"文件夹中还有一个名为"theme"的子文件夹(以前的版本没有)外,我看不出太多,其中包含字体和格式数据。

重要注意:当我打开它并重新保存它与相同的文件名从Excel和然后运行这段代码,它的工作完美 -返回正确的最大行和列值,并正确打印每个单元格值。我试着在打开工作簿后立即通过OpenPyXL保存工作簿,但这会产生相同的错误结果。

基本上,我需要找到一种方法,从.zip文件中正确提取.xlsx文件,以便它可以用OpenPyXL读取。有很多很多文件需要这样处理,所以它必须是外部的Excel,希望尽可能高效。

干杯!

听起来这与从zipfile中提取无关,因为如果手动提取文件也会出现问题。我会尝试将Excel打开并保存的文件存储在zip文件中,看看会发生什么。如果这是有效的,那么显然原来的.xlsx文件生成的方式是问题。我强烈怀疑情况就是这样。

如果这是问题所在,请查看是否可以提取.xlsx文件(它们本身是zipfiles),并将您用Excel重新保存的文件与原始问题文件进行比较。xml不容易比较,因为Excel可以随意重新排列大多数内容,但您可能可以做一些不同的