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

使用add_worksheet()创建工作表后,如何用to_excel()写入DataFrame并避重名异常?

解决方法

问题根源是你手动调用workbook.add_worksheet("Data")创建了工作表,之后调用to_excel时又指定同一个sheet_name,pandas会尝试再次创建同名工作表,触发重复命名错误。

下面提供两种可行的解决思路:

方案一:先写入DataFrame,再添加额外内容

先通过to_excel自动创建目标工作表,再从writer.sheets中获取已存在的工作表对象,写入额外文本:

import pandas as pd

df1 = pd.DataFrame({"Data": [11, 12, 13, 14]})
df2 = pd.DataFrame({"Data": [21, 22, 23, 24]})
df3 = pd.DataFrame({"Data": [31, 32, 33, 34]})

with pd.ExcelWriter("pandas_multiple.xlsx") as writer:
    # 写入所有DataFrame,自动创建"Data"工作表
    df1.to_excel(writer, sheet_name="Data", startrow=3, index=False)
    df2.to_excel(writer, sheet_name="Data", startrow=9, index=False)
    df3.to_excel(writer, sheet_name="Data", startrow=15, index=False)
    
    # 获取已创建的工作表对象
    worksheet = writer.sheets["Data"]
    # 写入额外内容
    worksheet.write(0, 0, 'Hello')

方案二:先创建工作表并注册,再写入DataFrame

如果需要先写额外文本再处理DataFrame,可手动创建工作表后,将其注册到writer.sheets字典中,避免to_excel重复创建:

import pandas as pd

df1 = pd.DataFrame({"Data": [11, 12, 13, 14]})
df2 = pd.DataFrame({"Data": [21, 22, 23, 24]})
df3 = pd.DataFrame({"Data": [31, 32, 33, 34]})

with pd.ExcelWriter("pandas_multiple.xlsx") as writer:
    workbook = writer.book
    # 手动创建工作表
    worksheet = workbook.add_worksheet("Data")
    # 将工作表注册到writer的sheets集合中
    writer.sheets["Data"] = worksheet
    
    # 先写入额外内容
    worksheet.write(0, 0, 'Hello')
    
    # 再写入DataFrame,此时不会重复创建工作表
    df1.to_excel(writer, sheet_name="Data", startrow=3, index=False)
    df2.to_excel(writer, sheet_name="Data", startrow=9, index=False)
    df3.to_excel(writer, sheet_name="Data", startrow=15, index=False)

补充提示

  • 加上index=False可避免写入DataFrame的索引列(如果不需要的话),让内容排版更整洁;
  • 两种方案可根据你需要的操作顺序自由选择。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 06:03:23