App inventor 2 en español
Cómo programar los teléfonos móviles con Android
mediante App inventor 2 - Juan Antonio Villalpando
-- Tutorial de iniciación de App Inventor 2 en español --
Volver al índice del tutorial
_________________________________________________
136.- Google sheet. Hoja de Cálculo. Guardar. Borrar. Ver. Actualizar. Bajar.
p136_googlesheet.aia
- Tenemos nuestra cuenta de Google.
- Entramos en Google Sheet: https://docs.google.com/spreadsheets/u/0/
- Pulsamos en el icono de "En blanco" para crear una nueva Hoja.
- Archivo / importar. Importamos este archivo desde nuestro ordenador.
- productos.csv
productos.csv |
10,Arduino UNO,12,3
11,Arduino DUE,16,4
12,Arduino Mini,18,2
13,Arduino Micro,14,10
14,ESP8266-01,11,4
15,ESP8266-12,15,5
16,ESP32,16,5
17,Pantalla LCD-I2C,14,2
18,Módulo I2C,12,1
19,Teclado,10,10
20,Servo g90,12,2
21,Buzzer,14,10
22,Módulo HC-06,12,2
23,Módulo HC-10,12,3
24,Pantalla OLED,11,1
25,Relé,9,3
26,Panel solar,14,3
27,Sensor presión,12,2
28,Sensor humedad,14,3
29,Sensor peso,14,3
30,Sensor infrarojo,10,1
31,Sensor ultrasonido,12,2
32,Brújula,14,2
33,Giroscopio,11,3
|
- Una vez importado, cambiamos el nombre productos y la hoja, le ponemos hoja1
- El Nombre_Hoja será hoja1 (observa que está en minúscula y no tiene espacio, no poner Hoja 1)
- Vamos a Compartir esta Hoja para que cualquier persona la pueda utilizar.
- Más adelante necesitaremos el código identificador de nuestra Hoja, este será el Identificador.
19ifIR______________________n3dwLL8
_________________________________________________________________
- Script. Secuencia de comandos.
- Vamos a crear un Script para bajar toda esta Hoja de Cálculo.
- Utilizaremos el Editor antiguo.
- Vamos a implementar nuestro Script como aplicación web.
- En principio pondremos que puede accedar todos, incluso anónimos.
- IMPORTANTE cada vez que actualicemos el Script debemos establecer un Nuevo Project version, si no lo hacemos no se actualizará.
- La dirección de la macro "Current web app URL" tendrá esta forma:
https://script.google.com/macros/s/AKfycbxaNmD0h...............................................Mayrub/exec
- Este es el Script que debemos copiar y pegar.
productos |
function doGet(e) {
var Identificador_Hoja = SpreadsheetApp.openById(e.parameter.Identificador_Hoja);
var Nombre_Hoja = Identificador_Hoja.getSheetByName(e.parameter.Nombre_Hoja);
var Funcion = e.parameter.FUNCION;
var Borrar = e.parameter.BORRAR;
var Buscar = e.parameter.BUSCAR;
var Query = e.parameter.QUERY;
var rango = Nombre_Hoja.getDataRange().getValues();
// AGREGAR un nuevo registro.
if (Funcion == 'AGREGAR') {
var registro = e.parameter.REGISTRO.split(',');
var codigo = registro[0];
var rangoA = Nombre_Hoja.getRange('A:A');
var v = rangoA.getValues();
for(var i = v.length-1;i>=0;i--)
if(v[0,i] == codigo) {
return ContentService.createTextOutput("Ya existe."); }
// En caso que no exista, lo crea...
Nombre_Hoja.appendRow(registro);
rangoA.sort(1);
return ContentService.createTextOutput("Agregado.");
}
// MODIFICAR.
else if (Funcion == 'MODIFICAR') {
var registro = e.parameter.REGISTRO.split(',');
var codigo = registro[0];
var rangoA = Nombre_Hoja.getRange('A:A');
var v = rangoA.getValues();
for(var i = v.length-1;i>=0;i--)
if(v[0,i] == codigo) {
rangoRegistro = Nombre_Hoja.getRange(i+1,1,1,4)
rangoRegistro.setValues([registro]);
return ContentService.createTextOutput("Registro modificado."); }
return ContentService.createTextOutput("No existe.");
}
// BUSCAR un código.
else if (Funcion == 'BUSCAR') {
var rangoA = Nombre_Hoja.getRange('A:A');
var v = rangoA.getValues();
for(var i = v.length-1;i>=0;i--)
if(v[0,i] == Buscar) {
var fila = Nombre_Hoja.getRange(i+1,1,1,4).getValues()
return ContentService.createTextOutput(JSON.stringify(fila));
// La línea de abajo devuelve String: 25,Relé,9,3
// return ContentService.createTextOutput(fila).setMimeType(ContentService.MimeType.TEXT);
}
return ContentService.createTextOutput("No existe.");
}
// LEER TODO toda la base y devolver como una lista JSON
else if (Funcion == 'LEER_TODO') {
return ContentService.createTextOutput(JSON.stringify(rango));
//return ContentService.createTextOutput(rango).setMimeType(ContentService.MimeType.TEXT);
}
// OTRA FORMA DE LEER TODO toda la base. Devuelve String.
else if (Funcion == 'LEER_TODO2') {
var todo = '';
for(var fila = 0 ; fila < rango.length ; ++fila){
todo += rango[fila].join(',') + '\n';
}
return ContentService.createTextOutput(todo).setMimeType(ContentService.MimeType.TEXT);
}
// BORRAR un registro.
else if (Funcion == 'BORRAR') {
var rangoA = Nombre_Hoja.getRange('A:A');
var v = rangoA.getValues();
for(var i=v.length-1;i>=0;i--)
if(v[0,i] == Borrar)
Nombre_Hoja.deleteRow(i+1);
return ContentService.createTextOutput("Registro borrado.");
}
// QUERY.
else if (Funcion == 'QUERY') {
var query = '=QUERY('+Nombre_Hoja.getName()+"!"+Nombre_Hoja.getDataRange().getA1Notation()+';\"'+Query+'\")';
var inserta = Identificador_Hoja.insertSheet();
var hacer_query = inserta.getRange(1,1).setFormula(query);
var resultado = inserta.getDataRange().getValues();
Identificador_Hoja.deleteSheet(inserta);
return ContentService.createTextOutput(resultado).setMimeType(ContentService.MimeType.TEXT);
// return ContentService.createTextOutput(JSON.stringify(resultado));
}
}
|
_________________
- Diseño.
_________________
- Bloques.
_______________________________________
- Insertar un valor mediante doGet y doPost.
- Hay dos formas de enviar/recibir la información: mediante doGet y doPost.
- Observa que la dirección es la misma para las dos formas:
https://script.google.com/macros/s/AKfycbxaNmD0h...............................................Mayrub/exec
Código.gs
|
function doGet(e) {
// var Identificador_Hoja = SpreadsheetApp.openById(e.parameter.Identificador_Hoja);
// var Nombre_Hoja = Identificador_Hoja.getSheetByName(e.parameter.Nombre_Hoja);
var sheet = SpreadsheetApp.openById(e.parameter.Identificador_Hoja).getSheetByName(e.parameter.Nombre_Hoja);
var func = e.parameter.func;
if (func == 'myFunction') {
rx = e.parameter.rx;
cx = e.parameter.cx;
vx = e.parameter.vx;
sheet.getRange(rx,cx).setValue(vx);
return ContentService.createTextOutput("Agregado con GET.");
}
}
/////////////////////////////////////////////////////////
function doPost(e) {
// var Identificador_Hoja = SpreadsheetApp.openById(e.parameter.Identificador_Hoja);
// var Nombre_Hoja = Identificador_Hoja.getSheetByName(e.parameter.Nombre_Hoja);
var sheet = SpreadsheetApp.openById(e.parameter.Identificador_Hoja).getSheetByName(e.parameter.Nombre_Hoja);
var func = e.parameter.func;
if (func == 'myFunction') {
rx = e.parameter.rx;
cx = e.parameter.cx;
vx = e.parameter.vx;
sheet.getRange(rx,cx).setValue(vx);
return ContentService.createTextOutput("Agregado con POST.");
}
}
|
- Con el Get se obtienen carácteres españoles como la eñe y las tildes, con el Post no.
- Para que funcione con Post, utilizamos el bloque UriEncode.
p136ii_googlesheet_GET_POST.aia
var sheet = SpreadsheetApp.openById(e.parameter.ID).getSheetByName(e.parameter.SH);
var func = e.parameter.func;
if (func == 'myFunction') {
rx = e.parameter.rx;
cx = e.parameter.cx;
vx = e.parameter.vx;
sheet.getRange(rx,cx).setValue(vx);
return ContentService.createTextOutput("Agregado.");
}
____________________________________________
- Más información. Obtención directa de datos.
- Para obtener datos simplemente utiliza estas expresiones.
- https://developers.google.com/apps-script/reference/spreadsheet
- Obtener un rango directamente sin Script:
https://docs.google.com/spreadsheets/d/19vvvvvvvvvvvvvvvvvvvvvvGbIn3dwLL8/export?format=csv&range=B4:B12
https://docs.google.com/spreadsheets/d/19iRvvvvvvvvvvvvvvvvvvdwLL8/export?format=csv&gid=1451883389&range=B4:B12
- Bajar toda la Hoja en csv:
https://docs.google.com/spreadsheets/d/19ivvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvdwLL8/gviz/tq?tqx=out:csv&sheet=hoja1
- Bajar toda la Hoja en formato JSON:
https://spreadsheets.google.com/feeds/cells/19vvvvvvvvvvvvvvvvvvvvvvvGbIn3dwLL8/1/public/full?alt=json
- Query
https://developers.google.com/chart/interactive/docs/querylanguage
https://developers.google.com/chart/interactive/docs/reference#QueryResponse_getDataTable
https://developers.google.com/apps-script/guides/web
https://stackoverflow.com/questions/22695365/query-google-spreadsheet-with-url-parameters
http://sophiafeng.com/technical/2013/12/26/visualization-using-google-charts/
https://docs.google.com/spreadsheets/d/19iRIRdnCXf2rt089pu5n2SAT_geeQ7nc8GbIn3dwLL8/edit
https://docs.google.com/spreadsheets/d/19iRIRdnCXf2rt089pu5n2SAT_geeQ7nc8GbIn3dwLL8/edit#gid=1451883389
https://docs.google.com/spreadsheets/d/19iRIRdnCXf2rt089pu5n2SAT_geeQ7nc8GbIn3dwLL8/export?format=csv&gid=1451883389
https://docs.google.com/spreadsheets/d/19iRIRdnCXf2rt089pu5n2SAT_geeQ7nc8GbIn3dwLL8/export?format=csv&range=B4:B12&gid=1451883389
https://docs.google.com/spreadsheets/d/19iRIRdnCXf2rt089pu5n2SAT_geeQ7nc8GbIn3dwLL8/export?format=csv&range=A1:B10&gid=1451883389
https://docs.google.com/spreadsheets/d/19iRIRdnCXf2rt089pu5n2SAT_geeQ7nc8GbIn3dwLL8/export?format=csv&range=B1:B&gid=1451883389
export?format=pdf
export?format=xlsx
------------------------------------------------------------------------------------------------------
out:html
- Para evitar los %20 utiliza el bloque UriEncode
https://docs.google.com/spreadsheets/d/19iRIRdnCXf2rt089pu5n2SAT_geeQ7nc8GbIn3dwLL8/gviz/tq?range=4:6&tqx=out:csv&sheet=hoja1
https://docs.google.com/spreadsheets/d/19iRIRdnCXf2rt089pu5n2SAT_geeQ7nc8GbIn3dwLL8/gviz/tq?tqx=out:csv&sheet=hoja1
https://docs.google.com/spreadsheets/d/19iRIRdnCXf2rt089pu5n2SAT_geeQ7nc8GbIn3dwLL8/gviz/tq?tq=SELECT%20*%20WHERE%20A%20CONTAINS%20%2219%22&sheet=hoja1
https://docs.google.com/spreadsheets/d/19iRIRdnCXf2rt089pu5n2SAT_geeQ7nc8GbIn3dwLL8/gviz/tq?tq=SELECT%20A%20&sheet=hoja1
https://docs.google.com/spreadsheets/d/19iRIRdnCXf2rt089pu5n2SAT_geeQ7nc8GbIn3dwLL8/gviz/tq?tq=INSERT%20*%20WHERE%20A%20CONTAINS%20%2219%22&sheet=hoja1
https://docs.google.com/spreadsheets/d/19PQJ9PF4Y1kyyzdYJUUL0-yY9whoqy-aD45GF07jAms/gviz/tq?tq=SELECT%20B%20WHERE%20E%20CONTAINS%20%22ACTPETF%22&tqx=out:csv&sheet=hoja1
------------------------------------------------------------------------------
https://spreadsheets.google.com/feeds/cells/19iRIRdnCXf2rt089pu5n2SAT_geeQ7nc8GbIn3dwLL8/2/public/full?alt=json
|