使用OpenPyXL读取提取的XLSX文件

时间:2013-01-03 00:47:08

标签: python python-3.x xlsx zipfile openpyxl

所以我一直在使用Python 3.2和OpenPyXL的可迭代工作簿as demonstrated here in the "Optimized Reader" example

我的问题在我尝试使用此策略读取我从简单的.zip存档中提取的文件时出现(手动和通过python zipfile包< / em>的)。当我打电话给.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外部,并且希望尽可能高效。

干杯!

1 个答案:

答案 0 :(得分:0)

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

如果这是问题,请查看您是否可以提取.xlsx文件(它们本身就是zip文件),并将您重新保存的文件与最初存在问题的文件进行比较。 xml不易比较,因为Excel可以随意重新排列大多数事物,但你可能能够做差异。