Python openpyxl行/列编号错误:值需≥1仍报错求助
问题解决:openpyxl 'row or column value must be at least 1' 报错
核心错误原因
你的代码里for d in range(len(myList))循环时,d从0开始取值,而openpyxl要求行、列号必须≥1,所以ws.cell(row=int(d), ...)传入了非法的行号0,直接触发报错。你尝试加1但未生效,是因为没找对修改的位置。
修复步骤
1. 修正行号取值
将写入Excel的行号从d改为d+1,range(len(myList))生成的序列是0、1、2...,加1后就变成合法的1、2、3...行号:
ws.cell(row=d+1, column=a, value=tr.find_element(By.XPATH, ".//td[" + str(a) + "]").text)
2. 补全异常分支逻辑
当tr=driver.find_element(By.XPATH,xpath)抛出异常时,你只往teamStats添加了值,但后续循环依然会执行tr.find_element,会导致tr未定义的报错。需要在异常分支里跳过后续单元格写入逻辑,或写入提示信息:
try: tr=driver.find_element(By.XPATH,xpath) # 找到球队才执行数据收集和写入 print("-",teamStats) for i in range(7): a=i+1 cell_text = tr.find_element(By.XPATH, ".//td["+str(a)+"]").text teamStats.append(cell_text) ws.cell(row=d+1, column=a, value=cell_text) print("--", teamStats) except Exception as e: teamStats.append(myList[d]) teamStats.append("new-comer-team") # 找不到球队时写入提示到Excel第一列 ws.cell(row=d+1, column=1, value=f"{myList[d]} - new-comer-team")
3. 清理无效初始值
myList一开始append的1不是球队名称,会导致第一次循环找不到对应tr,建议删除这个无效值:
myList=[] # 移除 myList.append(1) 这一行
修正后的关键代码片段
teamStats = [] for d in range(len(myList)): xpath_template="//tr[contains(.,'{0}')]" xpath=xpath_template.format(myList[d]) try: tr=driver.find_element(By.XPATH,xpath) print("-",teamStats) for i in range(7): a=i+1 cell_text = tr.find_element(By.XPATH, ".//td["+str(a)+"]").text teamStats.append(cell_text) ws.cell(row=d+1, column=a, value=cell_text) print("--", teamStats) except Exception as e: teamStats.append(myList[d]) teamStats.append("new-comer-team") ws.cell(row=d+1, column=1, value=f"{myList[d]} - new-comer-team") print(f"未找到球队 {myList[d]} 的数据") print("---",teamStats) driver.quit() wb.save('first_try_nba.xlsx')
内容的提问来源于stack exchange,提问作者xlmaster
相关产品推荐
相关产品推荐

