无法将工作表添加到Python中的xlsx文件

ebdffaop  于 2023-01-06  发布在  Python
关注(0)|答案(1)|浏览(143)

我试图通过运行动态生成的SQL并将数据存储到数据框中来导出数据,最终将数据框导出到Excel工作表中。然而,尽管我能够通过成功运行动态SQL生成不同的结果,但我无法将其导出到同一Excel文件中的不同工作表中。它最终会用最后生成的数据覆盖以前的结果。

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.to_excel(writer, sheet_name=sheet_name, index=False)
        
        with tempfile.NamedTemporaryFile('w+b', suffix='.xlsx', delete=False) as fp:
            #dft_tf_data.to_excel(writer, sheet_name=sheet_name, index=False)
            print('Inside Temp File creation')
            temp_file = path + f'/fp.xlsx'
            writer = pd.ExcelWriter(temp_file, engine = 'xlsxwriter')
            dft_tf_data.to_excel(writer, sheet_name=sheet_name, index=False)
            writer.save()
    print(temp_file)

我正在努力实现以下方案。
1.根据FUNCTION_NAME,它应该在现有Excel中添加一个新工作表,然后将查询中的数据写入工作表。
1.最终文件应包含所有工作表。
有什么办法吗?请建议。

ilmyapht

ilmyapht1#

如果fp.xlsx不存在,我只希望出现一次(第一次运行)找不到文件的情况。fp.xlsx在以下行中创建

writer=

如果它不存在,并且由于该行引用的是该文件,因此它必须存在,否则将出现找不到该文件的错误。一旦它存在,则应该没有问题。
我不确定创建一个临时xlsx文件的原因。我不明白为什么需要它,而且你似乎也没有使用它。
下面的代码对我来说很好用,其中fp.xlsx在运行代码之前最初保存为空白工作簿。

sheet_name = 'Sheet1'
with tempfile.NamedTemporaryFile('w+b', suffix='.xlsx', delete=False) as fp:
    print('Inside Temp File creation')
    temp_file = path + f'/fp.xlsx'
    writer = pd.ExcelWriter(temp_file,
                            mode='a',
                            if_sheet_exists='overlay',
                            engine='openpyxl')
    dft_tf_data.to_excel(writer,
                 sheet_name=sheet_name,
                 startrow=writer.sheets[sheet_name].max_row+2,
                 index=False)
    writer.save()
print(temp_file)

相关问题