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!