Python自动化循环异常:仅处理最后一行数据求助
问题描述
使用pyautogui实现从Excel向第三方软件自动录入数据:
- Excel包含Item ID(第1列)、Customer Name、Order ID(第3列)三列数据
- 需求:通过Item ID在软件中搜索,对应录入Order ID
- 已定义
start_row = 2、end_row = 2000限定处理范围,但代码仅处理第2000行,跳过1-1999行;仅当start_row与end_row同为2时可正常处理第2行
问题原因
核心问题是循环逻辑错误:
- 原代码中,
for循环仅完成了ItemID和OrderID的变量赋值,循环结束后才执行录入操作,导致最终只使用了循环最后一次赋值的(第2000行)数据 - 完整的录入流程(搜索Item ID、录入Order ID)没有被包含在循环体内,无法逐行处理数据
修复后的代码
import pyautogui import time import openpyxl import keyboard # 加载Excel文件 file_path="D:/User/Documents/Order ID Edit/Recent_Transactions.xlsx" workbook = openpyxl.load_workbook(file_path) wsheet = workbook.active start_row = 2 end_row = 2000 # 打开软件(手动登录进入物流模块后执行后续操作) pyautogui.click(806,747) # 给软件启动/切换窗口留缓冲时间 time.sleep(2) # 逐行处理Excel数据 for i in range(start_row, end_row + 1): # -------------------------- # 1. 搜索Item ID # -------------------------- pyautogui.click(305,59) # 点击搜索图标 pyautogui.doubleClick(301,95) # 选中搜索输入框 # 清空搜索框(避免残留内容) keyboard.send('ctrl+a') keyboard.send('backspace') # 获取当前行的Item ID并输入 item_id = wsheet.cell(row=i, column=1).value if item_id is None: print(f"第{i}行Item ID为空,跳过") continue pyautogui.write(str(item_id)) keyboard.send('Enter') # 等待搜索结果加载 time.sleep(1) # -------------------------- # 2. 录入Order ID # -------------------------- pyautogui.doubleClick(357,560) # 点击Order ID编辑框 # 清空原有内容 keyboard.send('ctrl+a') keyboard.send('backspace') # 获取当前行的Order ID并输入 order_id = wsheet.cell(row=i, column=3).value if order_id is None: print(f"第{i}行Order ID为空,跳过") continue pyautogui.write(str(order_id)) keyboard.send('Enter') # 等待编辑保存 time.sleep(0.5) # -------------------------- # 3. 批量保存所有编辑 # -------------------------- pyautogui.click(355,64) # 点击编辑图标 pyautogui.click(371,64) # 点击保存图标
额外优化说明
- 添加
time.sleep():避免操作过快导致软件未响应,可根据实际软件运行速度调整延迟时间 - 增加空值判断:跳过Item ID或Order ID为空的行,避免无效操作
- 增加输入框清空操作:防止前一次输入内容残留影响当前操作
内容的提问来源于stack exchange,提问作者Robert Jin
相关产品推荐
相关产品推荐

