Si bien he visto preguntas similares, no he visto esta específica si no me equivoco.
Entonces, necesito leer toda la información en una columna determinada (en este caso sería AF, independientemente de que no haya estado usando esa hoja de cálculo para probar lo que he estado haciendo) y luego verificar si una celda en esa columna tiene el valor ( o cadena, lo siento, nuevo en Google Script) "Finalizado", luego copie la fila completa que corresponde a esa celda en una hoja secundaria que almacenaría todos los casos terminados y demás.
He estado tratando de encontrar algo a través de Google, pero siempre es cómo copiar la hoja completa y creo que eso no es útil, también lo que he hecho es copiar las celdas independientemente del valor en esa celda + columna.
function copyIf() { var ss = SpreadsheetApp.getActiveSpreadsheet(); var source = ss.getSheetByName("Stuff"); var destination = ss.getSheetByName("Terminados"); var condition = source.getRange('D2:D2000').getValue(); if (condition == "Terminado") { source.getRange('A2').copyTo(destination.getRange('A2')); source.getRange('A3').copyTo(destination.getRange('A3')); } }Estoy pensando que probablemente debería implementar algún tipo de ciclo for o while porque quiero que esto se ejecute constantemente, de modo que cada vez que alguien cambie el estado de una determinada celda a Terminado para copiar esa fila en la hoja secundaria.
Prueba esto
function copyIf() { var feuille = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Stuff"); var archive = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Terminados"); if (feuille.getLastRow()==1){ SpreadsheetApp.getActive().toast('No data!', 'End of script 🗃️') return } var data = feuille.getRange(2,1,feuille.getLastRow()-1,feuille.getLastColumn()).getValues() var archiveData = [] var lignes = [] var ligne = 1 var col = 31 // AF try { data.forEach(function (row) { if (row[col]=="Terminado") { archiveData.push(row) lignes.push(ligne) } }) archive.getRange(archive.getLastRow() + 1, 1, archiveData.length, archiveData[0].length).setValues(archiveData) // lignes.reverse().forEach(x => feuille.deleteRow(x)); SpreadsheetApp.getActive().toast('Rows '+lignes.flat()+' hab been archived !', 'End of script 🗃️') } catch (e) { SpreadsheetApp.getActive().toast('No data to be archived!', 'End of script 🗃️') } } Si desea eliminar filas después del proceso, elimine // antes lignes.reverse().forEach(x => feuille.deleteRow(x));