El siguiente script se ejecuta cada vez que se edita cualquier celda en la columna E (por lo tanto, matriz [4] ). Y su único propósito es agregar información adicional a las siguientes celdas vacías de la fila que se ha editado. Pero en lugar de simplemente agregar esta información a las siguientes celdas que están vacías en la misma fila, mi secuencia de comandos está restableciendo los valores de todas las celdas posteriores, incluso si estas celdas posteriores ya tienen algunos valores en ellas. ¿Puede alguien decirme qué estoy haciendo mal aquí y cómo solucionarlo? Es obvio que estoy haciendo algo mal en mi declaración IF , pero honestamente no tengo idea de qué podría ser :(
Muchas gracias de antemano por vuestra ayuda y consejos!!!
Aquí está el guión:
function addAdditionalInfo() { var ss = SpreadsheetApp.getActiveSpreadsheet(); var s = ss.getSheetByName('SHEET_ID'); var data = s.getDataRange().getValues(); var data_len = data.length; for (var i = 0; i < data_len; i++) { if (data[i][4] == "COMPLETED") { s.getRange(i + 1, 6).setValue("name"); s.getRange(i + 1, 7).setValue("street"); s.getRange(i + 1, 8).setValue("street number"); s.getRange(i + 1, 9).setValue("zip code"); s.getRange(i + 1, 10).setValue("country"); s.getRange(i + 1, 11).setValue("maternal language"); s.getRange(i + 1, 12).setValue("second language"); s.getRange(i + 1, 13).setValue("-"); } else if (data[i][4] == "APPROVAL") { s.getRange(i + 1, 6).setValue("name of supervisor)"); s.getRange(i + 1, 7).setValue("email of supervisor"); s.getRange(i + 1, 8).setValue("tel of supervisor"); s.getRange(i + 1, 9).setValue("maternal language of supervisor"); s.getRange(i + 1, 10).setValue("second language of supervisor"); s.getRange(i + 1, 11).setValue("assistant of the supervisor"); s.getRange(i + 1, 12).setValue("status of the approval process"); s.getRange(i + 1, 13).setValue("approval due date"); } } }Y aquí está el disparador:
// The trigger is any manual change done in Column E, starting at row 3 of that column function onEdit(e) { if ( e.source.getSheetName() == "SHEET_ID" && e.range.columnStart == 5 && e.range.columnEnd == 5 && e.range.rowStart >= 3 && e.range.rowEnd <= 3000 ) { addAdditionalInfo() } }Tratar de recorrer toda la hoja es una mala idea, ya que este script se maximizará después de 30 segundos.
En mis pruebas, utilicé una validación en la columna 5 usando la lista COMPLETED,APPROVAL
function onEdit(e) { e.source.toast('entry') const sh = e.range.getSheet(); if (sh.getName() == 'Sheet0' && e.range.columnStart == 5 && e.range.rowStart > 2) { e.source.toast('completed'); if (e.value == "COMPLETED") { sh.getRange(e.range.rowStart, 6, 1, 8).setValues([["name", "street", "street number", "zip code", "country", "maternal language", "second language", "-"]]); } if (e.value == "APPROVAL") { e.source.toast('approval') sh.getRange(e.range.rowStart, 6, 1, 8).setValues([["name of supervisor", "email of supervisor", "tel of supervisor", "maternal language of supervisor", "second language of supervisor", "assistant of the supervisor", "status of the approval process", "approval due date"]]); } } }Hoja0: