TypeError:'generator'对象不可订阅

时间:2017-03-05 02:29:28

标签: excel python-3.x openpyxl

import openpyxl
wb = openpyxl.load_workbook('example.xlsx')
sheet = wb.active
sheet.columns[1]
Traceback (most recent call last):
  File "<pyshell#3>", line 1, in <module>
    sheet.columns[1]
TypeError: 'generator' object is not subscriptable

我是Python的初学者,这是我第一次发布我的问题。 我坚持使用上面的TypeError,'generator'对象不是可订阅的。我想我确实输入了在网站上写的代码。 该网站的网址为https://automatetheboringstuff.com/chapter12/

请帮我处理这个错误。

1 个答案:

答案 0 :(得分:8)

该教程是为较旧版本的openpyxl库2.3.3设计的。从那以后.columns的行为发生了一些变化 - 我太懒了,无法准确查看 - 现在它生成了一个生成器(一个懒惰的对象实际上并没有任何工作,除非它被要求。)

如果您不太关心性能,可以在list返回的生成器上调用.columns,然后选择相应的列:

>>> sheet.columns[0]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'generator' object is not subscriptable
>>> list(sheet.columns)[0]
(<Cell Sheet1.A1>, <Cell Sheet1.A2>, <Cell Sheet1.A3>, <Cell Sheet1.A4>, <Cell Sheet1.A5>, <Cell Sheet1.A6>, <Cell Sheet1.A7>)
>>> list(sheet.columns)[1]
(<Cell Sheet1.B1>, <Cell Sheet1.B2>, <Cell Sheet1.B3>, <Cell Sheet1.B4>, <Cell Sheet1.B5>, <Cell Sheet1.B6>, <Cell Sheet1.B7>)

或按名称选择列:

>>> sheet["A"]
(<Cell Sheet1.A1>, <Cell Sheet1.A2>, <Cell Sheet1.A3>, <Cell Sheet1.A4>, <Cell Sheet1.A5>, <Cell Sheet1.A6>, <Cell Sheet1.A7>)

或者 - 这可能是最简单的,取决于您希望给可能遇到的其他问题花费多少时间 - 您可以降级到2.3.3。