0

我尝试使用 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

我该如何解决这个问题?

谢谢

4

1 回答 1

1

你正在尝试in对一个xlrd.cell对象做一个,我认为你需要改变

if parent_list[i] in actual_link:

if parent_list[i].value in actual_link:

根据您的评论为我的答案添加更多详细信息

您的调用正在传递似乎是字符串和单元格列表的字符串,但在您的函数中,您遍历列表并尝试将单元格类的每个实例与正确传递的字符串进行比较,这就是您的问题。

希望这会有所帮助(而且我没有误读代码!)

还有更多细节——

这是问题的症结所在,当您创建时feature_listepic_list您正在以两种不同的方式进行操作,首先您将一个单元格附加到列表中,其次您正在附加一个值。但是,您check_link在两种类型上都使用相同的功能。所以要么你需要扩展你的check_link函数来处理这两种类型,要么你需要保持一致并选择一个。

于 2013-07-19T16:12:19.537 回答