不吃天鹅肉 2021-06-03 14:24 采纳率: 100%
浏览 219
已采纳

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的第三列合并,然后我又删除了第三列,则新的第三列(原来第四列)变成了合并的,然而我并不想让他合并。。有没有什么好办法?

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

  • 写回答

1条回答 默认 最新

  • 不吃天鹅肉 2021-06-03 14:55
    关注

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

        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])

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

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥40 复杂的限制性的商函数处理
  • ¥15 程序不包含适用于入口点的静态Main方法
  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码