Ejemplo de bases de datos

Recursos:

Es muy importante sacar crear una copia del documento para poder editarlo.

Formulario de base de datos simple

El ejemplo utiliza una base de datos en Google Sheets para almacenar los datos.

Recuerda que para acceder al código debes ingresar al Menú Extensiones > Apps Script

onOpen()

La función onOpen se inicia cuando abres el documento y crea un menú adicional al final.

function onOpen(){

Mandamos llamar al método getUi() de la clase SpreadsheetApp, ara preparar el menú y los submenús.

var ui = SpreadsheetApp.getUi();}

Creamos un nuevo menú con el método createMenu(), el cual recibe como parámetro el nombe del menú ("Base de datos").

ui.createMenu("Base de datos")

Utilizamos el signo ( . ) punto, concatenar llamadas a los métodos addItem del objeto Ui. Cada llamada crea un nuevo item o submenú dentro del menú "Base de datos". El primer parámetro es el nombre del submenú y el segundo la función que se va a llamar, no es necesario que se llamen igual.

.addItem("Altas", "altas")

.addItem("Bajas", "bajas")

.addItem("Actualizar", "actualizar")

NOTA: otra manera más larga sería: ui.addItem("Altas", "altas"); ui.addItem("Bajas", "bajas"); ui.addItem("Actualizar", "actualizar");

Posteriormente mandamos llamar el método addToUi() para mostrar el menú.

.addToUi();

}

NOTA: también puedes mandarlo llamar con: ui.addToUi();

Puedes encontrar más información sobre cómo crear tu menú en https://developers.google.com/apps-script/guides/menus?hl=en

altas()

La función altas(), llama a la GUI para crear una ventana tipo prompt, la cual es como el objeto Window.prompt de javascript. Esto nos permite cargar una pequeña ventana en pantallla con una pregunta, un cuadro de texto de entrada y un botón de Aceptar. Lo que ingresemos en el cuadro de texto se almacena en la variable correspondiente.

function altas(){

Mandamos llamas a la Ui del Spreadsheet por medio de getUi()

var ui = SpreadsheetApp.getUi();

var id = ui.prompt("ID:");

var nombre = ui.prompt("Nombre:");

var sexo = ui.prompt("Sexo:");

var edad = ui.prompt("Edad:");

var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();

var hoja = spreadsheet.getSheetByName("Datos");

hoja.appendRow([id.getResponseText(), nombre.getResponseText(), sexo.getResponseText(), edad.getResponseText()]);

}

Se genera un pompt por cada variable

var id = ui.prompt("ID:");

var nombre = ui.prompt("Nombre:");

var sexo = ui.prompt("Sexo:");

var edad = ui.prompt("Edad:");

Posteriormente se crea la variable spreasheet donde mandamos llamar a la archivo de hojas de cálculo activo, el cual es el archivo original donde está nuestro código, por medio de la clase SpreadsheetApp y la función getActiveSpreadsheet().

var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();

NOTA: GAS sabe que cuál es su Spreadsheet activo porque el código está dentro del mismo.

Ahora buscamos la hoja que se llama "Datos" por medio del método getSheetByName() y lo asignamos a la variable hoja.

var hoja = spreadsheet.getSheetByName("Datos");

Al fnal insertamos una nueva fila en nuestra hoja de cálculo por medio del método appendRow()

hoja.appendRow([id.getResponseText(), nombre.getResponseText(), sexo.getResponseText(), edad.getResponseText()]);

NOTA: es muy importante tomar en cuenta que para que appendRow() funcione, deben coincidir la cantidad de columnas con datos en la fila 1, como la misma cantidad de parámetros que vas a enviar.

bajas()

La función bajas muestra un prompt y pregunta cuál es el dato a eliminar, lee el dato, lo busca en la hoja y si lo encuentra elimina la fila.

function bajas(){

var ui = SpreadsheetApp.getUi();

var id = ui.prompt("ID:");

var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();

var hoja = spreadsheet.getSheetByName("Datos");

En la sifguiente línea utilizamos el método gesValues() para obtener un array bidimensional con los datos en el rango enviado como parámetro datos[][]. Iniciamos en la fila 2, columna 1, ya que la primer fila es la de las cabeceras y no son datos relevantes.
Terminamos en getLastRow()-1 y getLasColumn() como parte final del rango [x1,y1][x2,y2];

var datos = hoja.getSheetValues(2, 1, hoja.getLastRow()-1, hoja.getLastColumn());

NOTA: utilizamos el método getLastRow() y getLastColumn() porque nos devuelven la ultima fila y columna con datos.

var localizado = -1;

for(var x=0; x < datos.length; x++){

if (datos[x][0] == id.getResponseText()){

localizado = x;

}

}

localizado++;

if(localizado == 0){

ui.alert("No se localizó ningún registro.")

}else{

hoja.deleteRow(++localizado);

}

}


actualizar()

La función actualizar permite buscar un datos por medio del prompt, lo busca y actualiza con nueva información. Utilizamos las mismas técnicas que en las funciones anterores para leer el archivo, pedir datos y localizarlos.

function actualizar(){

var ui = SpreadsheetApp.getUi();

var id = ui.prompt("ID:");

var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();

var hoja = spreadsheet.getSheetByName("Datos");

var datos = hoja.getSheetValues(2, 1, hoja.getLastRow()-1, hoja.getLastColumn());

var localizado = -1;

var nombre = "";

var sexo = "";

var edad = "";

for(var x=0; x < datos.length; x++){

if (datos[x][0] == id.getResponseText()){

localizado = x;

nombre = datos[x][1];

sexo = datos[x][2];

edad = datos[x][3];

break;

}

}

localizado++;

localizado++;

if(localizado == 0){

ui.alert("No se localizó ningún registro.")

}else{

var id2 = ui.prompt("ID "+id.getResponseText()+" escribe la nueva:");

var nombre2 = ui.prompt("Nombre "+nombre+" escribe el nuevo:");

var sexo2 = ui.prompt("Sexo "+sexo+" escribe el nuevo:");

var edad2 = ui.prompt("Edad "+edad+" escribe la nueva:");

Si el dato fue localizado, buscamos el rango y le asignamos valores con setValues().

hoja.getRange(localizado, 1, 1, hoja.getLastColumn())

.setValues([[id2.getResponseText(), nombre2.getResponseText(), sexo2.getResponseText(), edad2.getResponseText()]]);

}

}

NOTA: Recuerda que necesitas enviar tantos parámetros como el ancho de tu rango.