如何用openpyxl调整Excel列顺序以匹配另一Excel的列排列
使用openpyxl调整Excel列顺序并保留格式
实现逻辑与代码
要完成Excel2列顺序与Excel1对齐且保留原格式的需求,可按以下步骤实现:
1. 准备工作
加载两个Excel文件,获取目标列顺序(你已完成的代码)。
2. 核心实现
from openpyxl import load_workbook # 加载工作簿 wb1 = load_workbook("excel1.xlsx") wb2 = load_workbook("excel2.xlsx") intro_sheet = wb1.active excel_2_sheet = wb2.active # ------------------- 你已实现的获取目标列顺序代码 ------------------- excel_1_columns = [] for row in intro_sheet.iter_rows(min_row=1, max_row=1): for cell in row: excel_1_columns.append(cell.value) # ------------------- 新增核心逻辑 ------------------- # 建立Excel2原列名与列索引的映射 excel_2_col_map = {} for col_idx, cell in enumerate(excel_2_sheet[1], start=1): excel_2_col_map[cell.value] = col_idx col_count = len(excel_1_columns) # 在Excel2最前端插入对应数量的空列 for _ in range(col_count): excel_2_sheet.insert_cols(idx=1) # 迁移数据与格式到新列 for new_col_idx, target_col in enumerate(excel_1_columns, start=1): # 计算插入新列后,原列的当前索引 original_col_idx = excel_2_col_map[target_col] current_old_col_idx = original_col_idx + col_count max_row = excel_2_sheet.max_row # 逐行复制单元格值与样式 for row_idx in range(1, max_row + 1): old_cell = excel_2_sheet.cell(row=row_idx, column=current_old_col_idx) new_cell = excel_2_sheet.cell(row=row_idx, column=new_col_idx) new_cell.value = old_cell.value # 复制完整样式(字体、填充、边框等) new_cell._style = old_cell._style # 保留数字/日期格式 new_cell.number_format = old_cell.number_format # 从后往前删除旧列,避免索引错乱 old_col_start = col_count + 1 for col_idx in range(old_col_start + col_count - 1, old_col_start - 1, -1): excel_2_sheet.delete_cols(col_idx) # 保存调整后的文件 wb2.save("excel2_reordered.xlsx")
关键注意事项
- 从后往前删除列:若从前往后删除,后续列的索引会自动前移,导致删除位置错误,必须反向操作。
- 完整复制格式:
_style属性可一次性复制单元格的所有视觉样式,配合number_format确保数字、日期等特殊格式不丢失。 - 索引偏移修正:插入新列后,原列的索引会增加插入的列数,需重新计算当前位置才能准确定位数据。
内容的提问来源于stack exchange,提问作者alim1990
相关产品推荐
相关产品推荐

