Python如何通过xlwings循环批量复制Excel区域值到多个目标区域
Xlwings 循环实现多目标区域批量复制
方案说明
硬编码逐行写复制逻辑的方式重复度高、维护性差,可以通过循环逻辑大幅简化代码,以下是两种可直接复用的实现。
实现1:逐行循环复制(对齐原有逐行操作逻辑)
通过参数配置+行号遍历自动构造源范围和目标范围,不需要手动编写每一行的单元格地址:
# 所有范围参数统一在这里配置,后续调整只需要改对应值即可 CONFIG = { "source_start_row": 18, "source_end_row": 20, "source_start_col": "D", "source_end_col": "G", "target_start_cols": ["Q", "AB"] } for row_num in range(CONFIG["source_start_row"], CONFIG["source_end_row"] + 1): # 构造当前行的源范围,例如D18:G18 source_rng = sheet1.range( f"{CONFIG['source_start_col']}{row_num}:{CONFIG['source_end_col']}{row_num}" ) # 逐个粘贴到所有目标表的对应行 for t_col in CONFIG["target_start_cols"]: # 自动计算目标表结束列,和源表列宽保持一致 t_col_idx = ord(t_col) - ord("A") + 1 source_col_count = ord(CONFIG["source_end_col"]) - ord(CONFIG["source_start_col"]) + 1 t_end_col = chr(t_col_idx + source_col_count - 2 + ord("A")) target_rng = sheet1.range(f"{t_col}{row_num}:{t_end_col}{row_num}") source_rng.copy(destination=target_rng)
注:你原有代码中第三行Table2的粘贴范围写为
Q20:S20,比源范围少1列,上述代码会自动对齐源表列宽,避免复制内容缺失。
实现2:整表一次性复制(推荐,执行效率更高)
Xlwings支持仅指定目标区域的左上角单元格即可完成整范围匹配复制,不需要逐行操作,代码更简洁:
# 定义源表范围和所有目标表的起始单元格 source_rng = sheet1.range("D18:G20") target_start_cells = [sheet1.range("Q18"), sheet1.range("AB18")] # 单次循环完成所有目标区域的复制 for start_cell in target_start_cells: source_rng.copy(destination=start_cell)
这种写法执行速度更快,后续如果需要新增复制目标,只需要在target_start_cells列表里追加对应起始单元格即可,维护成本极低。
附输入Excel示例截图:
内容的提问来源于stack exchange,提问作者The Great
相关产品推荐
相关产品推荐

