简体   繁体   English

Openpyxl - 复制带有合并单元格的工作表

[英]Openpyxl - copy worksheet with merged cells

I'm trying to copy worksheets (within the same workbook) that have merged cells and I'm getting an error.我正在尝试复制已合并单元格的工作表(在同一工作簿中),但出现错误。 I have fairly long templates that I copy and then populate for different projects.我有相当长的模板,我可以复制这些模板,然后为不同的项目填充这些模板。 My code works if I unmerge all the cells, but that messes up all the formatting.如果我取消合并所有单元格,我的代码就可以工作,但这会弄乱所有格式。 I could unmerge the cells, copy the sheet, and then remerge them.我可以取消合并单元格,复制工作表,然后重新合并它们。 However, there are a ton of merged cells and I have several different templates that I have to use.但是,有大量合并的单元格,我必须使用几个不同的模板。 I don't have any control over the templates.我对模板没有任何控制权。 I'm using openpyxl 2.5.4.我正在使用 openpyxl 2.5.4。

Here's my code:这是我的代码:

wb = openpyxl.load_workbook(temp)
wb.save(filename = "test.xlsx")
pg = openpyxl.load_workbook("test.xlsx")
ws = pg.copy_worksheet(pg["sheet1"])

Here's the error:这是错误:

Traceback (most recent call last):

  File "<ipython-input-41-a49f299a8c1f>", line 1, in <module>
    ws = pg.copy_worksheet(pg["sheet1"])

  File "C:\ProgramData\Anaconda3\lib\site-packages\openpyxl\workbook\workbook.py", line 394, in copy_worksheet
    cp.copy_worksheet()

  File "C:\ProgramData\Anaconda3\lib\site-packages\openpyxl\worksheet\copier.py", line 43, in copy_worksheet
    self.target.merged_cells = copy(self.source.merged_cells)

  File "C:\ProgramData\Anaconda3\lib\copy.py", line 88, in copy
    return copier(x)

  File "C:\ProgramData\Anaconda3\lib\site-packages\openpyxl\worksheet\cell_range.py", line 456, in __copy__
    n.ranges.append(copy(r))

  File "C:\ProgramData\Anaconda3\lib\copy.py", line 88, in copy
    return copier(x)

  File "C:\ProgramData\Anaconda3\lib\site-packages\openpyxl\worksheet\cell_range.py", line 136, in __copy__
    title=self.title)

TypeError: __init__() got an unexpected keyword argument 'min_col'

I've seen other questions about copying styles for merged cells, but this won't copy the sheet at all.我已经看到有关复制合并单元格样式的其他问题,但这根本不会复制工作表。 Any suggestions?有什么建议?

Thanks.谢谢。

Brandon布兰登

You Can Easily Monkey Patch It:你可以很容易地用猴子修补它:

from openpyxl.worksheet.merge import MergedCellRange

def clone(self):
    return self.__class__(self.ws, self.coord)

MergedCellRange.__copy__ = clone

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM