使用 OpenPyXL 读取提取的 XLSX 文件

Posted

技术标签:

【中文标题】使用 OpenPyXL 读取提取的 XLSX 文件【英文标题】:Reading extracted XLSX files with OpenPyXL 【发布时间】:2013-01-03 00:47:08 【问题描述】:

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

我的问题出现在我尝试使用此策略读取从简单 .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 " 以前版本没有的文件夹,带有字体和格式数据。

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

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

干杯!

【问题讨论】:

原始压缩的.xlsx 文件来自哪里?有机会举个例子吗? 【参考方案1】:

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

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

【讨论】:

以上是关于使用 OpenPyXL 读取提取的 XLSX 文件的主要内容,如果未能解决你的问题,请参考以下文章

在 python 3.6 中提取 xlsx 工作簿文件元数据/属性

使用openpyxl读取excel

有没有办法使用 openpyxl 读取没有工作簿的 Excel 文件?

Python:openpyxl这一篇就够了

excel数据处理一:巧妙使用openpyxl提取筛选数据

python操作excel----openpyxl模块