使用xlrd按列名获取单元格

4
如果我的Excel(.xls)表格中有两行,就像一个键值对一样,是否有办法通过在xlrd中输入键(row0)来获取值(row1)呢?
例如,如果我有(0,0) = COLOR(1,0) = RED,我该怎么做才能实现类似以下的操作:
value = sh.col_values("COLOR") ?

我找到的最接近的相似函数是sh.col_values(int),不过它只能接受一个索引值作为参数。
1个回答

3

您需要沿着列向下搜索,直到找到COLOR,然后获取下一行中的值。

from itertools import product

def value_from_key(sheet, key):
    for row_index, col_index in product(xrange(sheet.nrows), xrange(sheet.ncols)):
        if sheet.cell(row_index, col_index).value == key:
            return sheet.cell(row_index+1, col_index).value

value = value_from_key(sheet, 'COLOR')

如果你知道密钥在偶数行或奇数行,你可以使用 xrange(0, sheet.nrows, 2)xrange(1, sheet.nrows, 2)

编辑:现已更新以搜索列。


1
看看我的修改。这应该在整个工作表中搜索关键字,然后返回紧接其下方单元格的值。如果您可以进一步限制搜索空间,只需更改“xrange”。 - agf
@agf,太棒了。我的程序只需要搜索第0行的列,但是从你的第一个答案版本中进行一些修改就完美解决了。唯一的技巧在于sheet.cell(row_index, column)这一行。我尝试用(column_index, row)替换参数。但显然那是错误的顺序。 - jvangeld
AttributeError: 'Worksheet' object has no attribute 'nrows' - Cerin
@Cerin 当发布时,这绝对有效,并且nrowsncols仍然出现在xlrd的README中,因此没有理由认为已更改:https://github.com/python-excel/xlrd -- 愿意展示一下你的代码吗? - agf

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接