You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

openpyxl 3.0.7如何实现单元格字体、背景色等全样式跨单元格复制

openpyxl 3.0.7 单元格全样式复制解决方案

报错根因

openpyxl 3.x版本中单元格的样式属性默认由只读StyleProxy对象包装,直接执行sheet["E1"].font = sheet["D1"].font赋值时会触发TypeError: unhashable type: 'StyleProxy'错误。而直接复制.style属性仅能同步命名样式,无法覆盖单元格自定义的独立样式,因此会出现样式复制不全的问题。

实现代码

可直接调用以下通用函数完成全样式复制:

from openpyxl.styles import Font, Border, Alignment, Protection, PatternFill

def copy_full_cell_style(source_cell, target_cell):
    # 复制字体样式
    target_cell.font = Font(**vars(source_cell.font))
    # 复制填充样式(兼容普通填充、渐变填充等多种类型)
    target_cell.fill = type(source_cell.fill)(**vars(source_cell.fill))
    # 复制边框样式
    target_cell.border = Border(**vars(source_cell.border))
    # 复制对齐规则
    target_cell.alignment = Alignment(**vars(source_cell.alignment))
    # 复制数字格式
    target_cell.number_format = source_cell.number_format
    # 复制单元格保护属性
    target_cell.protection = Protection(**vars(source_cell.protection))

使用示例

将D1单元格的全量样式复制到E1:

copy_full_cell_style(sheet["D1"], sheet["E1"])

注意事项

  • 仅需复制部分样式时,可删除函数内对应不需要的属性赋值行
  • 合并单元格仅需对合并区域的左上角单元格执行样式复制即可生效
  • 若需同步自定义命名样式,可在函数末尾补充target_cell.style = source_cell.style一行

内容的提问来源于stack exchange,提问作者Squary94

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 06:54:00