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

如何使用Openpyxl从指定行开始偏移复制Excel列数据

Openpyxl 跨工作簿复制列数据(跳过保留行)方案

报错原因

原有代码直接通过ws_1['B:B']取整列遍历,会覆盖到前4行的合并单元格区域。Openpyxl中合并单元格仅左上角单元格支持写入,其余关联单元格均为只读状态,直接赋值就会触发只读错误。B列能正常运行是因为该列前4行没有只读的合并单元格区域,C列存在这类单元格所以报错。

实现逻辑

  • 不直接遍历整列,手动指定遍历起始行号,完全避开需要保留的前4行合并单元格区域
  • 通过工作表自带的max_row属性自动获取数据最后一行位置,无需手动统计行数
  • 按单元格坐标逐一定位取值赋值,不会误改需要保留的表头/合并单元格

修改后可直接运行的代码

from openpyxl import load_workbook

# 加载两个目标工作簿
wb = load_workbook('220526 MA V3.0.1 John Cpath Right Point list.xlsx')
wb2 = load_workbook('OC PATH.xlsx')

ws_1 = wb['Point List']
ws_2 = wb2['OC Point List']

# 可根据需求调整配置参数
COPY_COLUMNS = ['B', 'C']  # 填写需要复制的列号,支持多列同时复制
START_ROW = 5  # 前4行保留则从第5行开始复制,若需从第4行开始改为4即可
end_row = max(ws_1.max_row, ws_2.max_row)  # 取两表最大行号作为遍历终点,避免漏数据

# 逐列逐行完成复制
for col in COPY_COLUMNS:
    for row in range(START_ROW, end_row + 1):
        src_cell = ws_1[f'{col}{row}']
        dst_cell = ws_2[f'{col}{row}']
        dst_cell.value = src_cell.value

# 保存修改
wb.save(filename='220526 MA V3.0.1 John Cpath Right Point list.xlsx')
wb2.save(filename='OC PATH.xlsx')

使用说明

  • 调整复制列:需要复制更多列时直接在COPY_COLUMNS列表中添加列号即可,比如复制B/C/D三列就写['B', 'C', 'D']
  • 调整复制范围:如果只需要复制源表的有效数据,不需要覆盖目标表已有超长内容,可以把end_row的取值改为ws_1.max_row
  • 如果复制时需要连带单元格样式一起复制,可以在赋值value之后补充样式属性的复制逻辑

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.03 00:31:08