• Empleos
  • Sobre nosotros
  • profesionales
    • Inicio
    • Empleos
    • Cursos y retos
  • empresas
    • Inicio
    • Publicar vacante
    • Nuestro proceso
    • Precios
    • Evaluaciones
    • Nómina
    • Blog
    • Comercial
    • Calculadora de salario

0

130
Vistas
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 3 years ago · Juan Pablo Isaza
2 Respuestas
Responde la pregunta

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 3 years ago · Juan Pablo Isaza Denunciar

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 3 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Nuestro proceso Comercial
Legal
Términos y condiciones Política de privacidad
© 2025 PeakU Inc. All Rights Reserved.

Andres GPT

Recomiéndame algunas ofertas
Necesito ayuda