openpyxl删除合并单元格所在列

wb = openpyxl.load_workbook(u'/Users/edz/Desktop/工作簿1.xlsx')
    ws = wb['Sheet1']
    try:
        # hdl_utils.excel_style(ws=ws, delete_column=(3, 1), )
        # for me in ws.merged_cells:
        #     print(me)
        ws.merged_cells(start_row=1, end_row=3, start_column=3, end_column=3)
        delete_column = (3, 1)
        if delete_column:
            ws.delete_cols(delete_column[0], delete_column[1])
            for merge_col in ws.merged_cells:
                # 暂时只支持删除一列,多余行会有bug,有需要的话可以反复调用来实现
                if delete_column[0] < merge_col.min_col:
                    merge_col.shift(col_shift=-delete_column[1])
                elif delete_column[0] <= merge_col.max_col:
                    if merge_col.min_col < merge_col.max_col:
                        merge_col.shrink(right=delete_column[1])
                    else:
                        ws.unmerge_cells(str(merge_col))
        wb.save(u'/Users/edz/Desktop/工作簿1.xlsx')
    finally:
        wb.close()

 

假如我把excel的第三列合并,然后我又删除了第三列,则新的第三列(原来第四列)变成了合并的,然而我并不想让他合并。。有没有什么好办法?

       我目前是这么写的,可这会有一个问题就是原来第四列每个单元格都有值,这么操作一下就只剩下第一个单元格有值了,因为相当于给他进行了一步合并取消合并的操作,有没有什么好办法能解除这个问题呢,

好吧,我自己解决了,代码如下

    if delete_column:
        for merge_col_ in ws.merged_cells:
            if merge_col_.min_col == merge_col_.max_col == delete_column[0]:
                ws.unmerge_cells(str(merge_col_))
        ws.delete_cols(delete_column[0], delete_column[1])
        for merge_col in ws.merged_cells:
            # 暂时只支持删除一列,多余行会有bug,有需要的话可以反复调用来实现
            if delete_column[0] < merge_col.min_col:
                merge_col.shift(col_shift=-delete_column[1])
            elif delete_column[0] <= merge_col.max_col:
                merge_col.shrink(right=delete_column[1])

就是在删除之前先判断一下,如果有最小列和最大列都等于删除列的合并单元格,就先取消合并在删除