Openpyxl - 如何在已存在合并单元格的Excel文件中添加新行

10

Before

After

我试着往Excel表格中添加6行,并使用openpyxl.worksheet.worksheet.Worksheet.insert_rows(ws,idx=0,amount=6)命令完成此任务。这个命令可以在常规的Excel文件中完美地运行。

然而,当涉及到包含合并单元格的Excel文件时,程序就会出现问题,就像我附上的图片一样。

请问有没有人能给我一些解决方法?我已经想尽了办法,但是需要一些启示。

谢谢任何回答我的问题的人!!


你想在哪里插入这6行?是在“data data data data”行之前还是之后?你能提供期望结果的图片吗? - HaR
我正在尝试在“数据数据数据”之前添加6行新的空行,谢谢你的帮助:) - Zou Dino
请先看一下这里。CellRange有一个Shift函数,应该可以让您将范围向下移动若干行,但我无法使其将值分配给Sheet。 - HaR
你有什么解决方案吗?我还是想不出解决办法。 - Zou Dino
很遗憾,说实话我现在没有时间,我会在这个周末研究一下。 - HaR
显示剩余4条评论
1个回答

13
假设您想在表格顶部添加3行数据,您需要先移动合并单元格,然后再插入行; 为此,我们将使用 shift(col_shift=0, row_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

您要插入的行数必须与您要移动的行数相符; 因此,对于您的示例,您只需要:
merged_cells_range = ws.merged_cells.ranges
for merged_cell in merged_cells_range:
    merged_cell.shift(0,3)
ws.insert_rows(1,3)

最终,合并的单元格将得以保留。 enter image description here

2
非常感谢您提供的解决方案。您的解决方案非常有效!您真是个天才 :) 只需要几行代码就完美地解决了我的问题。 - Zou Dino
很高兴能帮到你 :) 抱歉让你等了一会儿,我有点忙。祝你有愉快的一周! - HaR

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接