如何在openpyxl中将工作表对象添加到现有xlsx文档的新工作表
将openpyxl读取的工作表完整复制到现有Excel文档(保留格式)
你之前的实现只复制了单元格的值,导致背景色、合并单元格等格式丢失。要完整迁移工作表,必须同时复制格式相关的所有属性,以下是可行的代码方案:
完整复制工作表的工具函数
from openpyxl import load_workbook from openpyxl.utils import get_column_letter def copy_worksheet(source_ws, target_wb, new_sheet_name): # 在目标工作簿创建新工作表 target_ws = target_wb.create_sheet(title=new_sheet_name) # 复制每个单元格的值与样式(背景色、字体、边框等) for row in source_ws.iter_rows(): for cell in row: target_ws[cell.coordinate].value = cell.value target_ws[cell.coordinate]._style = cell._style # 复制合并单元格配置 for merged_range in source_ws.merged_cells.ranges: target_ws.merge_cells(str(merged_range)) # 复制行高 for row_num in range(1, source_ws.max_row + 1): target_ws.row_dimensions[row_num].height = source_ws.row_dimensions[row_num].height # 复制列宽 for col_num in range(1, source_ws.max_column + 1): col_letter = get_column_letter(col_num) target_ws.column_dimensions[col_letter].width = source_ws.column_dimensions[col_letter].width return target_ws
实际使用示例
结合你已读取的sheet_2对象,将其复制到现有Excel文档:
# 读取你要追加的现有工作簿 existing_wb = load_workbook("你的现有文档路径.xlsx") # 执行工作表复制,指定新工作表名称 copy_worksheet(sheet_2, existing_wb, "新工作表") # 保存修改后的工作簿 existing_wb.save("更新后的文档路径.xlsx")
关键说明
- 你之前用
for row in old_ws.values+ws2.append(row)的方式,仅提取了单元格的原始值,完全没有处理格式相关属性,这是格式丢失的核心原因。 - 上述工具函数会完整复制源工作表的单元格值、样式、合并单元格、行高、列宽,确保格式与源表一致。
内容的提问来源于stack exchange,提问作者Allen.L
相关产品推荐
相关产品推荐

