Google Sheets Recuperar fila de columna seleccionada

Iniciado por Enemy, 6 Septiembre 2021, 17:45 PM

0 Miembros y 1 Visitante están viendo este tema.

Enemy

Buenas gente, ando trabajando con una sheet y estoy tratando de automatizarla bastante.

Lo que intento hacer es que, al escanear una columna (con casillas de verificaciones), si el valor es verdadero, que busque en esa misma fila y recupere datos de determinadas columnas, no se si me explico.



Que un For escanee la columna Alertar, si es verdadero, que recupere en una variable o en otra celda de otra hoja, los datos de las columnas, Tarea, Area y Contacto (concatenadas).

Alguien tiene idea que metodos debo usar para recuperar dicha informacion?

pd: Olvide aclarar que intento hacerlo desde el editor de comandos.

Gracias.


Enemy

Cita de: B0xm4n en  7 Septiembre 2021, 04:17 AM
creo que este video te puede ayudar

https://www.youtube.com/watch?v=8Tr-z8AtBrc

Ahora lo miro pero no estoy muy seguro de que sirva, eso es excel y yo estoy trabajando sobre google sheets. Aparte lo necesito en GAS, google app script, es decir, el lenguaje de programacion que utiliza google sheets. Necesito manejarme con funciones.

En serio no hay gente con conocimientos en esto??

EdePC

Saludos,

Tal cual lo has mencionado puedes usar un For sobre la columna de Checks y si tiene el check copiar los datos a otra Hoja. Yo suelo trabajar con Rangos de Datos de tal manera que solo indexo los datos que necesito consultar:

Código (javascript) [Seleccionar]
function myFunction() {

  var ss = SpreadsheetApp.getActiveSpreadsheet()
  var dt = ss.getRange("Hoja 1!A2:E4")

  for (var i = 1; i <= dt.getNumRows(); i++) {
    if (dt.getCell(i,5).isChecked) {
      var tarea = dt.getCell(i,1).getValue()
      var area = dt.getCell(i,3).getValue()
      var contacto = dt.getCell(i,4).getValue()
      var f = ss.getSheetByName("Hoja 2").getLastRow() + 1
      ss.getRange("Hoja 2!A" + f).setValue(tarea + " " + area + " " + contacto)
    }
  }
}


3. Pongo en una variable el Documento de Google Sheets actual (Active SpreadSheet)
4. Pongo en una variable el Rango de datos que con los que voy a trabajar, en mi caso en la Hoja 1 solo tengo tres registros (filas) para realizar mi ejemplo ("Hoja 1!A2:E4")
6. Con un For recorro todas las Filas (Rows) de mi Rango
7. Compruebo que la Celda 5 (la de los Checks) esté checkeado
8, 9, 10. Guardo en variables los datos de mi Rango que corresponden a la Fila actual (tarea, area y contacto)
11. Calculo la última celda vacía de la "Hoja 2" para poner ahí los datos
12. Copio los datos concatenados en un Rango precalculado en el paso anterior

Datos del ejemplo:



Resultados:


Enemy

#4
Cita de: EdePC en  7 Septiembre 2021, 19:16 PM
Saludos,

Tal cual lo has mencionado puedes usar un For sobre la columna de Checks y si tiene el check copiar los datos a otra Hoja. Yo suelo trabajar con Rangos de Datos de tal manera que solo indexo los datos que necesito consultar:

Código (javascript) [Seleccionar]
function myFunction() {

 var ss = SpreadsheetApp.getActiveSpreadsheet()
 var dt = ss.getRange("Hoja 1!A2:E4")

 for (var i = 1; i <= dt.getNumRows(); i++) {
   if (dt.getCell(i,5).isChecked) {
     var tarea = dt.getCell(i,1).getValue()
     var area = dt.getCell(i,3).getValue()
     var contacto = dt.getCell(i,4).getValue()
     var f = ss.getSheetByName("Hoja 2").getLastRow() + 1
     ss.getRange("Hoja 2!A" + f).setValue(tarea + " " + area + " " + contacto)
   }
 }
}


3. Pongo en una variable el Documento de Google Sheets actual (Active SpreadSheet)
4. Pongo en una variable el Rango de datos que con los que voy a trabajar, en mi caso en la Hoja 1 solo tengo tres registros (filas) para realizar mi ejemplo ("Hoja 1!A2:E4")
6. Con un For recorro todas las Filas (Rows) de mi Rango
7. Compruebo que la Celda 5 (la de los Checks) esté checkeado
8, 9, 10. Guardo en variables los datos de mi Rango que corresponden a la Fila actual (tarea, area y contacto)
11. Calculo la última celda vacía de la "Hoja 2" para poner ahí los datos
12. Copio los datos concatenados en un Rango precalculado en el paso anterior

Datos del ejemplo:



Resultados:



Muchisimas gracias! lo acabo de probar y funciona muy bien! El unico detalle es que al repetir la funcion, o sea su ejecucion, las tareas se guardan debajo de lo que ya habia, pero ahora reviso el codigo para ver como modificarlo.

Recien hoy veo tu msj y hasta hoy tenia este codigo que venia armando:

Código (javascript) [Seleccionar]
function ObtenerTareas() {
 var ss = SpreadsheetApp.getActiveSpreadsheet();
 var sheet = ss.getSheetByName('Hoja 1');
 var data = sheet.getDataRange().getValues();
 var mensaje; // CONTENEDOR ACUMULATIVO DEL MENSAJE

 mensaje = "Hay que ";

 for(var i=1;i<10;i++){ // En realidad hasta el final de la hoja
  var fila = data[i][5]; // COLUMNA CON LAS CASILLA DE VERIFICACION

   if(fila == "VERDADERO") {
     if (data[i][4] != "terminado") {
       mensaje = mensaje & data[i][1] & " en " & data[i][] & ", " & data[i][4]; // caracter(10) para el salto de parrafo, probar '\n'
     }
   }
 Logger.log(fila);
 }
 Logger.log(mensaje);
}


Queria ir acumulando las tareas, una sobre otra, dentro de la misma celda pero no sabia bien como insertar el salto de parrafo, de todas manera me estaba faltan como seleccionar una celda en particular de la otra hoja.

por ejemplo:

a1: mensaje
a2:
colocar antena bromatologia viviana
problemas con dns mayordomia ezequiel
etc
etc

se entiende? la celda a la que iria el cumulo de texto seria a2, despues tengo otro algoritmo que va a trabajar con esa celda en particular.

Y como veras en mi codigo, la idea es que se envien las tareas que no esten como estado, "terminado", porque son tareas a realizar.

Enemy

#5
jajaj ya le encontre la falla. Me falta agregar el salto de parrafo nomas. No se como insertar el caracter 10

pd: ya está, es "\n".

Gracias gente