Openpyxl如何通过索引从工作表中获取行

问题描述:

使用Openpyxl和python3.5,我尝试使用下标获取Excel工作表中的第一行,但出现错误。Openpyxl如何通过索引从工作表中获取行

# after getting filename 
# after loading worksheet 
# to get the first row of the worksheet 
first_row = worksheet.rows[0] 

# I get 
Traceback (most recent call last): 
     File "<pyshell#54>", line 1, in <module> 
     first_row = phc_th_sheet.rows[1] 
TypeError: 'generator' object is not subscriptable 

关于获得第一行,我也试着 FIRST_ROW =工作表(行= 1) #和 FIRST_ROW = worksheet.rows。[1]

无工作。任何建议或者是openpyxl中没有的功能? 我去过https://openpyxl.readthedocs.io/en/default/的文档,但是我发现没有足够的东西来帮助索引和选择行

+0

这包括在文档中。 –

我终于找到了文档中的答案:

first_row = worksheet.rows[1] 
# worksheet.rows[row_index_from_1] 

这为我工作。

+1

是的,我们将'ws.rows'转换为一个生成器,以便不同实现之间的行为是一致的,并鼓励这种特殊查询的语法。编程访问最好使用'ws.iter_rows()',并在可能的情况下使用'ws.iter_cols()'。 –

+2

这不再适用。 –

+0

这是现在的worksheet.rows [1]。去更新答案。 –

错误TypeError: 'generator' object is not subscriptable。意思是你试图通过索引来访问一个没有的生成器,因为它在迭代它时创建元素。

您可以轻松地解决它,将它转换为一个列表,以获得您想要的元素:

first_row = list(worksheet.rows)[0] 

或迭代以为行:

for row in worksheet.rows: 
    foo(row) 

这是因为,即使双方都iterables,列表和发电机可表现完全不同,你可以得到它更好地解释在这里:

https://wiki.python.org/moin/Generators

https://docs.python.org/3/library/stdtypes.html#iterator-types

https://docs.python.org/3/library/stdtypes.html#sequence-types-list-tuple-range

+0

这不是一个好的答案。直接获取行更好,而不是直接将迭代器转换为列表。 –

+2

当然可以。然而,正如我通常使用熊猫操作excel电子表格一样,并且我不熟悉openpyxl的内部特性,只是试图解释错误以及如何获得解决方法。 –