XlsxWriter遍历工作表报错TypeError,如何批量写入A1单元格?
解决XlsxWriter遍历工作表时的TypeError问题
你遇到的错误有两个核心原因,直接修正即可解决:
- 错误的工作表列表获取方式:
workbook.worksheets是类方法而非属性,必须通过workbook.worksheets()调用才能返回所有工作表的可迭代列表,直接使用方法名会触发"method object is not iterable"错误。 - enumerate的错误使用:
enumerate()返回的是(索引, 工作表对象)的元组,你直接将元组赋值给WS后调用write(),自然会因为元组没有该方法报错。
修正后的代码(两种可选方案)
方案1:直接遍历工作表列表(无需索引)
workbook = xlsxwriter.Workbook('test.xlsx',{'nan_inf_to_errors': True}) WS1 = workbook.add_worksheet('Sheet A') WS2 = workbook.add_worksheet('Sheet B') WS3 = workbook.add_worksheet('Sheet C') # 原代码重复赋值给WS2,建议改为新变量避免覆盖 for ws in workbook.worksheets(): ws.write('A1','Hello!') workbook.close()
方案2:保留enumerate(需要使用索引时)
如果你需要用到工作表的索引,可以正确解包enumerate返回的元组:
workbook = xlsxwriter.Workbook('test.xlsx',{'nan_inf_to_errors': True}) WS1 = workbook.add_worksheet('Sheet A') WS2 = workbook.add_worksheet('Sheet B') WS3 = workbook.add_worksheet('Sheet C') for idx, ws in enumerate(workbook.worksheets()): ws.write('A1','Hello!') # 可选:利用索引做额外操作,比如打印进度 # print(f"已完成第{idx+1}个工作表的写入") workbook.close()
额外提示
原代码中WS2 = workbook.add_worksheet('Sheet C')会覆盖掉Sheet B的工作表对象,虽然不影响遍历操作,但后续如果需要单独操作Sheet B会找不到对应的对象,建议改为WS3这类新变量名。
内容的提问来源于stack exchange,提问作者Hitesh
相关产品推荐
相关产品推荐

