Ejemplos de Google Apps Script en Google Sheets

Ejemplos de macros en Google Sheets (Google Apps Script).

Abre una hoja nueva de Google Sheets (la puedes crear desde este link, considera que es necesaria una cuenta de Google). Cambia el nombre de la primera hoja, usa el nombre “ejemplo“. Después ve al menú de herramientas, ahí está el editor de scripts:

Google Apps Script

Copia el código mostrado abajo, y pégalo en el editor; guarda el código (click en el ícono de guardar, usa el nombre que quieras):

Google Apps Script



Código:


Si ya guardaste el código, ahora solo agrega un nombre al archivo. Aquí usaremos “Simple trigger”:

Google Apps Script

Cierra la ventana/archivo, y localiza tu archivo en Google Drive. Ábrelo. Al abrirse se ejecutará la primera macro. onOpen.

Google Apps Script

Ejemplos descargables de macros en Google Sheets (Google Apps Script).

0. onOpen.

Se trata de un trigger básico: una macro que se ejecuta cuando se abre un archivo. La acción que ejecuta es la crear un menú personalizado con algunos otros componentes.

function onOpen…

1. Activar una hoja específica al inicio. Este es el tramo de código que activa la hoja especificada. Puedes cambiar esta macro cambiando el valor de inicio (nombreDeHojaDeInicio).

… var hojaQueSeActivaraAlInicio = SpreadsheetApp.getActiveSpreadsheet();
SpreadsheetApp.setActiveSheet(hojaQueSeActivaraAlInicio.getSheetByName(nombreDeHojaDeInicio)); …

2. Mostrar un mensaje/alerta en la parte inferior. Se trata de una función personalizada (ve el detalle al final del código).

mostrarMensajeDeEspera(“Cargando, por favor espere…”, 60);

3. Crear un menú personalizado (incluyendo sub menú).

SpreadsheetApp.getUi().createMenu(“MENÚ PERSONALIZADO”)
.addItem(‘OPCIÓN UNO’, ‘macroUno’)

.addSeparator()
.addSubMenu(SpreadsheetApp.getUi().createMenu(‘OPCIÓN CUATRO’)

.addToUi();

4. Las opciones individuales muestran mensajes al usuario. Se trata de un mensaje básico:

Browser.msgBox(“Esta es la macro uno”);

5. Macro que hace un conteo de celdas ocupadas. El límite es de 2 millones de celdas por libro. Celda ocupada significa celda existente, es decir, las celdas en blanco también importan en esta cuenta.

numeroDeCeldasOcupadas



Si lo necesitas, puedes hacer una copia del libro de trabajo. Debido a que tiene permisos de “visitante” (view only), no funcionará hasta que hagas tu copia (puedes hacerlo sin restricciones). Ver libro de trabajo: abrir. En el blog tenemos más ejemplos, puedes consultarlos aquí mismo: https://www.fditf.com/bi/category/google-apps-script/.

 

Conoce el potencial de toda la suite de Google, obtén una prueba gratuita de la suite; más información en este enlace (Google): https://goo.gl/ZPXKU2

Copyright © Todos los derechos reservados | FDI Tecnología y Finanzas, SAS de CV. De no existir previa autorización, queda expresamente prohibida la Publicación, retransmisión, edición y cualquier otro uso de los contenidos.

12 thoughts on “Ejemplos de Google Apps Script en Google Sheets”

  1. Amigo se puede crear un Script que sea capaz de borrar rangos de distintas hojas de cálculo? Gracias

  2. Perfecto amigo, de pronto tienes un script que envíe a imprimir unas celdas previamente marcadas?

  3. se puede asignar una imgen a una celda para hacer tipo “inventario”.?
    que se vea el producto al ir pasando sobre las celdas, ya sea por el codigo o por el nombre

  4. Hola!, Una pregunta, se puede pasar una celda como parámetro?, veo que al pasar una celda pasa el valor pero yo quiero ver el color del fondo de la celda no solo el valor y no sirve hacerlo con la celda activa. La idea es sumar un conjunto de celdas si el fondo es rojo y puedo pasar una sola celda o un array de celdas a esa funcion, por ejemplo la funcion se llama Sisepago y en la formula seria =Sisepago(A2) +Sisepago(B2) o =Sisepago(A2,B2)
    Muchas gracias!

  5. hola, necesito ingresar datos en una base de datos existente, pero no al final del ultimo renglon ocupado, sino que vaya a la primera fila inserte un renglon en blanco y ahi recien tome los datos ingresados por una appweb, como se hace? mil gracias

  6. Hola, quisiera saber si se puede llegar a crear una macro que me permita crear un libro totalmente nuevo y que este último sea un formato?

  7. Buenas tardes disculpe es posible crear un srpit que busque la palabra de la hoja de calculo de google y despues en la siguiente columna me devuelva la candidad de palabras enciontradas por el buscador de google

  8. Hola. Disculpa. tengo una tabla (tabla2) que se va llenando cada vez que hago una modificación en otra tabla(tabla1) y tiene un activador para que se borre los datos que se ingresaron a esta tabla(tabla2) lo que quiero es que me cuente cuantos datos estan en el mismo estatus y se guarden en un a “Tabla3”, por ejemplo 5 persona estan en SEG, 3 en CLMU, 2 en CONF .como puedo guardarlas en la columna correspondiente dependiendo del dia (LUNES. MARTES ETC).
    ESPERO QUE ME HAYA EXPLICADO Y ME PUEDAS AYUDAR. GRACIAS

  9. Hola Victor, muchas gracias por estas explicaciones. He querido obtener el enlace de una celda que tiene hipervinculo y no he podido, tendrias la solución. Cualquier cosa estaré atento a lo que contestes. Saludos. Francisco desde Córdoba, Argentina.

  10. hola

    estoy haciendo un formulario en macro

    pero resulta que cuando lo ejecuto se ve todo lo que la macro hace es decir se ve cuando entra ala hoha de datos y emnpieza a colocar cada uno de los item

    2 como le pongo un aviso que se desea grabar los datos y de si deseo limpiar los datos del formato

    esta es mi macro

    * yo la se hacer en Vba pero en google drive no

    function GRABA() {

    //Application.ScreenUpdating = False esta es la que se usa en vba
    // INSERTA UN ESPACIO NE BLANCO
    var spreadsheet = SpreadsheetApp.getActive();
    spreadsheet.getRange(‘F4’).activate();
    spreadsheet.setActiveSheet(spreadsheet.getSheetByName(‘datos’), true);
    spreadsheet.getRange(‘2:2’).activate();
    spreadsheet.getActiveSheet().insertRowsBefore(spreadsheet.getActiveRange().getRow(), 1);
    spreadsheet.getActiveRange().offset(0, 0, 1, spreadsheet.getActiveRange().getNumColumns()).activate();
    spreadsheet.setActiveSheet(spreadsheet.getSheetByName(‘Registro’), true);
    //FECHA
    spreadsheet.setActiveSheet(spreadsheet.getSheetByName(‘Registro’), true);
    spreadsheet.getRange(‘D4’).activate();
    spreadsheet.setActiveSheet(spreadsheet.getSheetByName(‘datos’), true);
    spreadsheet.getRange(‘B2’).activate()
    .setValue(‘43965,618996713’);
    spreadsheet.getActiveRangeList().setBackground(null);
    spreadsheet.getActiveRangeList().setFontSize(8)
    .setFontColor(null);
    //cedula
    spreadsheet.setActiveSheet(spreadsheet.getSheetByName(‘Registro’), true);
    spreadsheet.getRange(‘D6’).activate();
    spreadsheet.setActiveSheet(spreadsheet.getSheetByName(‘datos’), true);
    spreadsheet.getRange(‘C2’).activate();
    spreadsheet.getRange(‘Registro!D6’).copyTo(spreadsheet.getActiveRange(), SpreadsheetApp.CopyPasteType.PASTE_VALUES, false);
    //nombre
    spreadsheet.setActiveSheet(spreadsheet.getSheetByName(‘Registro’), true);
    spreadsheet.getRange(‘D8’).activate();
    spreadsheet.setActiveSheet(spreadsheet.getSheetByName(‘datos’), true);
    spreadsheet.getRange(‘D2’).activate();
    spreadsheet.getRange(‘Registro!D8’).copyTo(spreadsheet.getActiveRange(), SpreadsheetApp.CopyPasteType.PASTE_VALUES, false);
    //parentesco
    spreadsheet.setActiveSheet(spreadsheet.getSheetByName(‘Registro’), true);
    spreadsheet.getRange(‘D10’).activate();
    spreadsheet.setActiveSheet(spreadsheet.getSheetByName(‘datos’), true);
    spreadsheet.getRange(‘E2’).activate();
    spreadsheet.getRange(‘Registro!D10’).copyTo(spreadsheet.getActiveRange(), SpreadsheetApp.CopyPasteType.PASTE_VALUES, false);
    // telefono1
    spreadsheet.setActiveSheet(spreadsheet.getSheetByName(‘Registro’), true);
    spreadsheet.getRange(‘D12’).activate();
    spreadsheet.setActiveSheet(spreadsheet.getSheetByName(‘datos’), true);
    spreadsheet.getRange(‘F2’).activate();
    spreadsheet.getRange(‘Registro!D12’).copyTo(spreadsheet.getActiveRange(), SpreadsheetApp.CopyPasteType.PASTE_VALUES, false);
    // telefono 2
    spreadsheet.setActiveSheet(spreadsheet.getSheetByName(‘Registro’), true);
    spreadsheet.getRange(‘D14’).activate();
    spreadsheet.setActiveSheet(spreadsheet.getSheetByName(‘datos’), true);
    spreadsheet.getRange(‘G2’).activate();
    spreadsheet.getRange(‘Registro!D14’).copyTo(spreadsheet.getActiveRange(), SpreadsheetApp.CopyPasteType.PASTE_VALUES, false);
    // motivo llamada
    spreadsheet.setActiveSheet(spreadsheet.getSheetByName(‘Registro’), true);
    spreadsheet.getRange(‘D16’).activate();
    spreadsheet.setActiveSheet(spreadsheet.getSheetByName(‘datos’), true);
    spreadsheet.getRange(‘H2’).activate();
    spreadsheet.getRange(‘Registro!D16’).copyTo(spreadsheet.getActiveRange(), SpreadsheetApp.CopyPasteType.PASTE_VALUES, false);
    // observacion
    spreadsheet.setActiveSheet(spreadsheet.getSheetByName(‘Registro’), true);
    spreadsheet.getRange(‘D19’).activate();
    spreadsheet.setActiveSheet(spreadsheet.getSheetByName(‘datos’), true);
    spreadsheet.getRange(‘I2’).activate();
    spreadsheet.getRange(‘Registro!D19’).copyTo(spreadsheet.getActiveRange(), SpreadsheetApp.CopyPasteType.PASTE_VALUES, false);
    // agente
    spreadsheet.setActiveSheet(spreadsheet.getSheetByName(‘Registro’), true);
    spreadsheet.getRange(‘D21’).activate();
    spreadsheet.setActiveSheet(spreadsheet.getSheetByName(‘datos’), true);
    spreadsheet.getRange(‘J2’).activate();
    spreadsheet.getRange(‘Registro!D21’).copyTo(spreadsheet.getActiveRange(), SpreadsheetApp.CopyPasteType.PASTE_VALUES, false);
    // limpieza
    spreadsheet.setActiveSheet(spreadsheet.getSheetByName(‘Registro’), true);
    spreadsheet.getRange(‘D6’).activate();
    spreadsheet.getActiveRangeList().clear({contentsOnly: true, skipFilteredRows: true});
    spreadsheet.getRange(‘D8’).activate();
    spreadsheet.getActiveRangeList().clear({contentsOnly: true, skipFilteredRows: true});
    spreadsheet.getRange(‘D10’).activate();
    spreadsheet.getActiveRangeList().clear({contentsOnly: true, skipFilteredRows: true});
    spreadsheet.getRange(‘D12’).activate();
    spreadsheet.getActiveRangeList().clear({contentsOnly: true, skipFilteredRows: true});
    spreadsheet.getRange(‘D14’).activate();
    spreadsheet.getActiveRangeList().clear({contentsOnly: true, skipFilteredRows: true});
    spreadsheet.getRange(‘D16’).activate();
    spreadsheet.getActiveRangeList().clear({contentsOnly: true, skipFilteredRows: true});
    spreadsheet.getRange(‘D19’).activate();
    spreadsheet.getActiveRangeList().clear({contentsOnly: true, skipFilteredRows: true});
    spreadsheet.getRange(‘D21’).activate();
    spreadsheet.getActiveRangeList().clear({contentsOnly: true, skipFilteredRows: true});
    spreadsheet.getRange(‘D6’).activate();

    //Application.ScreenUpdating = TRUE tambienes de vba

    };

  11. consulta: Como incorporo esto en el código python de mi aplicación ?? porque estos scripts se generan en el editor de google… muchas gracias

Comments are closed.