Error TypeError: Cannot read properties of undefined (reading 'range')

50 views
Skip to first unread message

paddy lukwago

unread,
Aug 21, 2025, 8:54:33 AM Aug 21
to Google Apps Script Community
My script to auto generate id is cannot run. Its giving me this error 
Error
TypeError: Cannot read properties of undefined (reading 'range')

Below is the code
function onEdit(e) {
  const sheet = e.range.getSheet();
  const row = e.range.getRow();

  if (sheet.getName() === "Pledges") {
    const idCell = sheet.getRange(row, 1); // Column A = Pledge ID
    const weddingId = sheet.getRange(row, 2).getValue(); // Column B = Wedding ID
    const pledgeDate = sheet.getRange(row, 7).getValue(); // Column G = Pledge Date

    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}`);
    }
  }

  if (sheet.getName() === "Payments") {
    const idCell = sheet.getRange(row, 1); // Column A = Payment ID
    const pledgeId = sheet.getRange(row, 3).getValue(); // Column C = Pledge ID
    const paymentDate = sheet.getRange(row, 5).getValue(); // Column E = Date

    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}`);
    }
  }
}
Image 21-08-2025 at 15.33.jpeg

Emerson Maia Paula

unread,
Aug 21, 2025, 10:23:16 AM Aug 21
to google-apps-sc...@googlegroups.com
The onEdit function isn't executed directly from the code editor. It only works when you're actually editing the spreadsheet.




--
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 .

Kildere S Irineu

unread,
Aug 27, 2025, 2:29:19 PM (12 days ago)  Aug 27
to google-apps-sc...@googlegroups.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.

O Problema: Por Que o Erro Acontece

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:

  1. 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).

  2. 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.

A Solução: Corrigindo o Código

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:

JavaScript
  /**
 * 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} 
` 
);
      }
    }
  }
} 
  

Mudanças Principais e Por Que Funcionam

  1. function onEdit(e) :  A função agora aceita corretamente o objeto de evento  e .

  2. const range = e.range; : Obtemos a célula/intervalo exato que o usuário editou a partir de  e .

  3. const sheet = range.getSheet(); : A partir do intervalo, podemos descobrir em qual planilha a edição ocorreu.

  4. const row = range.getRow(); : A partir do intervalo, obtemos o número da linha.

  5. 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.

Como Testar o Script Corrigido

Esta é a parte mais importante:

  1. NÃO clique  no botão "Executar".

  2. Salve  o projeto clicando no ícone do disquete.

  3. Volte para a sua Planilha Google.

  4. Vá para a planilha "Pledges".

  5. Em uma nova linha (por exemplo, linha 10), insira um  Wedding ID  na coluna B e uma  Pledge Date  na coluna G.

  6. 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.


Reply all
Reply to author
Forward
0 new messages