我尝试使用xlrd从excel加载一些记录并检查关系。 请参阅我的业余代码了解更多详情:
import xlrd
feature_list_file = xlrd.open_workbook('FeatureList.xls')
feature_table = feature_list_file.sheet_by_index(0)
num_feature_rows = feature_table.nrows
num_feature_cols = feature_table.ncols
feature_list = []
for i in range(num_feature_rows):
feature_list.append(feature_table.cell(i, 1))
# print feature_list
issue_list_file = xlrd.open_workbook('IssueList.xls')
issue_table = issue_list_file.sheet_by_index(0)
num_issue_rows = issue_table.nrows
num_issue_cols = issue_table.ncols
epic_list = []
for i in range(num_issue_rows):
if issue_table.cell(i, 0).value == 'Epic':
epic_list.append(issue_table.cell(i, 1).value)
# print epic_list
def check_link(actual_link, parent_list):
result = True
for i in range(parent_list.__len__()):
count = 0
if parent_list[i] in actual_link:
count += 1
if count > 1:
result = False
break
return result
invalid_list = []
for i in range(num_issue_rows):
if issue_table.cell(i, 10).value == '':
invalid_list.append(issue_table.cell(i, 1).value)
else:
if issue_table.cell(i, 0).value == 'Story':
if check_link(issue_table.cell(i, 10).value, epic_list):
invalid_list.append(issue_table.cell(i, 1).value)
if issue_table.cell(i, 0).value == 'Epic':
if check_link(issue_table.cell(i, 10).value, feature_list):
invalid_list.append(issue_table.cell(i, 1).value)
print invalid_list
但是,它总是返回消息
Traceback (most recent call last):
File "/Users/sut/PycharmProjects/ItemChecker/JiraItemChecker.py", line 54, in <module>
if check_link(issue_table.cell(i, 10).value, feature_list):
File "/Users/sut/PycharmProjects/ItemChecker/JiraItemChecker.py", line 36, in check_link
if parent_list[i] in actual_link:
TypeError: coercing to Unicode: need string or buffer, Cell found
我该如何解决这个问题?
由于
答案 0 :(得分:1)
您正试图在in
对象上执行xlrd.cell
,我认为您需要更改
if parent_list[i] in actual_link:
到
if parent_list[i].value in actual_link:
根据您的评论为我的答案添加更多细节
您的通话正在传递看似字符串和单元格列表的内容 字符串很好,但是在你的函数中,你迭代列表并尝试将单元类的每个实例与正确传递的字符串进行比较,这就是你的问题。
希望这有帮助(我不会误读代码!)
以及更多细节 -
问题的关键在于,当您创建feature_list
时,epic_list
正在以两种不同的方式执行此操作,首先是您要将一个单元格附加到列表中,第二,你要附加一个值。但是,您在两种类型上使用相同的check_link
函数。因此,您需要扩展check_link
函数来处理这两种类型,或者您需要保持一致并选择一种。