Google Sheets-Apps Script, eliminar celdas con base a una condición o dato especifico

Поділитися
Вставка
  • Опубліковано 4 гру 2024

КОМЕНТАРІ • 34

  • @CabfamCabrera
    @CabfamCabrera Місяць тому +1

    Gracias por el Vidrio
    Si puedes ampliar mas la zona donde escribes sería de agradecer.
    Me encanta como lo explicas ayuda mucho, casi sin conocimientos en Sheets.

    • @carlosg89
      @carlosg89  Місяць тому

      El tema del zoom fue algo de falta de experiencia 😅😅, es uno de mis primero videos, pero los siguientes videos ya tienen la corrección, me encanta que te sirva el video y la idea es que podamos sacar el mayor provecho a las herramientas sin necesidad de ser unos expertos, saludos.

  • @Orthon
    @Orthon 2 роки тому +4

    Muchísimas gracias por tu ayuda.
    Te comento que en mi caso el parámetro era númerico, un cero "0" y cuando lo ejecuté no obtuve ningún resultado.
    Eliminé dos simbolos igual == y me quedé sin practicamente filas (me borró todas menos una). Finalmente dejé dos simbolos = así: if(rangodata[i][0] == "0") y me funcionó correctamente borrando la única fila que cumplia esa condición.
    Lo comento por si algien se encuentra con un problema parecido.
    Muchas gracias + LIKE == Subcripción.

    • @carlosg89
      @carlosg89  2 роки тому

      Hola Orthon, excelente tú aporte, mil gracias

  • @diegojesusmelgarchacon4987
    @diegojesusmelgarchacon4987 4 місяці тому +1

    Hola Carlos, buenos dias. Porfavor podrias hcer un video donde se elimine una fila en base a un dato duplicado en una columna. gracias

    • @carlosg89
      @carlosg89  4 місяці тому

      Hola Diego, claro que sii, sus aportes son muy importantes para que podamos construir conocimiento juntos

  • @jaimepelegri5475
    @jaimepelegri5475 Рік тому

    Hola Carlos, excelente video. Gracias. Tengo la siguiente consulta: si la condición es que elimine las fechas anteriores a seis meses antes de la fecha de la última fila? como se pondría. No sé cómo trabajar el formato fecha en App Script. Gracias!

    • @carlosg89
      @carlosg89  Рік тому +1

      Hola Espero te encuentres muy bien, un código que te puede servir es este
      function eliminarFilasAnterioresSeisMeses() {
      // Obtener la hoja de cálculo activa
      var hoja = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();

      // Obtener los datos de la hoja de cálculo
      var datos = hoja.getDataRange().getValues();

      // Obtener la última fecha en la última fila de la hoja
      var ultimaFila = datos[datos.length - 1];
      var fechaUltimaFila = ultimaFila[0]; // Asumiendo que la fecha está en la primera columna

      // Calcular la fecha seis meses antes
      var fechaSeisMesesAntes = new Date(fechaUltimaFila);
      fechaSeisMesesAntes.setMonth(fechaSeisMesesAntes.getMonth() - 6);

      // Iterar sobre las filas y eliminar las que cumplen la condición
      for (var i = datos.length - 1; i >= 0; i--) {
      var fechaActual = new Date(datos[i][0]); // Asumiendo que la fecha está en la primera columna

      // Comparar con la fecha seis meses antes de la última fila
      if (fechaActual < fechaSeisMesesAntes) {
      hoja.deleteRow(i + 1); // +1 porque las filas en hojas de cálculo comienzan desde 1
      }
      }
      }
      var fechaSeisMesesAntes = new Date(fechaUltimaFila);: Aquí se crea un nuevo objeto Date en JavaScript utilizando la fecha que se encuentra en la variable fechaUltimaFila. La función new Date() crea un objeto de fecha y hora en función del valor proporcionado. En este caso, fechaUltimaFila debería contener la fecha de la última fila de tu hoja de cálculo.
      fechaSeisMesesAntes.setMonth(fechaSeisMesesAntes.getMonth() - 6);: Esta línea ajusta la fecha del objeto fechaSeisMesesAntes restando 6 meses al mes actual.
      fechaSeisMesesAntes.getMonth() devuelve el mes actual del objeto Date (0 para enero, 1 para febrero, ..., 11 para diciembre).
      fechaSeisMesesAntes.setMonth(...) establece el mes del objeto Date al valor proporcionado.
      En este caso, resta 6 al mes actual, lo que significa retroceder seis meses en el tiempo. Esto se hace para obtener la fecha que está exactamente seis meses antes de la fecha de la última fila en tu hoja de cálculo.

  • @alexispablojoseescobar4675
    @alexispablojoseescobar4675 Рік тому +1

    Hola, excelente video, es posible borrar las celdas de al lado de la columna que cumpla tal condición ?

    • @carlosg89
      @carlosg89  Рік тому

      Hola Alexis, lo que puedes hacer es que dentro del if cambiar la variable que elimina las filas sheet.deleteRow(), por la variable *const borrar = ss.getRange("Rango de cel das a borrar").clearContent();* en este caso, está evaluando la condición en "E:E" y el rando de celdas a borrar podría ser "F:F", además te dejo un video en el cual borramos contenido de celdas por si te sirve ua-cam.com/video/5bJMlzdWL9g/v-deo.html espero que con esto pueda resolver tú duda o de lo contrario me puedes volver a escribir, mil gracias y cuidate.

    • @alexispablojoseescobar4675
      @alexispablojoseescobar4675 Рік тому

      ​@@carlosg89 Muchas gracias por tu respuesta, el codigo seria el siguiente :
      function DEL_CR1() {

      const sheet = SpreadsheetApp.getActiveSpreadsheet();
      const ss = SpreadsheetApp.getActiveSpreadsheet();

      const rangodata = sheet.getRange("E:E").getValues();

      for(let i = rangodata.length-1;i >= 0;i--) {

      if(rangodata[i][0] === "SI") {
      const borrar = ss.getRange("F:F").clearContent();
      //sheet.deleteRow(i+1)
      }
      }
      }
      De esta manera me borra toda la columna completa "F".
      Lo que estoy buscando es que borre solamente las celdas de la columna "F" que cumplan con el criterio del "SI" de la columna E.
      aguardo su respuesta, muy amable.

    • @luankalua
      @luankalua Рік тому

      @@alexispablojoseescobar4675 Lo resolviste?

  • @cformica81
    @cformica81 8 місяців тому

    Buenos dias Excelente video. Consulta y si quiero borrar filas que contenga una palabra especifica dentro de frases?

    • @carlosg89
      @carlosg89  8 місяців тому

      Hola, espero te encuentres muy bien, lo que puedes hacer es que en el bucle no pones === en lugar de eso pones == saludos y quedo atento

  • @ElenaSepulveda-ec9mh
    @ElenaSepulveda-ec9mh 3 місяці тому +1

    Buenas tardes estimado. Estoy con el siguiente dilema. Tengo una hoja1 principal donde trabajo con nombre, origen,destino y otras columnas. Tengo otra hoja2 que trabajo con IMPORTRANGE para extraer ciertas columnas que son el nombre, origen y destino. agrego una nueva columna que se llama saldo. Anoto los gasto que tienen cada nombre. El problema que se me genera que al momento de eliminar una fila de la hoja1 principal se elimina automaticamente en la hoja2. Pero queda el saldo en la columna llamada saldo. Como puedo hacer que si borro una fila de la hoja1 tambien se borre completo en la hoja2. Quedo atento a su comentario.

    • @carlosg89
      @carlosg89  3 місяці тому +1

      Hola Elena, esto se debe a que el Importrange, es un espejo de datos de la hoja de origen, al eliminar los datos de origen en el destino también, ahora bien, como los datos de la columna saldo no son desde el origen si no que son propias de la hoja dos, por eso no se borra por completo, yo te recomiendo que por medio de app script copias datos de un origen a un destino, le agregas un disparador automático para que el script se ejecute solo, le configuras cada cuanto o en que momentos quieres que corra, le pones el saldo en la hoja destino y al script le agregamos un for con un condicional para que busque los datos en el origen y si no lo encuentra elinime toda la fila de la hoja 2, para esto necesitas una llave, puede ser el nombre, debe ser un dato que este en las dos hojas.

  • @luankalua
    @luankalua Рік тому

    Excelente video. Gracias por compartir tu conocimiento :). no me pierdo tus videos.
    Tengo 2 preguntas*
    Primera pregunta: es posible en if(rangodata[i][0] == "Paraguay") colocar un rango en vez de "Paraguay", por ejemplo texto que se tiene en celda "A1".
    Segunda pregunta: en const rangodata = sheet.getRange("D:D").getValues(); como puedo hacer para que funcione desde "D8:D"
    muchas gracias

    • @carlosg89
      @carlosg89  Рік тому

      Hola Luan, espero te encuentres muy bien. Respuesta a la primera pregunta: creas una variable similar a la que hemos nombrado "rangodata" y dentro de las comillas del método getRange colocas el rango a evaluar, por ejemplo: const rangodata2 = sheet.getRange("A:A").getValues(); y luego en lugar de poner "Paraguay" en el if, pones el nombre de la variable creada, así se evaluaran los valores de ambas variables y cuándo dichos valores sean iguales se ejecutará el bucle que elimina las celdas, ejemplo: if(rangodata[i][0] === rangodata2[i][0] ), ten presente que los formatos deben ser iguales, por ejemplo los datos de la columna A y D deben ser tipo texto todos o número. La respuesta a la segunda pregunta: const rangodata = sheet.getRange("D8:D").getValues(); solo cambias el rango, el método getRange es para obtener un rango de datos y dicho rango se puede iniciar y finalizar donde desees. Me encató saludarte, espero sean útiles estás respuestas, quedo atento a cualquier otra inquietud.

  • @cris.venture
    @cris.venture Рік тому +1

    mil gracias, y si quiero borrar filas iguales de todas las hojas de un libro, que código usaría para llamar todas las hojas a la vez y no hacerlo una por una?

    • @carlosg89
      @carlosg89  Рік тому

      Hola Cristian intenta con este código:
      const hojas = ['hoja 1','hoja 2'];
      const activarhojas = hojas.map((nombre) => SpreadsheetApp.getActiveSpreadsheet().getSheetByName(nombre));
      Lo que se hace en el anterior código es que se realiza un arrego(Array) con las hojas que quieres que se activen, luego mapeas esos nombres y utilizas los métodos de SpreadsheetApp - getActiveSpreadsheet - getSheetByName, para activar dichas hojas, luego creas una variable para llamar le rango en especifico de las pestañas que si es igual para todas las hojas es igual a la que hemos llamado rangodata solo que en lugar de llamar la variable sheet llamas a la variable const activarhojas y listo. Intenta y si tienes dificultades me puedes volver a escribir, saludos

  • @RedPillGym
    @RedPillGym 8 місяців тому

    Se pueden ocultar filas con un boton? o con checkbox?

    • @carlosg89
      @carlosg89  8 місяців тому

      Hola, espero te encuentres muy bien, te comparto un código que crea un botón en la barra de opciones de la google sheet con las funciones de mostrar y ocultar filas, espero te sirva, saludos.
      function onOpen() {
      var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
      var menuItems = [
      {name: 'Ocultar Filas', functionName: 'ocultarFilas'},
      {name: 'Mostrar Todas las Filas', functionName: 'mostrarTodasLasFilas'}
      ];
      spreadsheet.addMenu('Filas', menuItems);
      }
      function ocultarFilas() {
      var sheet = SpreadsheetApp.getActiveSheet();
      var selection = sheet.getSelection();
      var range = selection.getActiveRange();
      if (range.getNumRows() > 0) {
      // Oculta las filas seleccionadas
      range.activate();
      range.offset(0, 0, range.getNumRows()).activate();
      sheet.hideRows(selection.getActiveRange());
      } else {
      Browser.msgBox('Selecciona al menos una fila para ocultar.');
      }
      }
      function mostrarTodasLasFilas() {
      var sheet = SpreadsheetApp.getActiveSheet();
      sheet.showRows(sheet.getRange(1, 1, sheet.getMaxRows(), 1));
      }

  • @tox-on.2239
    @tox-on.2239 Рік тому

    Como se que numero representa la columna G, en el video mencionas que la columna E es representada con el numero 0 pero yo no se cual numero es el de la columna E

    • @carlosg89
      @carlosg89  Рік тому

      Hola, espero te encuentres bien, en este caso hablamos de una arreglo o matriz de datos, cuándo trabajamos con estas, el primer índice con el que se identifica la primera columna de la matriz es cero, por ejemplo si tengo una matriz de dos columnas A y B el índice 0 es la columna A y el indice 1 es la B, en el video tenemos un rango que capturamos en una variable que es G:G, como es una la primera columna del arreglo y también la única entonces su índice es 0, vuelvo a poner el ejemplo, supongamos que el rango que capturamos en la variable es A:B y quiero evaluar la condición en A entonces en el IF pongo [i] para recorrer todas las filas y [0] para recorrer la columna A, con esto el código sabe que debe ir a evaluar la primera columna del rango A:B, si quisiera evaluar una condición en B entonces pongo [1] que representa la segunda columna del arreglo, si tu primera columna es la G entonces el indice es 0, si es la segunda entonces es 1 y así sucesivamente. Espero mi explicación te sirva, saludos.

  • @PAAC6421
    @PAAC6421 2 місяці тому

    Al anotar la función for tal cual la escribes, me dice que tengo un error de sintaxis, podrias ayudarme.

    • @carlosg89
      @carlosg89  2 місяці тому

      Hola, espero te encuentres bien, claro que si, comparte tu código por favor para verificar cuál es el error. saludos

  • @MiguelCanoDj
    @MiguelCanoDj 2 роки тому

    Como se puede hacer para que se ejecute siempre?

    • @carlosg89
      @carlosg89  2 роки тому

      Hola Miguel, se puede agregar un activador por tiempo y se configura si deseas que se ejecute cada minuto o cada hora, lo recomendable es cada hora, la otra opción es agregar un activador "De una hoja de cálculo" y se puede configurar que el script se ejecute al abrirse la hoja, al editarse, al producirse un cambio. Te dejo el video de cómo se implementan activadores ua-cam.com/video/bvAOQKSb5kw/v-deo.html

    • @cris.venture
      @cris.venture Рік тому

      podrías usar la function onEdit(), esta te permite que se active el codigo cuando halla una modificacion.

  • @alexdesupercool2291
    @alexdesupercool2291 2 роки тому +1

    Hiciste la de dato específico, pero te falto en base a una CONDICIÓN 🙄

    • @carlosg89
      @carlosg89  2 роки тому

      Hola Alex, gracias por tu comentario, es muy importante, dime si tienes en mente alguna condición, para ingresarla al código y así poder complementar el video. mil gracias

  • @marcosantoniobustos5715
    @marcosantoniobustos5715 Рік тому

    Hay que tener compu para configura un celu 😁

    • @carlosg89
      @carlosg89  Рік тому

      Hola Marcos, si señor, el Script se debe realizar en un ordenador

    • @marcosantoniobustos5715
      @marcosantoniobustos5715 Рік тому

      @@carlosg89 yo lo puedo hacer desde mi celular todo lo que hace una computadora y mucho mas con mis modificaciones y en menos tiempo tal asi que tiene red independiente amigo , me modifique y saque todos los productos sea de google o microsotf , Exel , window