
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:
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):
Código:
Si ya guardaste el código, ahora solo agrega un nombre al archivo. Aquí usaremos “Simple trigger”:
Cierra la ventana/archivo, y localiza tu archivo en Google Drive. Ábrelo. Al abrirse se ejecutará la primera macro. onOpen.
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
Amigo se puede crear un Script que sea capaz de borrar rangos de distintas hojas de cálculo? Gracias
Claro que es posible! Checa este post: http://www.fditf.com/bi/google-sheets/la-grabadora-de-macros-en-google-sheets-primeros-pasos/. Saludos!
Perfecto amigo, de pronto tienes un script que envíe a imprimir unas celdas previamente marcadas?
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
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!
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
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?
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
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
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.
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
};
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