使用openpyxl将二维列表写入Excel单列的问题求助
问题分析与修正方案
你的代码存在几个关键问题导致无法正常运行,我来逐一拆解并给出修复后的完整代码:
核心问题点
- openpyxl的索引规则:openpyxl中单元格的行和列都是从
1开始计数的,而你的代码里直接用从0开始的循环变量作为行号,这会触发索引错误。 - 元素赋值错误:你把整个子列表
My_list[i]直接赋值给了单元格,而不是取子列表里的单个元素My_list[i][j]。 - 缺少初始化步骤:代码里没有创建工作簿和工作表的初始化逻辑,这也是运行失败的重要原因。
修复后的完整代码
from openpyxl import Workbook # 你的原始列表 My_list = [[1, 3, 5, 7, 9], [2, 4, 6, 8, 10], [4, 8, 12, 16, 20], [5, 10, 15, 20, 25], [3, 6, 9, 12, 15]] # 初始化工作簿和默认活动工作表 wb = Workbook() sheet = wb.active # 遍历每个子列表,对应Excel的一列 for col_index, sublist in enumerate(My_list, start=1): # 遍历子列表中的每个元素,对应列中的每一行 for row_index, value in enumerate(sublist, start=1): # 将单个元素写入对应单元格 sheet.cell(row=row_index, column=col_index).value = value # 保存生成的Excel文件 wb.save("result.xlsx")
代码说明
- 索引适配:用
enumerate(..., start=1)直接获取从1开始的行列号,完美匹配openpyxl的索引规则,避免手动加1的繁琐操作。 - 正确赋值:通过
value变量直接取子列表中的单个元素,确保每个单元格只写入一个数值,符合Excel的单元格存储逻辑。 - 完整流程:包含了工作簿初始化、数据写入、文件保存的完整流程,代码可以直接运行生成有效的Excel文件。
如果你更习惯用原始的循环写法,也可以这样修改:
from openpyxl import Workbook My_list = [[1, 3, 5, 7, 9], [2, 4, 6, 8, 10], [4, 8, 12, 16, 20], [5, 10, 15, 20, 25], [3, 6, 9, 12, 15]] wb = Workbook() sheet = wb.active for i in range(len(My_list)): # 列号从1开始,所以i+1 column = i + 1 for j in range(len(My_list[i])): # 行号从1开始,所以j+1 row = j + 1 # 取子列表的第j个元素赋值给单元格 sheet.cell(row=row, column=column).value = My_list[i][j] wb.save("result.xlsx")
内容的提问来源于stack exchange,提问作者hossein asghari
相关产品推荐
相关产品推荐

