使用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
相关产品推荐
相关产品推荐

