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

使用openpyxl跨工作簿复制单元格:字体与填充样式迁移失败问题

解决openpyxl复制单元格时字体、填充样式同步问题

嘿,我懂你现在遇到的困扰——用openpyxl把源工作簿的单元格复制到新工作簿时,能成功设置值和部分样式,但字体、填充这些格式就是同步不上去对吧?别着急,咱们来搞定这个问题。

问题根源

openpyxl里,单元格的值和字体、填充、对齐这些样式是分开存储的。如果只是简单赋值单元格的值,或者只处理了基础样式,那些字体、背景填充这类细节属性是不会自动同步的,得我们手动去复制这些独立的样式对象。

完整解决方案代码

下面是修改后的代码,能完整复制单元格的值、字体、填充,还可以按需添加对齐、边框等其他样式:

from openpyxl import load_workbook
from openpyxl import Workbook

# 加载源工作簿
source_wb = load_workbook(filename='testcopy.xlsx')
source_sheet = source_wb.active  # 也可以指定具体工作表,比如source_wb["你的工作表名"]

# 创建目标工作簿
target_wb = Workbook()
target_sheet = target_wb.active

# 遍历源工作表的每一个单元格,复制值和样式
for row in source_sheet.iter_rows(values_only=False):  # 必须设为False,才能获取完整的单元格对象
    for cell in row:
        # 1. 复制单元格值
        target_sheet[cell.coordinate].value = cell.value
        
        # 2. 复制字体样式(包括字体大小、颜色、加粗等)
        target_sheet[cell.coordinate].font = cell.font.copy()
        
        # 3. 复制填充样式(包括背景色、填充图案等)
        target_sheet[cell.coordinate].fill = cell.fill.copy()
        
        # 可选:按需复制其他样式,比如对齐、边框、数字格式
        target_sheet[cell.coordinate].alignment = cell.alignment.copy()
        target_sheet[cell.coordinate].border = cell.border.copy()
        target_sheet[cell.coordinate].number_format = cell.number_format

# 保存处理好的新工作簿
target_wb.save('copied_result.xlsx')

关键细节说明

  • iter_rows(values_only=False):这个参数一定要设为False,这样我们拿到的是完整的Cell对象,而不是单纯的单元格值,才能访问到字体、填充这些属性。
  • 使用.copy()方法:直接赋值cell.font会让目标单元格引用源单元格的字体对象,可能导致后续样式修改出现冲突,用copy()可以创建一个独立的样式对象,避免这类问题。
  • 按需取舍:如果只需要同步字体和填充,把可选的对齐、边框部分删掉就行,灵活调整。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 03:45:47