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/的文档,但是我发现没有足够的东西来帮助索引和选择行
我终于找到了文档中的答案:
first_row = worksheet.rows[1]
# worksheet.rows[row_index_from_1]
这为我工作。
是的,我们将'ws.rows'转换为一个生成器,以便不同实现之间的行为是一致的,并鼓励这种特殊查询的语法。编程访问最好使用'ws.iter_rows()',并在可能的情况下使用'ws.iter_cols()'。 –
这不再适用。 –
这是现在的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
这不是一个好的答案。直接获取行更好,而不是直接将迭代器转换为列表。 –
当然可以。然而,正如我通常使用熊猫操作excel电子表格一样,并且我不熟悉openpyxl的内部特性,只是试图解释错误以及如何获得解决方法。 –
这包括在文档中。 –