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.

Mover una fila completa basándose en el valor de una celda en Google Sheets, scripts de apps.

Tengo el siguiente código para mover una fila completa basada en un menú desplegable, sin embargo, el código no funciona para las filas que se agregan a través de un formulario de Google. ¿Alguien tiene alguna idea de por qué esto podría estar sucediendo?

El código que estoy usando es el siguiente:

function onEdit(e) {
  const src = e.source.getActiveSheet();
  const r = e.range;
  if (r.columnStart != 12 || r.rowStart == 1 ) return;
  const dest = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(e.value);
  src.getRange(r.rowStart,1,1,12).moveTo(dest.getRange(dest.getLastRow()+1,1,1,12));
  src.deleteRow(r.rowStart);
}

La hoja a la que quiero mover las filas se titula “printed” y el menú desplegable está en la columna L. La única opción disponible en el menú desplegable es “printed”. Las filas se actualizarán a través de un formulario de Google.

Esto es cómo se ve la hoja de cálculo: Enlace a imagen

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Es probable que el código no funcione para las filas agregadas a través de un formulario de Google porque el desencadenador onEdit solo se activa cuando un usuario edita manualmente una celda en la hoja. Dado que las filas agregadas a través de un formulario de Google no se editan manualmente, el desencadenador no se activa y el código no se ejecuta.

    Una solución a este problema sería utilizar un desencadenador diferente, como un desencadenador de envío de formulario. Esto permitiría que el código se ejecute cada vez que se agregue una nueva presentación de formulario a la hoja, independientemente de si se edita o no una celda manualmente.

    Para configurar un desencadenador de envío de formulario, ve al editor de scripts y haz clic en el menú “Editar”, luego selecciona “Desencadenadores del proyecto actual”. Desde aquí, haz clic en el botón “+ Agregar desencadenador” y elige las siguientes opciones:

    • Seleccionar qué función ejecutar: onFormSubmit
    • Seleccionar qué implementación se debe ejecutar: ‘Principal’
    • Seleccionar origen del evento: Desde la hoja de cálculo
    • Seleccionar tipo de evento: Al enviar el formulario

    Luego haz clic en guardar.

    A continuación, reemplaza la función onEdit existente con la siguiente función onFormSubmit:

    function onFormSubmit(e) {
      const destName = "impreso";
      const sheet = e.range.getSheet();
      if (sheet.getName() != destName) return;
      const src = sheet.getParent().getSheetByName("Respuestas del formulario 1");
      const dest = e.source.getSheetByName(destName);
      src.getRange(e.range.getRow(),1,1,12).moveTo(dest.getRange(dest.getLastRow()+1,1,1,12));
      src.deleteRow(e.range.getRow());
    }
    

    Esta función se ejecutará cada vez que se agregue una nueva presentación de formulario a la hoja y moverá cualquier fila con el destino establecido en “impreso” a la hoja correspondiente.

    Nota: la función asume que su hoja de respuestas de formulario se llama Respuestas del formulario 1. Si su hoja tiene un nombre diferente, asegúrese de reemplazar este valor en la variable src.

Comments are closed.