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

