如何在for循环每次迭代时将列表数据写入Excel行
问题分析与解决方案
问题根源
- 每次循环新建Workbook导致数据覆盖:你在循环内每次执行
wb = Workbook(),会创建一个全新的空白Excel文件,每次保存都会覆盖之前的版本,最终只保留最后一次迭代的数据。 - 列表追加方式错误:
final_result = final_result.append(result_list)是错误写法,append()方法是原地修改列表,返回值为None,执行后final_result会变成None,后续循环会抛出异常。
解决方案1:先收集所有数据,统一写入Excel
适合数据量不大的场景,先把所有迭代结果存入列表,循环结束后一次性写入Excel,避免重复创建文件:
from openpyxl import Workbook final_result = [] for i in range(0, 3): result_list = ['csm_biscuit_main_dev-7188-userdevsigned', 'Logd', 'G0B0LF036224003G', 'Biscuit', 'completed', '1:47:54', 'completed'] # 执行修改result_list的业务逻辑 # ... final_result.append(result_list) # 正确追加,无需赋值 print(final_result) # 循环结束后统一写入Excel wb = Workbook() sh1 = wb.active for row_data in final_result: sh1.append(row_data) wb.save("Report.xlsx")
解决方案2:每次循环加载已存在的文件(适合大数据量)
如果数据量很大,不想占用过多内存,可以每次循环判断文件是否存在,存在则加载后追加行,不存在则新建:
from openpyxl import Workbook, load_workbook import os for i in range(0, 3): result_list = ['csm_biscuit_main_dev-7188-userdevsigned', 'Logd', 'G0B0LF036224003G', 'Biscuit', 'completed', '1:47:54', 'completed'] # 执行修改result_list的业务逻辑 # ... # 处理Excel文件 if os.path.exists("Report.xlsx"): wb = load_workbook("Report.xlsx") sh1 = wb.active else: wb = Workbook() sh1 = wb.active sh1.append(result_list) wb.save("Report.xlsx")
内容的提问来源于stack exchange,提问作者iltech
相关产品推荐
相关产品推荐

