识别 Excel 文件中的组和分组行

Identify groups and grouped rows in Excel file

我需要在 Excel 文件和这些组内的行中识别不同的组(为了更准确,我需要获取主行的第一个单元格的值,在该单元格下分组了多行)。

下面是文件结构的示例(我已将组最小化,但当我收到这些文件时,它们会展开):

我知道如何使用 openpyxlxlwt 创建新组,我熟悉 openpyxlxlrd,但我能够找到任何东西在API解决这个需求。

所以,是否可以使用 Python?如果可以,我应该使用 openpyxlxlrd API 的哪一部分?

您应该可以使用作品sheet 的 row_dimensions 来完成此操作。 returns 一个像 dict 一样可访问的对象,其中键是 sheet 的行号。 outline_level 对每个分组深度都有一个非零值,或者 0 如果该行不属于一个组。

因此,如果您有一个 sheet,其中第 2 行和第 3 行是一组,第 5 行和第 6 行是另一组,则遍历 row_dimensions 将如下所示:

>>> for row in range(ws.min_row, ws.max_row + 1):
...     print(f"row {row} is in group {ws.row_dimensions[row].outline_level}")
...
row 1 is in group 0
row 2 is in group 1
row 3 is in group 1
row 4 is in group 0
row 5 is in group 1
row 6 is in group 1

我应该指出访问这些信息有些奇怪。我原来的解决方案是这样的:

>>> for row_num, row_data in ws.row_dimensions.items():
...     print(f"row {row_num} is group {row_data.outline_level}")
...
row 2 is group 1
row 3 is group 1
row 4 is group 0
row 5 is group 1
row 6 is group 1

请注意第 1 行缺失。它不是 row_dimensions 的一部分,直到我手动访问它作为 row_dimensions[1] 然后它出现了。我不知道如何解释,但第一种方法可能更好,因为它专门从第一行迭代到最后一行。

相同的过程适用于通过 column_dimensions 的列组,除了它必须使用列字母作为键,例如ws.column_dimensions["A"].current_level.