使用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
相关产品推荐
相关产品推荐

