使用 Python 2.7 和 xlrd 在 Excel 电子表格行中搜索特定字母序列

Searching for a particular letter sequence in an Excel spreadsheet row using Python 2.7 and xlrd

我刚开始在 Python 2.7.12 中使用 xlrd,我不知道我做错了什么;似乎是数据类型不匹配。

基本上,我在 Excel 电子表格 (.xlsx) 中搜索一系列两列宽的行中的字母序列,如果找到,我想复制整个行到新的电子表格中。

电子表格中的数据看起来像...

R1: TheName_of_the_thing_XYZQ , Description of the thing with keyword1
R1: TheName_of_another_thing_61PD , Description of the thing with keyword2

这是我目前所知道的...

import xlrd

search_for = ['XYZQ', 'keyword2', 'foo', 'FOO']

book = xlrd.open_workbook('csv-test.xlsx')
i = 0
j = 0

sheet1 = book.sheet_by_index(1)

for i in range(sheet1.nrows):
     row = sheet1.row_values(i)
     for j in range(len(row)):
          if row[j] == search_for:
                print 'found it!'
          else:
            print 'sorry'

当我 运行 这样做时,它从未在 search_for 中找到任何内容,只是为每一行打印 'sorry'。

所以我知道它打开了正确的文档,解析了每一行,等等。我还尝试了 cell_value 和 row_slice。

谢谢!

我认为你的错误在于这些行:

if row[j] == search_for:

在你的例子中,row[j]是Unicode格式的单元格内容,search_for是开头声明的列表。

也就是说你有这种情况,例如:

if u'TheName_of_the_thing_XYZQ' == ['XYZQ', 'keyword2', 'foo', 'FOO']:

并且不起作用。

我将您的脚本修改为 searc_for 列表中的以下循环,并检查单个单元格是否包含列表的元素之一。

import xlrd
search_for = ['XYZQ', 'keyword2', 'foo', 'FOO']
book = xlrd.open_workbook('test.xlsx')
sheet = book.sheet_by_index(0)

for idx in range(sheet.nrows):
    row = sheet.row_values(idx)
    name = row[0]
    description = row[1]
    print "==== row number {} ====".format(idx + 1)
    for key in search_for:
        if key in name:
            print "in 'name' column, found {}".format(name)
        if key in description:
            print "in 'description' column, found {}".format(name)

告诉我