使用Python脚本将Excel数据导入Jira时遇TypeError问题求助
问题分析与修复方案
错误原因
嘿,我来帮你拆解这个问题!你遇到的TypeError本质是只读模式下的工作表对象不支持用关键字参数调用cell()方法。
当你用read_only=True加载Excel文件时,wb['Sheet1']返回的是ReadOnlyWorksheet类的实例,它的cell()方法只能接受位置参数(先传行号,再传列号),而不是你代码里用的row=r, column=c这种关键字参数。Python把这些关键字参数当成了额外的参数,反而找不到第一个必须的工作表实例参数,所以抛出了这个“未绑定方法需要工作表实例作为第一个参数”的错误。
修复步骤
1. 修正核心问题:getCellValue函数
把cell()调用的关键字参数改成位置参数,这是解决当前报错的关键:
def getCellValue(worksheet, r, c): cell_value = worksheet.cell(r, c).value # 去掉row=和column=,用位置参数传值 if cell_value is None: print(f"Error: Empty Cell. Row {r} Col {c}") promp() return cell_value
2. 修复其他潜在问题
你的代码里还有几个小问题,不修复的话后续也会报错:
create_issue语句括号未闭合:最后少了一个右括号,会触发语法错误- 重复赋值:
type变量被连续赋值两次,去掉重复的那行 raw_input在Python3中不存在:Python3统一用input(),把最后一行的raw_input改成input- 避免用内置函数名做变量名:比如
sum是Python内置求和函数,换成sum_val更安全
修正后的关键代码片段
def getCellValue(worksheet, r, c): cell_value = worksheet.cell(r, c).value if cell_value is None: print(f"Error: Empty Cell. Row {r} Col {c}") promp() return cell_value # ... 其他初始化代码保持不变 ... for i in range (2, ws.max_row+1): pro = getCellValue(ws, i, 1) key = ws.cell(i, 2).value # 这里也改成位置参数调用cell() parent_issue = jira.issue(key) parent = str(parent_issue.fields.summary) type = getCellValue(ws, i, 3) # 去掉重复的type赋值行 prename = ws.cell(i, 4).value taskname = ws.cell(i, 5).value child = prename + taskname prio = ws.cell(i, 6).value imp = ws.cell(i, 7).value confidence = getCellValue(ws, i, 8) team = getCellValue(ws, i, 9) person = ws.cell(i, 10).value time = ws.cell(i, 11).value desc = ws.cell(i, 12).value sum_val = prename + " - " + taskname # 替换sum为sum_val,避免覆盖内置函数 report = ws.cell(i, 13).value print(sum_val) # 修复create_issue的括号,调整格式让代码更易读 issue = jira.create_issue( project=pro, summary=sum_val, description=desc, issuetype=type, assignee={'name': person}, reporter={'name': report}, timetracking={"originalEstimate": time,"remainingEstimate": time}, customfield_11200={"value": team}, customfield_12306={"value": confidence}, customfield_11100={"value": imp}, priority={'name': prio} ) print("Successfully Created: "+ str(issue)) print('Linking Child: ' + str(issue) + '\t to Parent: ' + key) jira.create_issue_link('Broken into', key, str(issue)) print("SUCCESS\n") print("\n\nDONE\t Total New Issues Created and Linked: " + str(i-1)) input("prompt: ") input("Press Enter to Continue: ") # 替换raw_input为input
额外提示
- 只读模式适合加载大型Excel文件,速度更快,但功能受限;如果后续需要修改Excel内容,记得去掉
read_only=True - 判断空值时,用
is None比== None更可靠,这是Python的最佳实践
内容的提问来源于stack exchange,提问作者christianvuye
相关产品推荐
相关产品推荐

