1
resposta

[Sugestão] Inserindo função de conversão e botão de download para formato .xlsx

Olá colegas!

É possível que em algum momento dependendo de qual tipo de usuário seja o utilizador dos produtos por você desenvolvidos, formatos como o .csv não seja o mais requisitado. Dessa maneira formatos mais populares como o .xslx podem ser mais adequados. O Streamlit ao que me parece não possui dentro das opções do aplicativo a possibilidade de geração nativa de arquivos .xlsx como no caso do .csv. Como o instrutor não adentrou nesse assunto, verifiquei uma possibilidade de geração do arquivos .xlsx via outros módulos.

O código abaixo escreve uma função que retorna uma planilha de excel sem causar conflito com o formato de datas presente do dataframe utilizado no curso. A planilha é gerada de forma "lisa" sem formatações default que a geração de arquivos .xlsx via a engine da xlsxwriter trazem.

import pandas as pd
from io import BytesIO
import xlsxwriter

# Função de conversão para .xlsx
@st.cache_data
def converte_xlsx(df):
    output = BytesIO()
    with pd.ExcelWriter(output, engine='xlsxwriter', datetime_format='yyyy-mm-dd', date_format='yyyy-mm-dd') as writer:  
        df.to_excel(writer, index=False)   
        workbook = writer.book          
        worksheet = writer.sheets['Sheet1']
        header_format = workbook.add_format({'border': False}) 
        for col_num, value in enumerate(df.columns.values): 
            worksheet.write(0, col_num, value, header_format)
    output.seek(0)
    return output.getvalue()

Depois disso é só adequar o botão de download para o arquivo .xlsx.

with coluna1:
    st.markdown('**Download da tabela** :file_folder:')
    st.download_button('Formato em CSV :page_facing_up:', data = converte_csv(dados_filtrados), file_name = 'tabela.csv', mime = 'text/csv', on_click = mensagem_sucesso)  
    st.download_button('Formato em XSLS :page_with_curl:', data = converte_xlsx(dados_filtrados), file_name = 'tabela.xlsx',
                        mime = 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', on_click = mensagem_sucesso)

Bons estudos!

1 resposta

Olá José, tudo bem? Espero que sim!

Bem legal compartilhar essa opção aqui no fórum José.

Sem dúvida é uma opção muito útil para disponibilizar o arquivo em uma planilha do Excel.

Espero que tenha gostado do curso como um todo. Bons estudos!