Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

193
Visualizações
función setValue saltando filas en lugar de elegir actual en for loop

Tengo este código en Google Apps Script que está vinculado a una hoja de Google:

 function sendReminders() { var sheet = SpreadsheetApp.openById('1IvXctYLXMKrSYPPSuMg_4_AQopemHPSnLHmQQgBDqH8').getSheetByName('ÉVALUATION'); var startRow = 2; var numRows = sheet.getLastRow(); var numColumns = sheet.getLastColumn(); var dataRange = sheet.getRange(startRow, 1, numRows, numColumns); var data = dataRange.getValues(); for (var i in data) { var row = data[i]; var email = row[4]; var ccEmail = row[5]; var customId = row[1]; var dueDate = Utilities.formatDate(new Date(row[9]), Session.getScriptTimeZone(), "yyyy-MM-dd"); var message = 'Votre E&A est dûe pour la date suivante : ' + dueDate + '. Merci de la compléter en cliquant sur le lien suivant : https://form.jotform.com/221156384847058?customId3=' + customId; var emailSent = row[12]; var value = Utilities.formatDate(new Date(row[10]), Session.getScriptTimeZone(), "yyyy-MM-dd"); var today = Utilities.formatDate(new Date(), Session.getScriptTimeZone(), "yyyy-MM-dd"); if (value == today && emailSent != 1) { var subject = 'Rappel - Enquête & Analyse'; MailApp.sendEmail(email, subject, message, { cc: ccEmail }); sheet.getRange((startRow + i), 13).setValue(1); SpreadsheetApp.flush(); } } }

Se supone que el script envía correos electrónicos de recordatorio. Todo funciona bien, excepto esta línea:

 sheet.getRange((startRow + i), 13).setValue(1);

Esta línea debe agregar el valor de 1 a una celda específica en la hoja de cálculo de Google, en la fila actual en la que se encuentra el bucle for.

Sin embargo, en lugar de agregar el valor a la fila actual, omite filas y agrega el valor a alguna otra fila. En algunos casos hay una diferencia de 18 filas y en otros de 198 filas.

Aquí está el enlace de Google Sheet como referencia.

about 4 years ago · Juan Pablo Isaza
2 Respostas
Responde à pergunta

0

Pruébalo de esta manera:

 function sendReminders() { const ss = SpreadsheetApp.openById('1IvXctYLXMKrSYPPSuMg_4_AQopemHPSnLHmQQgBDqH8'); var sh = ss.getSheetByName('ÉVALUATION'); var startRow = 2; var dataRange = sh.getRange(startRow, 1, sh.getLastRow() - 1, sh.getLastColumn()); var vs = dataRange.getValues(); vs.forEach((r, i) => { var email = r[4]; var ccEmail = r[5]; var customId = r[1]; var dueDate = Utilities.formatDate(new Date(r[9]), Session.getScriptTimeZone(), "yyyy-MM-dd"); var message = 'Votre E&A est dûe pour la date suivante : ' + dueDate + '. Merci de la compléter en cliquant sur le lien suivant : https://form.jotform.com/221156384847058?customId3=' + customId; var emailSent = r[12]; var value = Utilities.formatDate(new Date(r[10]), Session.getScriptTimeZone(), "yyyy-MM-dd"); var today = Utilities.formatDate(new Date(), Session.getScriptTimeZone(), "yyyy-MM-dd"); if (value == today && emailSent != 1) { var subject = 'Rappel - Enquête & Analyse'; MailApp.sendEmail(email, subject, message, { cc: ccEmail }); sh.getRange(startRow + i, 13).setValue(1); } }); }
about 4 years ago · Juan Pablo Isaza Relatório

0

Noté algunos problemas en su hoja y script.

  1. En su hoja de muestra, tiene valores en M22 , M27 y M210 . La función sheet.getLastRow() incluirá esos valores y su última fila será 210 .

  2. Si imprime el valor de los datos, hay una matriz vacía adicional.

  3. Si intenta imprimir startRow + i , los valores son 22, 23, 24...etc . Simplemente agrega el valor de startRow e i y no realiza la suma de la operación aritmética.

Solución:

  1. Elimine los datos innecesarios o limpie su hoja para que el valor de numRows se convierta en 12.

  2. Dado que omite 1 fila, también debe deducir 1 fila a numRow. Simplemente agregue -1 a numRows en su getRange() .

  3. Use el método parseInt() para la variable i en sheet.getRange((startRow + i), 13).setValue(1); .

Su código debería verse así:

 function sendReminders() { var sheet = SpreadsheetApp.openById('1IvXctYLXMKrSYPPSuMg_4_AQopemHPSnLHmQQgBDqH8').getSheetByName('ÉVALUATION'); var startRow = 2; var numRows = sheet.getLastRow(); var numColumns = sheet.getLastColumn(); var dataRange = sheet.getRange(startRow, 1, numRows-1, numColumns); var data = dataRange.getValues(); for (var i in data) { var row = data[i]; var email = row[4]; var ccEmail = row[5]; var customId = row[1]; var dueDate = Utilities.formatDate(new Date(row[9]), Session.getScriptTimeZone(), "yyyy-MM-dd"); var message = 'Votre E&A est dûe pour la date suivante : ' + dueDate + '. Merci de la compléter en cliquant sur le lien suivant : https://form.jotform.com/221156384847058?customId3=' + customId; var emailSent = row[12]; var value = Utilities.formatDate(new Date(row[10]), Session.getScriptTimeZone(), "yyyy-MM-dd"); var today = Utilities.formatDate(new Date(), Session.getScriptTimeZone(), "yyyy-MM-dd"); if (value == today && emailSent != 1) { var subject = 'Rappel - Enquête & Analyse'; MailApp.sendEmail(email, subject, message, { cc: ccEmail }); sheet.getRange((startRow + parseInt(i)), 13).setValue(1); SpreadsheetApp.flush(); } } }

Muestra:

Nota: ajusté los valores de Fecha de recordatorio a mi fecha actual para que el script funcione.

ingrese la descripción de la imagen aquí

Producción:

ingrese la descripción de la imagen aquí

Referencia:

  • parseInt()
about 4 years ago · Juan Pablo Isaza Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda