Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/296.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python openpyxl-在excel文件中添加新行,合并单元格已存在_Python_Excel_Python 3.x_Python 2.7_Openpyxl - Fatal编程技术网

Python openpyxl-在excel文件中添加新行,合并单元格已存在

Python openpyxl-在excel文件中添加新行,合并单元格已存在,python,excel,python-3.x,python-2.7,openpyxl,Python,Excel,Python 3.x,Python 2.7,Openpyxl,因此,我试图在Excel表中添加6行。 我曾经 openpyxl.worksheet.worksheet.worksheet.insert_行(ws,idx=0,amount=6) 帮我完成任务。 这一行与普通excel文件完美配合 但是,当涉及到包含合并单元格的excel文件时。该程序将无法正常工作,就像我附加的图像 有人能给我一些关于如何解决这个问题的想法吗。我用尽了所有的想法,需要一些灵感 非常感谢所有回答我问题的人 假设要在表的顶部添加3行,首先必须向下移动合并的单元格,然后插入行; 为

因此,我试图在Excel表中添加6行。 我曾经 openpyxl.worksheet.worksheet.worksheet.insert_行(ws,idx=0,amount=6) 帮我完成任务。 这一行与普通excel文件完美配合

但是,当涉及到包含合并单元格的excel文件时。该程序将无法正常工作,就像我附加的图像

有人能给我一些关于如何解决这个问题的想法吗。我用尽了所有的想法,需要一些灵感


非常感谢所有回答我问题的人

假设要在表的顶部添加3行,首先必须向下移动合并的单元格,然后插入行; 为此,我们将使用
shift(col\u shift=0,row\u shift=0)
方法

Help on method shift in module openpyxl.worksheet.cell_range:

shift(col_shift=0, row_shift=0) method of openpyxl.worksheet.cell_range.CellRange instance
    Shift the range according to the shift values (*col_shift*, *row_shift*).

    :type col_shift: int
    :param col_shift: number of columns to be moved by, can be negative
    :type row_shift: int
    :param row_shift: number of rows to be moved by, can be negative
    :raise: :class:`ValueError` if any row or column index < 1
因此,最终合并的单元被保留下来

要将6行插入到哪里?在“数据”行之前,还是之后?你能提供一张关于行应该出现在哪里的预期结果的图片吗?我正在尝试在“数据”之前添加6个新的空行,谢谢你的帮助:)据我所知,openpyxl insert_行的行为与手动插入行的行为不同,你可以尝试一些脚本来“下移”单元格,或者一些vba脚本,我以后会尝试一些东西谢谢你给我更新!!我还没有找到任何直接的方法来“移动”手机。请同时看一看。CellRange有一个函数Shift,它允许您将范围移动若干行,但我无法让它将范围分配给具有值的工作表。非常感谢您为我提供解决方案。你的解决方案对我很有效!!你是一个天才:)只有几行代码完美地解决了我的问题。很高兴我能帮上忙:)对不起,如果花了我一段时间,但我很忙,祝你有一个愉快的星期!
merged_cells_range = ws.merged_cells.ranges
for merged_cell in merged_cells_range:
    merged_cell.shift(0,3)
ws.insert_rows(1,3)