识别 Excel 文件中的组和分组行
Identify groups and grouped rows in Excel file
我需要在 Excel 文件和这些组内的行中识别不同的组(为了更准确,我需要获取主行的第一个单元格的值,在该单元格下分组了多行)。
下面是文件结构的示例(我已将组最小化,但当我收到这些文件时,它们会展开):
我知道如何使用 openpyxl
或 xlwt
创建新组,我熟悉 openpyxl
和 xlrd
,但我能够找到任何东西在API解决这个需求。
所以,是否可以使用 Python?如果可以,我应该使用 openpyxl
或 xlrd
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
.
我需要在 Excel 文件和这些组内的行中识别不同的组(为了更准确,我需要获取主行的第一个单元格的值,在该单元格下分组了多行)。
下面是文件结构的示例(我已将组最小化,但当我收到这些文件时,它们会展开):
我知道如何使用 openpyxl
或 xlwt
创建新组,我熟悉 openpyxl
和 xlrd
,但我能够找到任何东西在API解决这个需求。
所以,是否可以使用 Python?如果可以,我应该使用 openpyxl
或 xlrd
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
.