es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Combinando dos funciones onEdit() en un único App Script de Google Sheets.

Estoy intentando combinar dos funciones onEdit en una sola App Script. He leído otros posts sobre este tema y siento que he integrado sus sugerencias, pero aún no funciona.

La Función A (timeStamp) coloca una marca de tiempo en la columna B cuando se edita la columna A
La Función B (archiveRow) copia la fila editada a la hoja “Inactive” cuando en la hoja “Active” se marca la casilla de verificación como Verdadero y luego elimina la fila de la hoja “Active”.

Ambas funciones funcionan correctamente cuando se ejecutan por separado, pero solo la segunda función funciona cuando se combinan.

function onEdit(e) {
timeStamp();
archiveRow();

//Automáticamente marca fecha y hora en la línea
function timeStamp() {
var s = SpreadsheetApp.getActiveSheet();
if( s.getName() == “Active” ) { //verifica si estamos en la hoja Active o no
var r = s.getActiveCell();
if( r.getColumn() == 1 ) { //verifica si la celda que se está editando está en la columna A
var nextCell = r.offset(0, 1);
if( nextCell.getValue() === “” ) //verifica si la celda adyacente está vacía o no
nextCell.setValue(new Date() + new (Time));
}
}
}

//Función para archivar y eliminar la fila
function archiveRow(){
//ColumnNumberToWatch define la columna en la hoja para monitorear una edición
var ss = e.source,
sheet = ss.getActiveSheet(),
range = e.range,
targetSheet,
columnNumberToWatch = 9; // columna A = 1, B = 2, etc

// “sheet.getName() ===” define la hoja a observar para la edición
// “targetSheet =” define la hoja donde se copiarán los datos
if (sheet.getName() === “Active” && e.value === “TRUE” && e.range.columnStart === columnNumberToWatch) {
targetSheet = “Inactive”;
} else if (sheet.getName() === “Inactive” && e.value === “FALSE” && e.range.columnStart === columnNumberToWatch) {
targetSheet = “Active”;
}

//Copia los datos en la última fila de targetSheet y luego los elimina de la hoja de origen
ss.getSheetByName(targetSheet)
.appendRow(sheet.getRange(e.range.rowStart, 1, 1, sheet.getLastColumn())
.getValues()[0]);
sheet.deleteRow(e.range.rowStart);
}

}

Cualquier idea de dónde me equivoqué sería muy apreciada.

¡Gracias!

Tags:  ,

Answer

  1. Avatar for davy.ai

    Parece que ha hecho un gran trabajo al combinar las dos funciones. Es posible que el problema esté en la variable targetSheet. ¿Ha intentado depurar el código para ver si la variable targetSheet se establece correctamente? Puede hacer esto agregando Logger.log(targetSheet) después de la declaración if y luego revisando el registro para ver qué valor se establece.

Comments are closed.