空空夏花 2024-06-21 16:09 采纳率: 25%
浏览 4

openpyxl插入行bug

img


上面是原始数据,使用代码如下,注意红框位置,第9行


sheet.insert_rows(7, 10)

img


红框位置合并单元格没有跟着下去,而是还在第9行,正常插入10行,应该在第19行才对,有什么解决方法吗?

  • 写回答

1条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-06-21 16:09
    关注

    引自免费微信小程序:皆我百晓生

    你的问题是在使用 openpyxl 库插入行时,合并单元格的行为没有按照预期工作。从你提供的描述和图例中,我注意到当你尝试在第7行之后插入10行时,合并单元格的行为似乎并没有按照预期的那样向下移动。这是一个常见的问题,尤其是在处理Excel工作表时涉及到插入或删除行和列的操作。

    为了解决这个问题,你可以尝试以下步骤:

    1. 先取消合并单元格,然后再插入行,之后再重新进行合并。这样做可以确保插入操作不会受到合并单元格的影响。
    2. 使用 sheet._rows 属性来获取所有的行,并在插入新行后手动调整合并单元格的范围。这涉及到更复杂的操作,需要对 openpyxl 的API有更深入的了解。

    以下是一个可能的解决方案的代码示例:

    from openpyxl import Workbook
    from openpyxl.utils import get_column_letter
    
    # 创建Workbook和Sheet假设已经存在,或者你可以用实际文件名替换
    wb = Workbook()
    sheet = wb.active
    
    # 先取消原有的合并单元格(假设是第A列的第9行到第19行合并)
    merged_range = sheet.merged_cells.value  # 获取当前合并单元格范围
    start_col, start_row, end_col, end_row = map(int, merged_range.split(':'))  # 解析合并范围
    sheet.unmerge_cells(merged_range)  # 取消合并单元格
    sheet.append([])  # 在末尾添加一行空白行(可选)以确保插入的位置不会影响到现有的数据布局
    sheet.insert_rows(7, 10)  # 在第7行之后插入10行
    
    # 重新进行合并单元格操作(根据需要)
    new_end_row = start_row + 10  # 新的结束行号(因为插入了新的行)
    new_merged_range = get_column_letter(start_col) + str(start_row) + ':' + get_column_letter(end_col) + str(new_end_row)  # 新的合并范围字符串
    sheet.merge_cells(new_merged_range)  # 重新合并单元格
    

    这个代码示例首先取消了原有的合并单元格,然后在指定位置插入新的行,并重新进行合并操作。请根据你的实际需求调整代码中的列号和行数。这个方法应该能解决你遇到的问题。如果还有其他问题或者需要进一步的帮助,请告诉我!

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 6月21日

悬赏问题

  • ¥15 ansys fluent计算闪退
  • ¥15 有关wireshark抓包的问题
  • ¥15 需要写计算过程,不要写代码,求解答,数据都在图上
  • ¥15 向数据表用newid方式插入GUID问题
  • ¥15 multisim电路设计
  • ¥20 用keil,写代码解决两个问题,用库函数
  • ¥50 ID中开关量采样信号通道、以及程序流程的设计
  • ¥15 U-Mamba/nnunetv2固定随机数种子
  • ¥15 vba使用jmail发送邮件正文里面怎么加图片
  • ¥15 vb6.0如何向数据库中添加自动生成的字段数据。