将两个 Dataframe (Pandas)合并为一个excel文件,并使用tkinter文件对话框保存

mznpcxlj  于 2023-02-20  发布在  其他
关注(0)|答案(1)|浏览(151)

我有一个SQLite数据库,有两个表。一个用于客户端,另一个用于每个客户端的进程。我需要一个函数来使用filedDialog导出一个Pandas Dataframe 。如果我使用XslsWriter,Excel文件会自动保存在程序运行的地方,但我希望用户选择自己的位置。
我试过使用Xlsxwriter,它保存在程序运行的同一目录中:

def exporta_tabela(self):
    self.conecta_db()
    self.cursor.execute("""SELECT * FROM clientes""")
    tabelaCli = self.cursor.fetchall()
    tabelaCli = pd.DataFrame(tabelaCli, columns=['COD', 'CPF', 'Nome', 'Sobrenome', 'Telefone', 'Estado', 'Cidade','Bairro', 'Logradouro', 'Num.', 'Comp.', 'Area', 'RegistradoEm'])
    writer = pd.ExcelWriter('clientes_processos.xlsx', engine='xlsxwriter')
    self.cursor.execute("""SELECT * FROM processos """)
    tabelaProc = self.cursor.fetchall()
    tabelaProc = pd.DataFrame(tabelaProc, columns=['ID', 'Adv_Resp', 'Tipo', 'Processo', 'Status', 'Cliente_COD'])
        tabelaCli.to_excel(writer, sheet_name='Clientes') 
        tabelaProc.to_excel(writer, sheet_name='Processos')
        writer.save()
    self.conn.commit()
    self.desconecta_db()

=====================================================================
我也尝试过不使用xlsxWriter,但它只保存一个或另一个工作表,而我需要两个工作表:

def exporta_tabela(self):
    self.conecta_db()
    self.cursor.execute("""SELECT * FROM clientes""")
    tabelaCli = self.cursor.fetchall()
    tabelaCli = pd.DataFrame(tabelaCli, columns=['COD', 'CPF', 'Nome', 'Sobrenome', 'Telefone', 'Estado', 'Cidade','Bairro', 'Logradouro', 'Num.', 'Comp.', 'Area', 'RegistradoEm'])
    self.cursor.execute("""SELECT * FROM processos """)
    tabelaProc = self.cursor.fetchall()
    tabelaProc = pd.DataFrame(tabelaProc, columns=['ID', 'Adv_Resp', 'Tipo', 'Processo', 'Status', 'Cliente_COD'])
    with filedialog.asksaveasfile(mode='w', defaultextension='.xlsx') as file:
        tabelaCli.to_excel(file.name, sheet_name='Clientes') 
        tabelaProc.to_excel(file.name, sheet_name='Processos')
    self.conn.commit()
    self.desconecta_db()
jk9hmnmh

jk9hmnmh1#

它的工作原理如下:

def exporta_tabela(self):
    self.conecta_db()
    self.cursor.execute("""SELECT * FROM clientes""")
    tabelaCli = self.cursor.fetchall()
    self.cursor.execute("""SELECT * FROM processos """)
    tabelaProc = self.cursor.fetchall()
    tabelaCli = pd.DataFrame(tabelaCli, columns=['COD', 'CPF', 'Nome', 'Sobrenome', 'Telefone', 'Estado', 'Cidade',
    'Bairro', 'Logradouro', 'Num.', 'Comp.', 'Area', 'RegistradoEm'])
    tabelaProc = pd.DataFrame(tabelaProc, columns=['ID', 'Adv_Resp', 'Tipo', 'Processo', 'Status', 'Cliente_COD'])
    outpath = filedialog.asksaveasfile(mode='wb', defaultextension='.xlsx')
    with pd.ExcelWriter(outpath, engine='xlsxwriter') as writer:
        tabelaCli.to_excel(writer, sheet_name='Clientes')
        tabelaProc.to_excel(writer, sheet_name='Processos')
    self.conn.commit()
    self.desconecta_db()

相关问题