--
You received this message because you are subscribed to the Google Groups "Google Apps Script Community" group.
To unsubscribe from this group and stop receiving emails from it, send an email to google-apps-script-c...@googlegroups.com.
To view this discussion visit https://groups.google.com/d/msgid/google-apps-script-community/55c1eead-7e63-4373-aa03-f1012a2f610cn%40googlegroups.com.
Com certeza. Este é um erro muito comum e clássico ao trabalhar com gatilhos onEdit no Google Apps Script. A boa notícia é que ele é simples de corrigir.
Vamos analisar exatamente o que a mensagem de erro significa e, em seguida, corrigir o código.
A mensagem de erro TypeError: Cannot read properties of undefined (reading 'range') (Erro de tipo: Não é possível ler as propriedades de 'undefined' (lendo 'range')) é a chave. Este erro acontece por duas razões principais:
Executando o Script Manualmente: Você está tentando executar a função onEdit clicando no botão "Executar" no editor de scripts. Uma função onEdit é um gatilho especial projetado para rodar automaticamente quando um usuário edita fisicamente uma célula na planilha. Quando você a executa manualmente, o "objeto de evento" (que contém informações vitais como qual célula foi editada) não é criado, então ele fica undefined (indefinido).
Lógica Faltante do Objeto de Evento: Seu código usa variáveis como sheet e row sem nunca defini-las. O script não tem ideia de em qual planilha ou linha você está interessado. Você precisa capturar essa informação do objeto de evento que o Planilhas Google fornece automaticamente quando uma edição acontece.
Precisamos reescrever a função para que ela aceite corretamente o objeto de evento (comumente chamado de e) e o utilize para obter o contexto da edição.
Substitua todo o seu script pelo código corrigido abaixo:
/**
* Gera automaticamente um ID único quando uma nova Promessa (Pledge) ou Pagamento (Payment) é inserido.
* Esta função é um gatilho onEdit e NÃO deve ser executada manualmente pelo editor.
* @param {Object} e O objeto de evento passado pelo gatilho onEdit.
*/
function onEdit(e) {
// Obtém informações do objeto de evento
const range = e.range; // O intervalo que foi editado
const sheet = range.getSheet(); // A planilha onde a edição aconteceu
const row = range.getRow(); // O número da linha da edição
// --- Lógica para a planilha "Pledges" ---
if (sheet.getName() === "Pledges") {
// Só executa se a linha editada não for o cabeçalho (linha 1)
if (row > 1) {
const idCell = sheet.getRange(row, 1); // Coluna A = Pledge ID
const weddingId = sheet.getRange(row, 2).getValue(); // Coluna B = Wedding ID
const pledgeDate = sheet.getRange(row, 7).getValue(); // Coluna G = Pledge Date
// Verifica se as células obrigatórias têm dados e se a célula do ID ainda está vazia
if (weddingId && pledgeDate && !idCell.getValue()) {
const serial = ("000" + (row - 1)).slice(-3);
const dateStr = Utilities.formatDate(new Date(pledgeDate), "Africa/Kampala", "yyyyMMdd");
idCell.setValue(`PLG-${dateStr}-${serial}`
);
}
}
}
// --- Lógica para a planilha "Payments" ---
if (sheet.getName() === "Payments") {
// Só executa se a linha editada não for o cabeçalho (linha 1)
if (row > 1) {
const idCell = sheet.getRange(row, 1); // Coluna A = Payment ID
const pledgeId = sheet.getRange(row, 3).getValue(); // Coluna C = Pledge ID
const paymentDate = sheet.getRange(row, 5).getValue(); // Coluna E = Date
// Verifica se as células obrigatórias têm dados e se a célula do ID ainda está vazia
if (pledgeId && paymentDate && !idCell.getValue()) {
const serial = ("000" + (row - 1)).slice(-3);
const dateStr = Utilities.formatDate(new Date(paymentDate), "Africa/Kampala", "yyyyMMdd");
idCell.setValue(`PAY-${dateStr}-${serial}`);
}
}
}
}
function onEdit(e): A função agora aceita corretamente o objeto de evento e.
const range = e.range;: Obtemos a célula/intervalo exato que o usuário editou a partir de e.
const sheet = range.getSheet();: A partir do intervalo, podemos descobrir em qual planilha a edição ocorreu.
const row = range.getRow();: A partir do intervalo, obtemos o número da linha.
if (row > 1): Esta é uma adição de boa prática. Impede que o script seja executado se você editar acidentalmente a linha do cabeçalho.
Esta é a parte mais importante:
NÃO clique no botão "Executar".
Salve o projeto clicando no ícone do disquete.
Volte para a sua Planilha Google.
Vá para a planilha "Pledges".
Em uma nova linha (por exemplo, linha 10), insira um Wedding ID na coluna B e uma Pledge Date na coluna G.
O Pledge ID na coluna A dessa linha deve aparecer automaticamente.
O script agora funcionará como esperado, sendo acionado automaticamente por suas edições e identificando corretamente em qual linha deve trabalhar.