【发布时间】:2018-01-02 23:25:56
【问题描述】:
我正在尝试使用 Python 2.7 + openpyxl 在工作表中移动单元格区域。似乎是一项简单而基本的任务,结果却几乎是不可能的。这是我希望它在 Excel 中的外观:
为了使任务更容易,我们假设我只需要将范围从给定单元格移动到数据末尾(到最后一行和最后一列)。我的第一个想法很简单:
for i, column in enumerate(columns):
if i >= starting_col:
for j, cell in enumerate(column):
if j >= starting_row:
copy_cell(ws, j+1, i+1, j+1, i+movement)
但是,嘿,如何有效和充分地实现copy_cell?
通过反复试验,我找到了需要复制的 4 件事:
- 价值
- 风格
- 超链接
- 数字格式
它并没有像我预期的那样工作 - 大多数单元格都被正确复制,但超链接似乎不起作用,复制 .style 属性也不起作用(因此我尝试访问 _style 有效)和我最糟糕的出现问题 - 合并单元格范围。如何对付他们?我的copy_cell()现在是这样的:
def copy_cell(ws, from_row, from_col, to_row, to_col):
# first value
ws.cell(row=to_row, column=to_col).value = ws.cell(row=from_row, column=from_col).value
# second formatting
from_style = ws.cell(row=from_row, column=from_col)._style
ws.cell(row=to_row, column=to_col)._style = from_style
ws.cell(row=to_row, column=to_col).hyperlink = ws.cell(row=from_row, column=from_col).hyperlink
ws.cell(row=to_row, column=to_col).number_format = ws.cell(row=from_row, column=from_col).number_format
难道没有更好的通用方法来复制整个单元格范围吗?或者至少是具有所有属性的整个细胞?如果没有,也许有一种有效的方法来移动或复制合并的单元格范围?
【问题讨论】: