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

如何用Python将Excel文件1的A、B列数据复制到文件2的B、C列?

Python实现Excel列数据跨文件复制方案

原代码存在的问题

  • 错误混用VBA的COM对象操作语法(CreateObject是Windows脚本/VBA语法,Python未导入对应库的情况下无法使用)
  • 变量名拼写错误、未定义(如objWorkbook未初始化,objWorksheetobjExcel属于语法错误)
  • 操作逻辑混乱,粘贴范围与需求不符(需求是从B2、C2开始,代码中错误指向B4、A1等位置)
  • 导入了大量未使用的冗余库(dateutil、datetime、os均未参与实际操作)

方案1:用Pandas快速实现(适合批量数据处理)

Pandas处理Excel数据效率极高,几行代码即可完成需求:

import pandas as pd

# 读取文件1的A、B列(header=0表示第1行为表头)
df_source = pd.read_excel("File 1.xlsx", usecols="A:B", header=0)
# 读取文件2的全部数据,保留原有内容
df_target = pd.read_excel("File 2.xlsx", header=0)

# 将文件1的A列数据赋值给文件2的B列(从第2行开始,对应DataFrame索引1)
df_target.loc[1:, "B"] = df_source.iloc[:, 0].values
# 将文件1的B列数据赋值给文件2的C列(从第2行开始)
df_target.loc[1:, "C"] = df_source.iloc[:, 1].values

# 保存修改后的文件2,不保留索引列
df_target.to_excel("File 2.xlsx", index=False)

注意:如果文件2的B、C列原有数据需要保留,此方案会覆盖从第2行开始的内容;若需保留格式,建议使用下面的openpyxl方案。

方案2:用Openpyxl实现(保留Excel原有格式)

Openpyxl可直接操作单元格,完美保留文件的格式样式:

from openpyxl import load_workbook

# 打开源文件(只读模式提升效率)和目标文件
wb_source = load_workbook("File 1.xlsx", read_only=True)
wb_target = load_workbook("File 2.xlsx")

# 获取两个文件的第一个工作表
ws_source = wb_source.active
ws_target = wb_target.active

# 复制源文件A列(A2开始)到目标文件B列(B2开始)
for row_num in range(2, ws_source.max_row + 1):
    # 获取源单元格值
    cell_value = ws_source.cell(row=row_num, column=1).value
    # 写入目标单元格
    ws_target.cell(row=row_num, column=2).value = cell_value

# 复制源文件B列(B2开始)到目标文件C列(C2开始)
for row_num in range(2, ws_source.max_row + 1):
    cell_value = ws_source.cell(row=row_num, column=2).value
    ws_target.cell(row=row_num, column=3).value = cell_value

# 保存目标文件并关闭工作簿
wb_target.save("File 2.xlsx")
wb_source.close()
wb_target.close()

若需要复制单元格格式(如字体、背景色等),可添加一行:ws_target.cell(row=row_num, column=2).style = ws_source.cell(row=row_num, column=1).style

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 21:40:21