Python多Excel文件指定列复制问题:重复覆盖而非分别写入
Python Excel合并脚本问题:所有目标列被最后一个文件数据覆盖
我需要编写Python脚本,遍历文件夹中的Excel文件,将每个文件内容复制到同一个工作簿的指定列(A、D、G列,间隔3列),测试用3个源文件。但运行后所有指定列都被最后一个文件的数据覆盖——预期A列存文件1、D列存文件2、G列存文件3,实际全是文件3的数据。
原代码
import os import openpyxl from openpyxl import Workbook, load_workbook import string for file in os.listdir(file_path): if file.endswith('.xlsx'): print(f'Loading file {file}...') wb = load_workbook(file_path+file) ws = wb.worksheets[0] wb1 = load_workbook(new_path+'data.xlsx') ws1 = wb1.active #calculate max rows and columns in source dataset mr = ws.max_row mc = ws.max_column m = [0,3,6] #copying data to new sheet for i in range(1,mr+1): for j in range(1,mc+1): for y in range(0,3): #reading cell value from source c = ws.cell(row = i, column = j) #writing read value to destination ws1.cell(row = i, column = j+int(m[y])).value = c.value wb1.save(new_path+'data.xlsx')
问题原因
- 重复加载目标工作簿:每次处理源文件时都重新从磁盘加载
data.xlsx,之前写入的内容会被覆盖,最终仅保留最后一次写入结果。 - 循环逻辑错误:每个源文件都遍历了所有目标列(
y从0到2),导致每个文件的数据都被写入A、D、G三列,最后一个文件直接覆盖了之前所有写入内容。
修正后的代码
import os from openpyxl import load_workbook # 替换为实际路径(确保路径末尾带斜杠) file_path = "你的源文件文件夹路径/" new_path = "目标文件路径/" # 仅加载一次目标工作簿,避免覆盖之前修改 wb1 = load_workbook(new_path + 'data.xlsx') ws1 = wb1.active # 获取所有源Excel文件,按顺序处理 excel_files = [f for f in os.listdir(file_path) if f.endswith('.xlsx')] # 对应目标列的偏移量:A(0)、D(3)、G(6) column_offsets = [0, 3, 6] # 仅处理前3个文件,匹配测试场景 for idx, file in enumerate(excel_files[:3]): print(f'Loading file {file}...') wb = load_workbook(file_path + file) ws = wb.worksheets[0] mr = ws.max_row mc = ws.max_column current_offset = column_offsets[idx] # 当前文件对应的列偏移 # 仅写入当前文件对应的目标列区域 for i in range(1, mr + 1): for j in range(1, mc + 1): source_cell = ws.cell(row=i, column=j) ws1.cell(row=i, column=j + current_offset).value = source_cell.value # 统一保存最终结果 wb1.save(new_path + 'data.xlsx')
修正说明
- 提前加载目标工作簿,避免每次循环重新加载导致的内容覆盖
- 通过
enumerate获取文件索引,匹配对应的列偏移量,每个文件仅写入指定目标列 - 限制处理前3个文件,贴合测试需求
内容的提问来源于stack exchange,提问作者rhynohorn
相关产品推荐
相关产品推荐

