关于#python#的问题:python openpyxl如何获取某一单元格所在的合并单元格的最小列、最大列、最小行、最大行

python openpyxl如何获取某一单元格所在的合并单元格的最小列、最大列、最小行、最大行?

感谢@threenewbee提供的参考,以下个人改造后的代码


# sheet.merged_cells获取sheet中所有合并单元格的范围
merge_list = sheet.merged_cells  
# 获取值为XXX的单元格
for i in range(1,sheet.max_column+1):
    if sheet.cell(1,i).value == 'XXX':
        cell_gm = sheet.cell(1,i)

#遍历所有合并单元格,找出目标单元格在哪一个合并单元格中
for merge_cell in merge_list:
    if cell_gm.coordinate in merge_cell:
        merge_cell_rel = merge_cell
        print('所在合并单元格:'+str(merge_cell_rel))

#获取所在合并单元格的范围
min_row = merge_cell_rel.min_row
max_row = merge_cell_rel.max_row
min_col = merge_cell_rel.min_col
max_col = merge_cell_rel.max_col
print(min_row,max_row,min_col,max_col)

你是要获取这个单元格拆分以前的坐标的范围么

workbook = openpyxl.load_workbook('文件路径/文件名.xlsx')

worksheet = workbook['工作表名']

def get_merged_cell_range(cell):
    for merged_range in worksheet.merged_cells.ranges:
        if cell.coordinate in merged_range:
            return merged_range
    return None

def get_cell_indices(cell):
    min_col, min_row, max_col, max_row = cell.column, cell.row, cell.column, cell.row
    merged_range = get_merged_cell_range(cell)
    if merged_range is not None:
        min_col, min_row, max_col, max_row = merged_range.min_col, merged_range.min_row, merged_range.max_col, merged_range.max_row
    return min_col, max_col, min_row, max_row

cell = worksheet['A1']
min_col, max_col, min_row, max_row = get_cell_indices(cell)
print(f"合并单元格范围:从列{min_col}到列{max_col},从行{min_row}到行{max_row}")

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 这个问题的回答你可以参考下: https://ask.csdn.net/questions/7704497
  • 我还给你找了一篇非常好的博客,你可以看看是否有帮助,链接:python openpyxl 获取合并的单元格列表,筛选解除单元格合并
  • 您还可以看一下 曾贤志老师的【曾贤志】openpyxl处理Excel数据 - 第2季 巩固篇课程中的 1.14 实例应用(筛选成绩总分大于等于300分的记录)小节, 巩固相关知识点
  • 除此之外, 这篇博客: python pip安装openpyxl发生错误中的 问题环境及思考 部分也许能够解决你的问题。
  • 以下回答由chatgpt基于相关博客总结生成:

    要使用openpyxl库来获取某个单元格所在的合并单元格的最小列、最大列、最小行和最大行,可以按照以下步骤进行操作:

    1. 首先,通过openpyxl库的load_workbook()函数加载Excel文件,并选定要操作的工作表。 ```python from openpyxl import load_workbook

    workbook = load_workbook(filename='example.xlsx') worksheet = workbook['Sheet1'] ```

    1. 当前单元格所在的合并单元格范围可以通过worksheet对象的merged_cells属性获取。该属性返回一个MergedCellRange对象,其中包含所有合并单元格的范围。 python merged_ranges = worksheet.merged_cells.ranges

    2. 接下来,我们需要判断某个单元格是否在合并单元格中。可以使用is_merged_range()函数来判断: python def is_merged_range(cell, merged_ranges): for merged_range in merged_ranges: if cell.coordinate in merged_range: return True return False

    3. 现在,我们可以获取某个单元格所在的合并单元格的最小列、最大列、最小行和最大行了。可以使用merged_range.dimensions属性来获取范围的字符串表示形式,然后解析该字符串。 ```python def get_merged_range_dimensions(cell, merged_ranges): for merged_range in merged_ranges: if cell.coordinate in merged_range: return merged_range.dimensions return None

    def get_range_dimensions(range_str): min_col, min_row, max_col, max_row = range_str.split(':') return min_col, max_col, int(min_row), int(max_row) ```

    1. 最后,结合以上的函数,我们可以获取某个单元格所在的合并单元格的最小列、最大列、最小行和最大行了。 python cell = worksheet['A1'] if is_merged_range(cell, merged_ranges): range_str = get_merged_range_dimensions(cell, merged_ranges) min_col, max_col, min_row, max_row = get_range_dimensions(range_str) print(f"Min Column: {min_col}") print(f"Max Column: {max_col}") print(f"Min Row: {min_row}") print(f"Max Row: {max_row}") else: print("Cell is not in a merged range.")

    注意:以上代码是一个简单的示例,可以根据自己的实际需求进行适当地修改和优化。

    参考资料: - openpyxl官方文档:https://openpyxl.readthedocs.io/en/stable/


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^