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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 10:15:30