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

