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

如何使用Python按指定参数自动实现两个Excel工作簿间的数据迁移

基于openpyxl的Excel指定行迁移实现方案

不需要复杂依赖,用openpyxl就能实现,全程不需要手动打开Excel,适合新手快速落地。

前置准备

先安装依赖库,在终端执行命令:
pip install openpyxl
这个库专门处理.xlsx格式文件,不需要本地安装Office/Excel就能运行,兼容性好。

核心逻辑

整个流程分三步,没有复杂逻辑:

  • 读取txt里的待迁移邮箱,处理掉换行、空格、大小写差异后存入集合(集合比列表匹配速度快10倍以上,还能自动给邮箱去重)
  • 逐行遍历原员工台账,提取每行B列的邮箱值,和待迁移邮箱集合做匹配
  • 把匹配成功的整行数据写入新的Excel文件,保留原表头,最后保存文件即可

可直接运行的代码

代码里把需要修改的路径参数单独拎出来了,新手只需要改配置区的文件路径就能用:

import openpyxl

# -------------------------- 配置区 仅需修改这里的参数即可 --------------------------
SOURCE_EXCEL = "原员工台账.xlsx"       # 原员工台账文件路径
TARGET_EXCEL = "迁移后新员工台账.xlsx" # 新文件保存路径
EMAIL_LIST_TXT = "待迁移邮箱.txt"      # 存储待迁移邮箱的txt文件路径
EMAIL_COL = 2                         # 邮箱所在列,B列对应数字2(从1开始计数)
KEEP_HEADER = True                    # 是否保留原表第一行的表头
# --------------------------------------------------------------------------------

# 读取所有待匹配邮箱
match_emails = set()
with open(EMAIL_LIST_TXT, "r", encoding="utf-8") as f:
    for line in f:
        email = line.strip()
        if email:
            # 统一转小写存储,避免大小写差异导致匹配失败
            match_emails.add(email.lower())

# 加载原台账
source_wb = openpyxl.load_workbook(SOURCE_EXCEL, data_only=True)
# 如果数据不在默认第一个工作表,把下面的active改成工作表名,比如 source_wb["正式员工表"]
source_ws = source_wb.active

# 新建空白台账
target_wb = openpyxl.Workbook()
target_ws = target_wb.active
target_ws.title = source_ws.title

write_row = 1
# 逐行遍历原表
for row_idx, row in enumerate(source_ws.iter_rows(), start=1):
    # 处理表头行
    if KEEP_HEADER and row_idx == 1:
        for col_idx, cell in enumerate(row, start=1):
            target_ws.cell(row=write_row, column=col_idx, value=cell.value)
        write_row += 1
        continue

    # 提取当前行邮箱
    current_email = row[EMAIL_COL - 1].value
    if not current_email:
        continue
    # 匹配成功就复制整行
    if str(current_email).strip().lower() in match_emails:
        for col_idx, cell in enumerate(row, start=1):
            target_ws.cell(row=write_row, column=col_idx, value=cell.value)
        write_row += 1

# 保存文件
target_wb.save(TARGET_EXCEL)
source_wb.close()
target_wb.close()
print(f"迁移完成,共导出{write_row - 2 if KEEP_HEADER else write_row - 1}条匹配的员工数据")

注意事项

  • 如果待迁移邮箱列表是Excel格式不是txt:只需要把读取txt的部分替换成openpyxl加载邮箱Excel,提取对应列的邮箱存入match_emails集合即可,逻辑和读取原台账完全一致。
  • 如果需要保留原单元格的样式、颜色、边框:上面的代码默认只复制单元格值,需要保留样式的话,复制单元格时同步拷贝cell的font、fill、border、alignment属性即可,没有特殊需求的话复制值足够用。
  • 匹配失败排查:优先检查原表B列邮箱、txt里的邮箱是否存在前后空格、全角字符、大小写不一致问题,代码里已经加了strip()和转小写的处理,能覆盖绝大多数匹配异常场景。
  • 如果是.xls格式的旧版Excel文件:把openpyxl替换为xlrd+xlwt库即可,核心遍历、匹配、写入的逻辑完全不需要改动。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 13:45:32