Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

196
Views
¿Cómo puede establecer el valor de una celda de destino en las hojas de Google dentro de un bucle forEach en el script de aplicaciones de Google?

Escribí un script que busca en una hoja, encuentra filas que cumplen con 7 parámetros, devuelve los datos de esas filas y envía un correo electrónico a la dirección en cada una de las filas coincidentes. Como parte de este proceso, quiero actualizar el valor de la celda para 'Fecha del último contacto' a la fecha en que se envió el correo electrónico (esa parte no es difícil). Estoy luchando por obtener la notación A1 de la celda que contiene la fecha del último contacto, que creo que necesito para usar el método setValue(). Aquí están las partes relevantes del código:

 function sendFollowUps () { // Gets data from defined range of active sheet var rows = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Test List').getRange(2,1,152,12).getValues() // User-defined cutoff date, everything on or before will be contacted var cutoffDate = new Date('11/10/2021') console.log('Cutoff date is: ' + cutoffDate) // selects and returns only firms that haven't been met, schedule, or declined and have a date of last contact on or before the cutoffDate var filteredRows = rows.filter(function(row) { if (row[10] && row[10] != 'Met' && row[10] != 'Responded' && row[10] != 'Warm' && row[10] != 'Scheduled' && row[10] != 'Declined' && row[11] <= cutoffDate) { return row } }) // for each firm returned by filteredRows, pulls email, firstName of investor, and firmName filteredRows.forEach(function(row) { var email = row[6] var firstName = row[4].split(' ')[0] var firmName = row[0] var sendToEmails = ['...'] // Customized email message with firstName, firmName updated per investor var messageSubject = '...' var messageBody = `...` // Adds investor email to recipient list sendToEmails.push(email) // Formats recipient list to CSV string sendToEmails.join(',') // Sends email with customized firstName and firmName to email in row GmailApp.sendEmail(sendToEmails, messageSubject, messageBody, {'from': 'me@email.com'}) followUpEmails.push(email) }

Intenté configurar la row[11] = sendDate de envío dentro del ciclo forEach, pero eso en realidad no actualiza el valor de la celda en la hoja. También intenté usar SpreadsheetApp.getSheetByName('Test List').getRange(row[11]) , SpreadsheetApp.getSheetByName('Test List').getActiveCell() , y SpreadsheetApp.getSheetByName('Test List').getCurrentCell(row[11]) , tampoco hay alegría con eso.

¿Cómo puedo obtener la notación A1 para la celda de la fila [11] para usar el método setValue?

about 4 years ago · Santiago Gelvez
2 answers
Answer question

0

Sospecho que esto no funciona correctamente porque no puede comparar fechas como esa desde var cutoffDate = new Date('11/10/2021')

 var filteredRows = rows.filter(function(row) { if (row[10] && row[10] != 'Met' && row[10] != 'Responded' && row[10] != 'Warm' && row[10] != 'Scheduled' && row[10] != 'Declined' && row[11] <= cutoffDate) { return row } })

Además, usar el filtro como el que tiene ahora ha roto la continuidad entre el índice en el foreach y la indexación de los valores en el conjunto de datos. No filtraría los datos y, en cambio, realizaría la búsqueda de datos como parte de forEach

Creo que será mejor que lo hagas de esta manera:

 function sendFollowUps() { const ss = SpreadsheetApp.getActive(); const sh = ss.getSheetByName('Test List'); const vs = sh.getRange(2, 1, 152, 12).getValues() var cutoffDate = new Date('11/10/2021').valueOf(); vs.forEach(row => { if (row[10] && row[10] != 'Met' && row[10] != 'Responded' && row[10] != 'Warm' && row[10] != 'Scheduled' && row[10] != 'Declined' && new Date(row[11]).valueOf() <= cutoffDate) { var email = row[6]; var firstName = row[4].split(' ')[0]; var firmName = row[0]; var sendToEmails; var messageSubject; var messageBody; sendToEmails.push(email) sendToEmails.join(',') GmailApp.sendEmail(sendToEmails, messageSubject, messageBody, { 'from': 'me@email.com' }); followUpEmails.push(email) } }); }
about 4 years ago · Santiago Gelvez Report

0

La notación A1 será casi imposible de obtener porque filter primero. Esto ya se mencionó en la respuesta anterior. Sin embargo, puede modificar la matriz y luego .setValues() la matriz modificada en todo el rango:

 const range = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Test List').getRange(2,1,152,12); const rows = range.getValues();

Luego dentro .forEach() ,

 row[11]=sentDate;

Fuera forEach() :

 range.setValues(rows);

Tenga en cuenta que esto reemplaza todas las fórmulas (si las hay) con valores.

about 4 years ago · Santiago Gelvez Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!