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/
请帮我处理这个错误。
答案 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。