TypeError:强制转换为Unicode:需要字符串或缓冲区,找到Cell

时间:2013-07-19 15:54:18

标签: python python-2.7 xlrd

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

我该如何解决这个问题?

由于

1 个答案:

答案 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函数来处理这两种类型,或者您需要保持一致并选择一种。