Códigos más eficientes en Google Apps Script: Cómo recorrer una tabla de Google Sheets con arreglos
Вставка
- Опубліковано 5 жов 2024
- A medida que hacemos códigos más complejos en Google Apps Script que deben recorrer tablas grandes, vamos a encontrarnos con que debemos buscar formas mas eficientes de recorrer nuestras tablas
Hoy te muestro como usar arreglos para hacer códigos mucho más poderosos y rápidos en Google Apps Script
👍 Si te ha gustado este video, te encantará el curso gratis "Aprende Google Sheets en 2 horas". Aquí puedes obtener acceso juansguzman.co...
📋 Puedes encontrar el código y la plantilla de este video (y los más de 350 videos del canal) inscribiéndote en un plan mensual o anual en mi membresía JuanSGuzman - juansguzman.com
🎓Allí mismo, encontrarás un curso completo de Crear Formularios de Forms desde Sheets asi como más de 75 cursos completos de Sheets, Forms y Apps Script. Aquí puedes verlo juansguzman.co...
☎️ Si necesitas asesoría personalizada, ofrezco algunas horas a la semana de este servicio. juansguzman.co...
🔔 Suscríbete al canal donde recibirás nuevos videos semanales de Sheets, Forms, Apps Script y más.
Aquí algunos canales donde me puedes seguir y apoyar:
📨 - Newsletter: juansguzman.co...
➤Patreon: juansguzman.co...
➤Telegram: juansguzman.co...
➤Instagram: juansguzman.co...
ⓕ - Facebook: juansguzman.co...
➤Tiktok: juansguzman.co...
𝕏 - (Twitter): juansguzman.co...
Cualquier sugerencia, pregunta o inquietud, te invito a comentar más abajo
Como desarrollador puedo decir que tu contenido es espectacular. Seguí así! Gracias y saludos desde Argentina.
Mil gracias Matias
Dos palabras:
Eficiente 💪🏻🔥
Profesional 😎
Amo ver estos códigos y aprender 🥹
Hola!
Que amables palabras! Mil gracias!
Saludos!
Amigo, muchisimas gracias por la explicaciónde arreglos, excelente.
Hola!
Que amables palabras! Mil gracias!
Saludos!
Excelente forma de aprender Javascript, haciendo uso de Google Apps Script y Sheets.
Hola!
Que amables palabras! Mil gracias!
Saludos!
Que Barbaridad, que buenos arreglo. Llega justo cuando requerí hacer algo así ¡¡¡ Impreshionante!!!
Hola!
Que amables palabras! Mil gracias!
Saludos!
Muchas gracias Juan! Estoy aprendiendo un montón con tus videos.
Excelente!
Excelente clase de arreglos, muchas gracias Amigo.
Hola!
Que amables palabras! Mil gracias!
Saludos!
Muchas gracias por el vídeo, por fin aprendí que significa i en for ;-) Y también aprendí el poder de los arreglos. Mil gracias!
Hola!
Que amables palabras! Mil gracias!
Saludos!
Didático como sempre. Adoro seus vídeos Juan. Já conhecia os métodos mas ver nessa explica ao melhorou meu entendimento. Muito obrigado.
Mil gracias Luciano!
Excelente como siempre!
Muchas gracias!
Hola, Juan he aprendido un monton con tus videos, y aprovecho para pedirte un favor de casualidad tienes un video donde muestre como eliminar la información para así recalcular.
Hola!
No se si te refieres a algo como eto
ua-cam.com/video/TqgLVszdRPQ/v-deo.html
Saludos!
Como siempre,simple y claro.
Mil gracias!
Excelente video Juan muchas gracias
Gracias a ti
Tus videos han captado toda mi atención muchísimas gracias, ¿Por lo que veo hace falta aprender javascript para tener mejores resultdos verdad?
Hola!
Pues la verdad es que los expertos de javascript que conozco que han empezado en Google Apps Script, la cogen rápidisimo y pueden hacer unas cosas impresionantes
Pero, si lo único que quieres hacer es GAS y Sheets no es tan necesario profundizar en javascript
Si quieres explorar programazión web y de apps y más, si te lo recomendaría
Saludos!
Juan, estoy tremendamente agradecido de ti, por tu ayuda, y por la calidad y profundidad que le imprimes a cada uno de tus tópicos. En este video nos enseñas a cómo optimizar código, con mejor código ! ... y eso no se aprende en todas partes. Sólo un granito de arena para retribuir: No es necesario que debas cronometrar el tiempo para poder comparar ambos códigos. Esto lo puedes ver en el editor de código del Apps Script, en el Panel de la Izquierda, en "Ejecuciones", donde se entrega una tabla con los datos de ejecución de cada función "lanzada", y específicamente en la 5ta columna se señala el tiempo exacto empleado en la ejecución de cada función 🙂. Un Abrazo, y nuevamente, Muchas Gracias Juan ... Desde Chile.... muy al Sur del Mundo, donde termina el mismo !. BYE. (Punta Arenas, Chile.).😉
Gran aporte!
Tienes toda la razón
Mil gracias!
@@JuanSGuzman estimado solo felicitarlo por sus videos, mil gracias... existe alguna forma de generar el número de fila manteniendo la letra de la celda por medio de un ciclo for?... lo e intentado y no se como concatenar la letra y el número que se genera en el ciclo for ... 'C' & i por ejemplo me da error
@@lucnic2012 Estas muy cerca
Es "C"+i
Saludos!
@@JuanSGuzman gracias Master
@JuanSGuzman Estimado se puede ejecutar un código App Script en forma inmediata al abrir una Sheets? por ejemplo que limpie un bloque especifico de la hoja apenas se abra una sheets google.
Una vez mas te agradezco todo el conocimiento que compartes, me has ayudado bastante a optimizar mi código.
Me surgió una duda y no encuentro información al respecto.
Tengo un ForEach que me trae varios datos, pero dos de ellos son colores. Mi duda es la siguiente: ¿Como puedo obtener el color de una celda en hexadecimal dentro de mi arreglo usando ForEach?
Hola!
Depende si es el color de fondo o del texto.
Para el de la celda intenta con .getBackground()
Saludos!
Muy bueno, muchas gracias.
Se pueden usar "Formatos condicionales con arreglos" ???
Tengo una hoja con varios formatos condicionales pero se demora mucho, se podrían ejecutar con arreglos ?
Hola!
Si se puede
Saludos!
Excelente! Gracias Juan, buen ejemplo!
Hola!
Que amables palabras! Mil gracias!
Saludos!
Master genio. Gracias
Gracias a ti!
Hola Guzmán! Lo primero de todo felicidades por tu canal! Tus videos me han sido de gran ayuda a la hora de crear mi propio proyecto web mediante apps script. En concreto este video me ha ayudado mucho a disminuir el tiempo de ejecución de varias de mis funciones pero aún necesito más... y es por lo que te pido ayuda ya que tengo un mapa mundial creado a partir de google slides utilizando la base de datos de una hoja de google. La idea es cambiar de color a las formas y cambiar los textos según el idioma seleccionado en las hojas de google pero la función tarda como 30 segundos y se hace muy tedioso para el usuario. La llamada a los objetos la hago mediante el id de los mismos pero tengo que hacer esta llamada al slidesapp con cada objeto y son mas de 100... Si me pudieras facilitar un correo para mandarte el proyecto te lo agradecería o si prefieres te podría pasar el mío. Te estaría eternamente agradecido si me pudieras ayudar con esta cuestión.
Hola!
Interesante proyecto
La verdad no domino mucho SlidesApp en este momento, este tema de arreglos funciona muy bien para tablas de Sheets pero en muchos otros casos no hay "atajos" y si te toca ir "uno por uno"
Mi correo es sebastian@juansguzman.com para lo que necesites
Saludos!
Hola Juan, los videos están excelentes. me puedes aclarar, como elevar un número a una potencia usando código en apps Script?
Hola!
Creo que hay una funcion en javascript que se llama pow
Saludos!
Excelente, me sirvió de mucho. Tengo una consulta: ¿ qué código de apps script funciona de igual manera que el "ScreenUptading" de VBA?
Creo que no hay un equivalente hasta donde tengo entendido
Saludos!
Todos aquellos que provengan de VBA/Excel deberían de saber que el manejo de arreglos es mas eficiente para procesar datos que acceder a celdas y lo mismo aplica para GAS/Sheets. En el manejo de arreglos es donde empieza a separarse un programador principiante de uno intermedio y eso sin mencionar que existen libros completos dedicados a estructuras de datos para optimizar la ejecución de aplicaciones. Otro observación por que seguir usando var desde el nuevo editor ya se puede utilizar let y const para tener mejores practicas con la declaración y uso de variables.
Gracias Luis por tus aportes
El tema con let y const es que para principiantes creo que es enredarlos un poco. Además que ni yo lo entiendo al 100% ;)
Pero tu siendo un programador avanzado, tienes toda la razón, para proyectos profesionales, y dado que GAS ya lo acepta, ese el estándar que se debería usar.
Gracias de nuevo!
@@JuanSGuzman todo lo contrario. Con let y const se evitan problemas futuros en cuanto al alcance (scoope) de variables. Si tengo tiempo hago un vídeo de ese tema... Pero sino sería un excelente video para ti canal. Saludos.
@@lacs83 Pues me encantaría si lo haces y me lo compartes. La verdad, no creo tener aun el conocimiento para hacerle justicia a esos conceptos, pero si lo hago te lo paso, para que me des tu feedback, ya que sabes mucho mas del tema. De nuevo mil gracias por el aporte. Estas conversaciones construyen conocimiento. Saludos!
Como siempre, soberbio. Un saludo.
Hola!
Que amables palabras! Mil gracias!
Saludos!
Tengo dos tablas una con columnas (numero de notas, venta, anticipo, saldo) que va de la nota 1 a la 1000 y en la otra tabla tengo las columnas (numero de notas, pago) esta ultima son los pagos de estas notas del dia. como puedo poner en la tabla 1 columna anticipo= la suma de esta columna, con la suma de la tabla 2 columna pago, tomando en cuenta que el codigo de la nota debe ser igual
Gracias por los cursos, me ha ayudando a automatizar mi empresa,
Hola Enrique
Aquí te dejo un video donde lo hago
ua-cam.com/video/-XM7wQ1_Xh8/v-deo.html
Un gran saludo!
Como es tu costumbre que gran vídeo, saludos . Cuando realizas un tutorial de App Sheets y ojala fuera de una lista de asistencia o control de entrada y salida empleados. Gracias de nuevo y ojala leas este comentario.
Colgado con AppSheet como con mil otros temas, jaja
Saludos!
¡Muy bueno el video! He aprovechado para actualizar algún script. Tengo una duda, Si hago push a dos valores resultados.push([title],[h1]); como hago para escribir en la plantilla estos dos valores en columnas separadas. Solo he logrado que salga un bajo el otro en filas diferentes. No encuentro la respuesta o no sé buscar la pregunta correcta. ¿Me puedes orientar? ¡Gracias!
Hola, ya vi el problema, resultados.push([title],[h1]); resultados.push([title, h1]); bien
Excelente que lo hayas solucionado!
Saludos!
Nos puedes dejar el Link para la Academia al vídeo avanzado de los arreglos? Gracias.
Claro que si
Aqui va
juansguzman.teachable.com/p/arreglos-google-apps-script
Saludos!
Muchas gracias por el contenido, aprendí bastante de como mejorar mis scritps en gs. Tengo una duda, es posible hacer algo similar, si lo que intento es entrar a 10 url y necesito tomar 1 valor de al menos 10 paginas dentro de cada url, intente varias formas de optimizarlo, desde matrices bidimencionales y no logro bajar el tiempo de 4-5 minutos de ejecución
Ahi creo que no te va a funcionar el metodo de arreglos, porque igual le va tocar ir a cada una de las urls, no hay forma de "agarrar" todas de un "sopetón"
Saludos!
@@JuanSGuzman Muchísimas gracias por responder
El SetFormula estaría interesante verlo.
Ya lo vimos por encima en este video
ua-cam.com/video/TqgLVszdRPQ/v-deo.html
Saludos!
@@JuanSGuzman me gustaría aprender arreglo que aplique formulas no arrastrar formula (aunque esta bueno es muy lento), saludos
@@DsCanalS Ya estoy haciendo un video, pero aquí te dejo otro que te puede servir
ua-cam.com/video/TqgLVszdRPQ/v-deo.html
Saludos!
Impresionante
Gracias!
Espectacular
Hola!
Mil gracias por las palabras!
Saludos!
Como puedo sumar totales de filas filtradas en apps script?, exitos!
Algo asi como la función subtotal?
Saludos!
Me Dan muchos problemas el desarrollo en appscriot en rl navegador de una tablet Android. Hay slguna app para desarrollar en Google appscript? Con visual studio? Gracias.
Como podría hacer esos arreglos, pero con una condición "if", es decir, que una vez que comienza a recorrer la tabla, realice la operación en función del valor de una casilla de verificación?. Si está marcada que haga la operación, y si no está marcada que no la haga. Gracias!!!
Lo anoto para la segunda parte.
Saludos!
Adorei o vídeo.
Hola!
Gracias a ti por tomarte el trabajo de comentar!
Saludos!
Dios Guzman, en un video vi un truco tuyo para cuando sucedia que el código va más rápido que la hoja. Hablaste del sleep, pero encontraste otro mejor que era algo de GETRANGE. Pero ahora no encuentro el video. ¿Me puedes recordar esto?
Gracias!
Hola!
Yo tampoco me acuerdo, jaja
Revísate este, que creo que es
ua-cam.com/video/t64C5GfkA70/v-deo.html
Saludos!
@@JuanSGuzman si ese es, gracias!+
@@juanjosecanorodriguez4518 Excelente!
En el video habló de un curso más avanzado de arreglos, pero no lo encuentro
Hola!
Ese curso lo encuentras en mi academia
juansguzman.com/academia
Un gran saludo!
Hola Juan, tengo una pregunta, como puedo hacer si la multiplicación la tengo que hacer en filas específicas, porque si yo pego el arregloventas en una columna, los valores anteriores se van a ver sobreescritos. Como podría hacer en ese caso?
Aquí te dejo un video que te puede dar luces
ua-cam.com/video/TqgLVszdRPQ/v-deo.html
Saludos!
Hola!
Arreglo es más rápido que QUERY o es igual?
Se me está poniendo muy lenta la hoja 😓
¿como hago parar que no se duplique datos al agregar un dato en hoja de cálculo con google app script?
Hola!
Nos tocaria cambiar un poco el código
Aquí te dejo un video similar pero con Forms
ua-cam.com/video/JSjEp75zaNA/v-deo.html
Saludos!
Hola buenos días desde España.
Tengo una hoja que bastantes datos y un script que envía correos si se cumplen varias condiciones. Al principio iba bien por que tenia pocas filas, pero ahora ya no le da tiempo a recorrer todas las filas y termina el tiempo de ejecución. ¿Con este tema de arreglos se pueden enviar también correos? ¿Cómo podría hacerse?
Gracias.
Hola!
Si se puede
En vez de usar un for, usas un forEach recorriendo el arreglo.
Pensé que lo tenía en algún video.
Lo anoto para uno próximo
Saludos!
@@JuanSGuzman Gracias por tu respuesta, he conseguido enviar los correos peeeeeero.... ahora no consigo poner una casilla de verificación en la fila desde la que se envió el correo. Me lo pone en todas las filas. ¿Podrías ayudarme por favor?
Gracias
@@El_Flipy Esa es más difícil, porque te toca crear un nuevo arreglo, o ahi si te tocaría ir linea por linea para chequear
Saludos!
We need this tutorial in ENGLISH 😤😡
I´ll work on it!
tengo una tabla con mas de 500000 registros, cuando lo recorre explota el google apps scripts :(((
jaja
500.000 registros es muchísimo para Sheets. Se me hace raro que te este funcionando sin problema
Que error te sale, el de que se pasó el tiempo?
Saludos!
@@JuanSGuzman no me lo corre, para ello tuve que hacerlo a través de un query, le pedi que lo incerte en una celda y que luego me capture el valor 🤓
Super la explicacion pero no he podido optimizar el siguiente codigo :( alguien que me ayude por favor:
function carpetaCursos() {
var libro = SpreadsheetApp.getActiveSpreadsheet()
var hoja = libro.getSheetByName("Cursos")
var filas = hoja.getLastRow();
for (var i = 2; i < filas + 1; i++) {
var grado = hoja.getRange(i, 1).getValue();
var carpetaGrado = hoja.getRange(i, 2).getValue();
var nombreCurso = hoja.getRange(i, 3).getValue();
var carpetaCurso = DriveApp.createFolder(nombreCurso);
var cursoId = carpetaCurso.getId();
var carpetaGradoId = DriveApp.getFolderById(carpetaGrado);
hoja.getRange(i, 4).setValue(cursoId);
carpetaCurso.moveTo(carpetaGradoId);
}
}
Hola!
Algo asi:
function carpetaCursos() {
var libro = SpreadsheetApp.getActiveSpreadsheet()
var hoja = libro.getSheetByName("Cursos")
var filas = hoja.getLastRow();
var datos= hoja.getRange(2, 1,filas-1,3).getValues();
var nuevaCol=[]
datos.forEach(fila=>{
var grado = fila[0]
var carpetaGrado = fila[1]
var nombreCurso = fila[2]
var carpetaCurso = DriveApp.createFolder(nombreCurso);
var cursoId = carpetaCurso.getId();
var carpetaGradoId = DriveApp.getFolderById(carpetaGrado);
nuevaCol.push([cursoId])
carpetaCurso.moveTo(carpetaGradoId);
})
hoja.getRange(2,4,filas).setValues(nuevaCol)
}
Saludos!
@@JuanSGuzman Muchas gracias por su colaboración.
@@andresdaza1028 Gracias a ti!
Hola Juan, me encatna tus videos y me han servido mucho, te concí en tu página web
tengo dos dudas, la primera es, tengo este codigo:
function onEdit() {
var archivo = SpreadsheetApp.getActiveSpreadsheet();
var hojaDatos = archivo.getSheetByName(«Reembolsos 15/10/2021»);
var filaActiva = hojaDatos.getActiveCell().getRow();
var columnaActiva = hojaDatos.getActiveCell().getColumn();
var hojaListas = archivo.getSheetByName(«Base de listas»);
if(filaActiva>1 && columnaActiva ==1) {
var detalles = hojaListas.getRange(2,8,hojaListas.getLastRow());
var desplegable = SpreadsheetApp.newDataValidation().requireValueInRange(detalles).build();
hojaDatos.getActiveCell().offset(0,29).setDataValidation(desplegable);
}
Pero necesito que en el if también tome en cuenta que sea solo fecha, eso es posible?
Por otro lado, se puede resaltar toda la fila de la celda seleccionada? Como en excel.
Gracias de antemano
Saludos.
Hola!
En cuanto a la primera pregunta, si se puede
Se podría hacer con algo asi
if(typeOf hojaDatos.getActiveCell().getValue()=='object')
Saludos!
gracias por este aporte Juan!!!
Hola!
Gracias a ti por tomarte el trabajo de comentar!
Saludos!
@@JuanSGuzman una duda crack, ¿por qué puede ocurrir que se ejecute un código en un libro y demore, por ejemplo, 1 minuto, y usando el MISMO código en un libro DISTINTO se demore 4 minutos?
@@arnifuentes7055 Hmmm
Habría que mirar que hace el código.
Lo estas ejecutando en dos archivos de tu propiedad?
En el mismo computador?
Saludos!
@@JuanSGuzmanmuchas gracias. Estoy ejecutando el script en un archivo con mi cuenta personal de gmail, y por otro lado estoy ejecutando este mismo script en otro archivo con el correo que me proporcionó la empresa, todo esto en el mismo computador.
@@arnifuentes7055 Hmmm, no sabría decirte. Dependería si es el mismo usuario, si la base es mas pesada. Interesante! Saludos!