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

如何用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 01:45:38