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

Python实现多DataFrame导出至同一xlsx不同工作表的问题咨询

解决动态SQL结果导出至同一Excel不同工作表的问题

你的代码问题在于每次循环都会重新创建ExcelWriter并写入文件,导致之前的工作表被覆盖,最终只保留最后一次循环的数据。要实现所有结果存入同一文件的不同工作表,只需调整ExcelWriter的生命周期,将其初始化和保存操作移到循环外即可,以下是两种场景的实现方案:

方案1:创建全新Excel文件并写入所有工作表

将ExcelWriter的初始化放在循环前,循环内仅负责将每个DataFrame写入对应工作表,最后统一保存文件:

import pandas as pd

# 定义最终输出的Excel文件路径
output_file = f"{path}/all_functions_data.xlsx"

# 初始化ExcelWriter(使用xlsxwriter引擎)
writer = pd.ExcelWriter(output_file, engine='xlsxwriter')

for func_name in df_data['FUNCTION_NAME']:
    sheet_name = func_name  
    # 简化SQL拼接(原写法优化为更简洁的f-string)
    sql = f"""select * from table({ev_dwh_name}.OVERDRAFT."{sheet_name}")"""
    print(sql)                
    dft_tf_data = pd.read_sql(sql, sf_conn)
    print('dft_tf_data')  
    print(dft_tf_data)
    
    # 将当前查询结果写入对应工作表
    dft_tf_data.to_excel(writer, sheet_name=sheet_name, index=False)

# 统一保存所有工作表
writer.save()
print(f"所有数据已导出至: {output_file}")

方案2:在现有Excel文件中追加新工作表

如果需要在已存在的Excel文件中新增工作表,需使用openpyxl引擎(xlsxwriter不支持追加操作),步骤如下:

import pandas as pd
from openpyxl import load_workbook

# 现有Excel文件的路径
existing_excel = f"{path}/your_existing_file.xlsx"

# 加载已有工作簿,初始化ExcelWriter(mode='a'表示追加模式)
book = load_workbook(existing_excel)
writer = pd.ExcelWriter(
    existing_excel, 
    engine='openpyxl', 
    mode='a', 
    if_sheet_exists='replace'  # 若工作表已存在则替换,可选值还有'new'(重命名)、'error'(抛出异常)
)
writer.book = book

for func_name in df_data['FUNCTION_NAME']:
    sheet_name = func_name  
    sql = f"""select * from table({ev_dwh_name}.OVERDRAFT."{sheet_name}")"""
    print(sql)                
    dft_tf_data = pd.read_sql(sql, sf_conn)
    print('dft_tf_data')  
    print(dft_tf_data)
    
    # 将数据写入新工作表
    dft_tf_data.to_excel(writer, sheet_name=sheet_name, index=False)

# 关闭writer以保存修改
writer.close()
print(f"已在现有文件中完成工作表追加,文件路径: {existing_excel}")

注意事项

  • 使用openpyxl时需确保已安装该库:pip install openpyxl
  • if_sheet_exists参数需根据需求选择,避免覆盖重要数据
  • 若现有文件包含复杂格式(如公式、样式),openpyxl会保留原有格式,但写入新工作表时不会继承格式,若需统一格式可额外添加格式设置代码

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 23:55:12