python 您所在的位置:网站首页 合并单元格怎么保留所有数据格式 python

python

2024-07-11 12:15| 来源: 网络整理| 查看: 265

我正在尝试使用 Python 2.7 + openpyxl 在工作表内移动单元格区域。这似乎是一项简单而基本的任务,结果却几乎是不可能的。这是我希望它在 Excel 中的显示方式:

Excel copying pasting

为了简化任务,我们假设我只需要将范围从给定单元格移动到数据末尾(到最后一行和最后一列)。我的第一个想法很简单:

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 个需要复制的东西:

值(value) 风格 超链接 数字格式

它没有像我预期的那样工作 - 大多数单元格都被正确复制但超链接似乎不起作用,复制 .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

难道没有更好的通用方法来复制整个单元格范围吗?或者至少是具有所有属性的整个细胞?如果没有,也许有一种有效的方法来移动或复制合并的单元格范围?

最佳答案

以下方法对我有用,你也可以指定一个不同的工作表:

from copy import copy def copy_cell(source_cell, coord, tgt): tgt[coord].value = source_cell.value if source_cell.has_style: tgt[coord]._style = copy(source_cell._style) return tgt[coord]

您可以使用以下方式调用它:

copy_cell(worksheet['E6'], 'D11', worksheet)

或者如果您需要移动一个单元格,您可以这样做:

def move_cell(source_cell, coord, tgt): tgt[coord].value = source_cell.value if source_cell.has_style: tgt[coord]._style = copy(source_cell._style) del source_cell.parent._cells[(source_cell.row, source_cell.col_idx)] return tgt[coord]

不过,请注意合并单元格必须单独完成。

关于python - 在 openpyxl 中,如何移动或复制带有格式、合并单元格、公式和超链接的单元格范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45347284/



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有