google-apps-script - ejemplos - google apps script html service example
Cómo definir la variable global en Google Apps Script (4)
Veo que la mayoría de los ejemplos de Google es que usan solo funciones en un solo guión gigante.
por ejemplo, https://developers.google.com/apps-script/quickstart/macros
Pero en nuestro estilo, generalmente escribimos todas las funciones en un solo espacio de nombres, como
MyCompany = (MyCompany || {});
MyCompany.init = function () {
Logger.log(''init'');
};
function onOpen() {
var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
var menus = [{
name: "Init",
functionName: MyCompany.init
}];
spreadsheet.addMenu("Test", menus);
};
Sin embargo, cuando ejecuto el código anterior, regresa
"MyCompany is not defined."
¿Cómo resolver?
En GAS, las variables globales no son lo que son en otros idiomas. No son constantes ni variables disponibles en todas las rutinas.
Pensé que podría usar variables globales para la coherencia entre las funciones y la eficiencia también. Pero me equivoqué, como lo señalaron algunas personas aquí en SO.
La variable global se evaluará en cada ejecución de un script, por lo que no solo una vez cada vez que ejecute su aplicación.
Las variables globales PUEDEN cambiarse en un script (para que no sean constantes que no se puedan cambiar por accidente), pero se reiniciarán cuando se invoque otro script.
También hay una penalización de velocidad al usar variables globales. Si dentro de una función utiliza la misma variable global dos o más veces, será más rápido asignar una variable local y usarla en su lugar.
Si desea conservar las variables entre todas las funciones en su aplicación, podría estar usando un cacheService será lo mejor. Descubrí que recorrer todos los archivos y carpetas en una unidad toma MUCHO tiempo. Pero puede almacenar información sobre archivos y carpetas dentro de la memoria caché (o incluso propiedades) y acelerar al menos 100 veces.
La única forma en que uso las variables globales ahora es para algunos prefijos y para nombrar widgets.
Tal vez sea mejor que use el Servicio de Propiedades ya que puede usarlos como un tipo de variable global persistente.
haga clic en ''archivo> propiedades del proyecto> propiedades del proyecto'' para establecer un valor de clave, o puede usar
PropertiesService.getScriptProperties().setProperty(''mykey'', ''myvalue'');
Los datos se pueden recuperar con
var myvalue = PropertiesService.getScriptProperties().getProperty(''mykey'');
Estoy usando una solución al devolver una función con un objeto de mis variables globales:
function globalVariables(){
sheetName: ''Sheet1'',
variable1: 1,
varibale2: 2
}
function functionThatUsesVariable (){
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(globalVariables().sheetName);
}
Las variables globales ciertamente existen en GAS, pero debe comprender la relación cliente / servidor del entorno para utilizarlas correctamente. Consulte esta pregunta: Variables globales en Google Script (hoja de cálculo)
Sin embargo, este no es el problema con su código; la documentación indica que la función que debe ejecutarse en el menú debe suministrarse al método como una cadena, en este momento está suministrando el resultado de la función: https://developers.google.com/apps-script/reference/spreadsheet / spreadsheet # addMenu% 28String, Object% 29
function MainMenu_Init() {
Logger.log(''init'');
};
function onOpen() {
var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
var menus = [{
name: "Init",
functionName: "MainMenu_Init"
}];
spreadsheet.addMenu("Test", menus);
};