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

277
Views
Usando dos funciones onEdit () en la misma hoja de trabajo (Hojas de cálculo de Google)

Todavía soy un novato en la codificación y las secuencias de comandos y agradeceré cualquier ayuda al respecto. Estoy trabajando en una tarea en la que básicamente necesito 2 funciones onEdit para ejecutar en la misma hoja de Google y mover filas a la pestaña correspondiente cuando cambia el estado (campo de columna) de un registro:

Meta:

1ra Función: Cuando el estado de una consulta cambia a "Resuelta", mueve todo el registro a la pestaña de la hoja llamada "Completada"

2da función: cuando el estado de una consulta cambia a "En espera" o "En espera de comentarios", mueve todo el registro a una pestaña separada en la hoja llamada "En espera / En espera de comentarios"

Ambas funciones onEdit () funcionan de forma independiente, sin embargo, cuando intento combinar las dos, solo funciona la segunda función onEdit2 (evento) . Intenté buscar una solución en línea, pero no he tenido éxito en hacer que ambas funciones funcionen cuando los estados de un registro cambian según lo especificado. Agradecería alguna orientación y ayuda con esto por favor

Mi código

 function onEdit(event) { // assumes source data in sheet named Needed // target sheet of move to named Acquired // test column with yes/no is col 4 or D var ss = SpreadsheetApp.getActiveSpreadsheet(); var s = event.source.getActiveSheet(); var r = event.source.getActiveRange(); if(s.getName() == "General Maintenance" && r.getColumn() == 9 && r.getValue() == "Resolved") { var row = r.getRow(); var numColumns = s.getLastColumn(); var targetSheet = ss.getSheetByName("Completed"); var target = targetSheet.getRange(targetSheet.getLastRow() + 1, 1); s.getRange(row, 1, 1, numColumns).moveTo(target); s.deleteRow(row); } } function onEdit2(event) { // assumes source data in sheet named Needed // target sheet of move to named Acquired // test column with yes/no is col 4 or D var ss = SpreadsheetApp.getActiveSpreadsheet(); var s = event.source.getActiveSheet(); var r = event.source.getActiveRange(); if(s.getName() == "General Maintenance" && r.getColumn() == 9 && r.getValue() == "On Hold" || s.getName() == "General Maintenance" && r.getColumn() == 9 && r.getValue() == "Waiting On Feedback" ) { var row = r.getRow(); var numColumns = s.getLastColumn(); var targetSheet = ss.getSheetByName("On Hold / Awaiting Feedback"); var target = targetSheet.getRange(targetSheet.getLastRow() + 1, 1); s.getRange(row, 1, 1, numColumns).moveTo(target); s.deleteRow(row); } }
about 4 years ago · Juan Pablo Isaza
1 answers
Answer question

0

Hay dos formas de hacer esto: si realmente desea dos funciones separadas, puede crear una función onEdit y llamar a cada una de ellas por separado.

Sin embargo, gran parte de su código dentro de las dos funciones es el mismo. Hay un principio de codificación llamado DRY: significa Don't Repeat Yourself. No es necesario tener el mismo código en dos lugares separados, cuando puedes tenerlo en uno solo. Puede reducir la codificación duplicada combinando su código en una declaración if anidada, usando las partes de su declaración IF que eran iguales, como esta:

 function onEdit(event) { // assumes source data in sheet named Needed // target sheet of move to named Acquired // test column with yes/no is col 4 or D var ss = SpreadsheetApp.getActiveSpreadsheet(); var s = event.source.getActiveSheet(); var r = event.source.getActiveRange(); if(s.getName() == "General Maintenance" && r.getColumn() == 9) { var keepProcessing = false; var targetSheet; if (r.getValue() == "Resolved") { keepProcessing = true; targetSheet = ss.getSheetByName("Completed"); } else if ((r.getValue() == "On Hold") || (r.getValue() == "Waiting On Feedback")) { keepProcessing = true; targetSheet = ss.getSheetByName("On Hold / Awaiting Feedback"); } // If 'Resolved', 'On Hold', or 'Waiting on Feedback', then keepProcessing was set to true, so can process the items if (keepProcessing) { // This was the code that was the same in both functions - The only difference now is that targetSheet is set above in the IF statement. // So this way, it is only typed out once instead of twice. var row = r.getRow(); var numColumns = s.getLastColumn(); var target = targetSheet.getRange(targetSheet.getLastRow() + 1, 1); s.getRange(row, 1, 1, numColumns).moveTo(target); s.deleteRow(row); } } }
about 4 years ago · Juan Pablo Isaza 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!