Meu aplicativo consegue inserir novos dados na planilha google sheets mas, não consegue editado

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=“:bar_chart:”)

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()

Hey @gerencial_diario – Welcome to our community! :hugs:

Regarding your issues, have you checked that the service account has editor access to the sheet, the sheet is shared with the service account email, and the SCOPE contains the correct URLs?

Best,
Charly

Sim, eu consigo incluir dados na sheets, se houve algum erro de autorização, eu não iria conseguir incluir novos dados.

Ok, in that case, here are things you can check:

  1. Ensure the cell range you’re aiming to update is precisely defined and accurately targets the cells intended for modification.
  2. Also, double-check your access rights to confirm they encompass the ability to both add and edit data in the spreadsheet, as being able to add doesn’t automatically imply correct permissions for editing.

Let me know how it goes.

Best,
Charly