Estou tentando criar um aplicativo para escrever, ler e editar uma planilha sheets, consegui inserir novos dados na planilha mas, quando tento editar os campos eles não são salvos na planilha sheets. minha planilha tem as seguntes colunas IdAcomp, Data, Lead, NomeCliente, Corretor, Status, MomentoLead, Observação e dataresposta, sendo que a IdAcomp esta ocultada na planilha.
segue o código fonte que estou utilizando:
import streamlit as st
import gspread
from oauth2client.service_account import ServiceAccountCredentials
from datetime import datetime
import pandas as pd
Configurações do aplicativo
st.set_page_config(page_title=“App de Gestão de Leads”, page_icon=“”)
Configurações do Google Sheets
SCOPE = [“https://spreadsheets.google.com/feeds”, “https://www.googleapis.com/auth/drive”]
CREDS = ServiceAccountCredentials.from_json_keyfile_name(“token.json”, SCOPE)
CLIENT = gspread.authorize(CREDS)
SHEET = CLIENT.open(“Acomp”).sheet1 # Altere para o nome da sua planilha
Função para adicionar um novo lead
def adicionar_lead():
# Define o título da seção
st.subheader(“Adicionar Novo Lead”)
# Cria campos de entrada para o usuário inserir dados
data = st.date_input(“Data”, datetime.now())
lead = st.text_input(“Lead”)
nome_cliente = st.text_input(“Nome do Cliente”)
corretor = st.selectbox(“Corretor”,[“DOUGLAS”,“CRHIS”,“FABIO”,“GRABRIELA”,“JOUSE”,“MAYSA”,“MICHELE”,“TIAGO”,“TAYNAH”,“WANDERSON”,“WELLINGTON”])
status = st.selectbox(“Status”, [“AGENDAMENTO”, “REAGENDAMENTO”, “VISITA”,“PROPOSTA”,“VENDA”,“FINALIZADO”])
momento_lead = st.selectbox(“Momento do Lead”,[“REAGENDAMENTO”,“SEM INTERAÇÃO”,“ENVIANDO DOC”,“RESTRIÇÃO”,“SEM PERFIL”,“VIROU PROPOSTA”,“PROPOSTA REPROVADA”,“PROPOSTA CONDICIONADA”,“PROPOSTA APROVADA”,“PASTA EM QV”,“PROPOSTA COM RESTRIÇÃO”,“PROPOSTA COM DESISTENCIA”,“EM RESERVA”,“VENDA GERADA”])
observacao = st.text_input(“Observação”)
# Verifica se o botão “Adicionar Lead” foi pressionado
if st.button(“Adicionar Lead”):
# Formata a data para o formato esperado pelo Google Sheets
data_str = data.strftime(‘%m/%d/%Y’)
# Adiciona os dados do lead à planilha
SHEET.append_row([data_str, lead, nome_cliente, corretor, status, momento_lead, observacao])
# Exibe mensagem de sucesso
st.success(“Lead adicionado com sucesso!”)
Função para exibir a lista de leads
def exibir_leads():
# Define o título da seção
st.subheader(“Lista de Leads”)
# Obtém todos os dados da planilha
leads_data = SHEET.get_all_values()
# Verifica se há dados na planilha
if len(leads_data) > 1:
# Remove a primeira linha (cabeçalho) e cria um DataFrame Pandas
headers = leads_data.pop(0)
df = pd.DataFrame(leads_data, columns=headers)
# Exibe o DataFrame em forma de tabela
st.table(df)
else:
# Se não houver leads, exibe uma mensagem
st.write(“Não há leads para exibir.”)
Função para editar um lead
def editar_lead():
# Define o título da seção
st.subheader(“Editar Lead”)
# Adicionando uma caixa de pesquisa para o número do lead
lead_number = st.text_input("Número do Lead")
# Verifica se o botão "Pesquisar" foi pressionado
if st.button("Pesquisar"):
# Verifica se o número do lead foi fornecido
if not lead_number:
st.warning("Por favor, insira o número do lead.")
return
# Definindo as opções de status e momento do lead
status_options = ["AGENDAMENTO", "REAGENDAMENTO", "VISITA", "PROPOSTA", "VENDA", "FINALIZADO"]
momento_lead_options = ["REAGENDAMENTO", "SEM INTERAÇÃO", "ENVIANDO DOC", "RESTRIÇÃO", "SEM PERFIL", "VIROU PROPOSTA", "PROPOSTA REPROVADA", "PROPOSTA CONDICIONADA", "PROPOSTA APROVADA", "PASTA EM QV", "PROPOSTA COM RESTRIÇÃO", "PROPOSTA COM DESISTENCIA", "EM RESERVA", "VENDA GERADA"]
corretor_options = ["DOUGLAS", "CRHIS", "FABIO", "GRABRIELA", "JOUSE", "MAYSA", "MICHELE", "TIAGO", "TAYNAH", "WANDERSON", "WELLINGTON"]
# Encontrando o índice da linha com base no número do lead
lead_id = None
leads_data = SHEET.get_all_values()
for index, lead_row in enumerate(leads_data):
# Verifica se o número do lead corresponde ao fornecido
if lead_row[2] == lead_number:
lead_id = index
st.write(f"Lead encontrado na linha {lead_id}")
# Exibindo os campos para edição do lead
with st.form(key='editar_lead_form'):
# Define o intervalo de células a serem atualizadas na planilha
cell_range = f"B{lead_id + 1}:I{lead_id + 1}"
# Obtém os dados do lead
lead_data = leads_data[lead_id]
# Cria campos de entrada para editar os dados do lead
data_value = lead_data[0]
data = st.date_input("Data", datetime.strptime(data_value, '%m/%d/%Y') if data_value else None)
lead = st.text_input("Lead", lead_data[1])
nome_cliente = st.text_input("Nome do Cliente", lead_data[2])
corretor = st.selectbox("Corretor", corretor_options, index=corretor_options.index(lead_data[3]) if lead_data[3] in corretor_options else 0)
status = st.selectbox("Status", status_options, index=status_options.index(lead_data[4]) if lead_data[4] in status_options else 0)
momento_lead_value = lead_data[5]
momento_lead_index = momento_lead_options.index(momento_lead_value) if momento_lead_value in momento_lead_options else 0
momento_lead = st.selectbox("Momento do Lead", momento_lead_options, index=momento_lead_index)
observacao = st.text_input("Observação", lead_data[6])
# Verifica se o botão "Atualizar Lead" foi pressionado
try:
if st.form_submit_button(label='Atualizar Lead'):
# Exibe os dados atualizados do lead
st.write("Dados do lead após a edição:")
st.write("Data:", data)
st.write("Lead:", lead)
st.write("Nome do Cliente:", nome_cliente)
st.write("Corretor:", corretor)
st.write("Status:", status)
st.write("Momento do Lead:", momento_lead)
st.write("Observação:", observacao)
# Formata a data para o formato esperado pelo Google Sheets
data_str = data.strftime('%m/%d/%Y') if data else ''
# Atualiza os dados do lead na planilha
lead_data = [data_str, lead, nome_cliente, corretor, status, momento_lead, observacao]
SHEET.update(cell_range, [lead_data])
# Exibe mensagem de sucesso
st.success("Atualização concluída com sucesso!")
except Exception as e:
# Exibe mensagem de erro, caso ocorra alguma exceção
st.error(f"Exceção capturada: {e}")
return
Função para deletar um lead
def deletar_lead():
# Define o título da seção
st.subheader(“Deletar Lead”)
# Cria campo de entrada para o usuário inserir o ID do lead a ser deletado
lead_id = st.number_input(“ID do Lead”, min_value=2, value=2)
# Verifica se o botão “Deletar Lead” foi pressionado
if st.button(“Deletar Lead”):
# Deleta a linha correspondente ao ID do lead na planilha
SHEET.delete_row(lead_id)
# Exibe mensagem de sucesso
st.success(“Lead deletado com sucesso!”)
Menu de opções
menu = st.sidebar.selectbox(“Menu”, [“Adicionar Lead”, “Editar Lead”, “Deletar Lead”, “Exibir Leads”])
Executa a função correspondente ao menu selecionado
if menu == “Adicionar Lead”:
adicionar_lead()
elif menu == “Editar Lead”:
editar_lead()
elif menu == “Deletar Lead”:
deletar_lead()
else:
exibir leads()