You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python for循环按id命名Excel工作表仅生成最后id工作表问题

问题根因

你的代码逻辑错误在于将工作簿创建、文件关闭的操作放在了for循环内部:每次遍历id时,程序都会新建一个同名的store_dummy.xlsx文件,直接覆盖上一轮循环生成的文件,循环结束后文件里自然只会保留最后一个id对应的工作表。

修正代码

把工作簿初始化、关闭的逻辑移到循环外,循环内只执行新增工作表的操作即可。如果需要把每个id对应的数据写入对应工作表,也可以在循环内补充筛选写入逻辑,完整可运行代码如下:

import pandas as pd
import xlsxwriter

df_dummy = pd.read_csv('dummy.csv') 
id_store = df_dummy['id'].unique()

# 循环外一次性创建工作簿,避免循环内反复新建覆盖文件
workbook_dummy = xlsxwriter.Workbook('store_dummy.xlsx')

for i in id_store:
    print(i)
    # 每次循环新增对应id命名的工作表
    worksheet = workbook_dummy.add_worksheet(f'store {i}')
    # 如需写入对应id的筛选数据,可取消下方注释
    # df_single = df_dummy[df_dummy['id'] == i]
    # for r_idx, row in enumerate(df_single.values.tolist()):
    #     worksheet.write_row(r_idx, 0, row)

# 所有工作表创建完成后统一关闭工作簿
workbook_dummy.close()
更简便的实现方式

如果不需要用xlsxwriter做复杂的单元格格式定制,直接用pandas封装好的ExcelWriter实现更简洁,不需要手动操作工作簿、工作表对象:

import pandas as pd

df_dummy = pd.read_csv('dummy.csv')
id_store = df_dummy['id'].unique()

with pd.ExcelWriter('store_dummy.xlsx', engine='xlsxwriter') as writer:
    for single_id in id_store:
        # 筛选当前id对应的数据
        df_sub = df_dummy[df_dummy['id'] == single_id]
        # 写入对应命名的工作表,取消索引列
        df_sub.to_excel(writer, sheet_name=f'store {single_id}', index=False)

内容的提问来源于stack exchange,提问作者SammySharken

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.01 04:24:23