所以我一直在使用python3.2和OpenPyXL的iterable工作簿as demonstrated here in the "Optimized Reader" example。在
当我试图使用此策略读取从简单的.zip存档文件中提取的一个或多个文件时(手动或通过pythonzipfile包)就会出现问题。当我调用.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打开和保存的文件存储在zipfile中,看看会发生什么。如果这样做有效,那么很明显生成原始
.xlsx
文件的方式就是问题所在。 我强烈怀疑是这样。在如果这就是问题所在,请查看是否可以提取
.xlsx
文件(它们本身就是zipfiles),并将用Excel保存的文件与原始有问题的文件进行比较。xml不容易比较,因为Excel可以随意地重新排列大多数内容,但是您可能可以进行比较相关问题 更多 >
编程相关推荐