【发布时间】:2021-02-08 02:45:22
【问题描述】:
我正在尝试检测 openpyxl.worksheet.worksheet.Worksheet 对象中的所有合并单元格,并且似乎 merged_cells.ranges 不能所有合并单元格,但是某些列中的合并单元格。我的目标是检测合并的单元格,取消合并它们,然后根据列值重新合并某些单元格。在取消合并期间,我用合并单元格左上角的单元格值填充未合并的单元格。
我已经通过在单元格中填充 nan 来解决这个问题,这些单元格应该被识别为列中具有先前值的合并单元格,因为我的所有合并单元格都在同一列中,例如 A18:A19、B18: B19。但是在我更新了我的 xlsx 文件后,事情变得更加棘手。 OpenPyxl 在我之前的 xlsx 中没有在 A、C 和 E 列中找到合并单元格。现在它很难在 B、D 和 F 列中找到合并的单元格。两个xlsx文件格式相同但数据不同。
这是我的 xlsx 的示例: xlsx sample
我的代码读取 xlsx 然后检测并取消合并合并的单元格:
client_info_wb = load_workbook(path_client_info)
sheet_name = client_info_wb.sheetnames[0]
client_info_ws = client_info_wb[sheet_name]
for cell_group in client_info_ws.merged_cells.ranges:
print(cell_group)
min_col, min_row, max_col, max_row = range_boundaries(str(cell_group))
top_left_cell_value = client_info_ws.cell(row=min_row, column=min_col).value
print(top_left_cell_value)
client_info_ws.unmerge_cells(str(cell_group))
for row in client_info_ws.iter_rows(min_col=min_col, min_row=min_row, max_col=max_col, max_row=max_row):
for cell in row:
cell.value = top_left_cell_value
print(cell_group) 的输出:
A48:A49
2021-01-05
C48:C49
XX5614
E48:E49
ID
A46:A47
2021-01-05
C46:C47
XX2134
E46:E47
ID
A44:A45
2021-01-05
C44:C45
XX1234
E44:E45
ID
在我的代码中进行以下操作时,openpyxl merge_cells.ranges 无法检测到合并单元格的那些列中的信息是必要的。那么有人可以帮我解决这个问题吗?有没有人有同样的问题?我花了很长时间试图在我的 xlsx 中查找模式以找出导致问题的原因,但没有运气。
【问题讨论】: