&引用;list“或”dict必须是list或dict“;在Python的openpyxl包中使用append时

&引用;list“或”dict必须是list或dict“;在Python的openpyxl包中使用append时,python,range,canopy,openpyxl,Python,Range,Canopy,Openpyxl,基于本教程:我们有以下结构: from openpyxl import Workbook from openpyxl.compat import range wb = Workbook() ws = wb.active for row in range(1,3): ws.append(range(100)) wb.save(finename ='mtest2.xlsx') 对于ws.append(范围(100)),返回以下错误: 问题出在哪里?显然,ws.append的参数必须是

基于本教程:我们有以下结构:

from openpyxl import Workbook
from openpyxl.compat import range

wb = Workbook()
ws = wb.active

for row in range(1,3):
    ws.append(range(100))

wb.save(finename ='mtest2.xlsx')
对于
ws.append(范围(100))
,返回以下错误:


问题出在哪里?

显然,
ws.append
的参数必须是字典或列表。假设您使用的是Python3.x,其中(它现在的行为类似于Python2.x的
xrange

最简单的修复方法是将
范围
显式转换为
列表

for row in range(1, 3):
    ws.append(list(range(100)))

正如@jornsharpe所指出的,您不能像这样使用范围。Python中的范围基本上只用于循环。如果您确实需要明确的值,可以将其转换为列表:
list(范围(100))

您不了解哪部分?假设您使用的是Python3.x,其中给出了消息。请尝试
列表(范围(100))
。谢谢。请添加您的答案。@Charlechulark看着,它甚至注意到iterable包含范围,但最后补充说这将是一个
类型错误。事实上,它似乎可以处理
range
,所以现在我很困惑-这是另一个版本吗?谢谢你的回答,但是
range(1,3)
不起作用!对于范围第一个元素的每个值,它都从第一行开始。为什么@用户2991243从提供的代码,我不能告诉你。在本例中,您实际上并没有使用
,因此最好将
读为范围(2):
。请注意,Python中的索引是基于零的,这可能与此有关。“Python中的范围基本上只用于循环。”在Python 3中为True ish,而在Python 2中为True ish,其中range函数返回实际的列表对象。
for row in range(1, 3):
    ws.append(list(range(100)))