我看到谷歌的大多数例子是他们只在单个巨型脚本中使用函数。
例如 https://developers.google.com/apps-script/quickstart/macros
但在我们的风格中,我们通常在一个命名空间下编写所有函数,例如
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);
};
但是,当我运行上面的代码时,它返回
"MyCompany is not defined."
怎么解决?
最好使用属性服务,因为您可以将它们用作一种持久性全局变量。
点击“文件
PropertiesService.getScriptProperties().setProperty('mykey', 'myvalue');
数据可以通过以下方式检索
var myvalue = PropertiesService.getScriptProperties().getProperty('mykey');
在GAS中,全局变量与其他语言中的变量不同。它们不是常量,也不是所有例程中可用的变量。
我想我可以使用全局变量来保证函数间的一致性和效率。但是正如这里的一些人指出的那样,我错了。
全局变量将在每次执行脚本时计算,因此不是每次运行应用程序时都计算一次。
全局变量可以在脚本中更改(因此它们不是不能意外更改的常量),但是在调用另一个脚本时将重新初始化。
使用全局变量也会降低速度。如果在一个函数中使用相同的全局变量两次或更多次,则分配一个局部变量并改用它会更快。
如果要在应用程序中的所有函数之间保留变量,最好使用cacheService。我发现循环浏览驱动器上的所有文件和文件夹需要很多时间。但是您可以将有关文件和文件夹的信息存储在缓存(甚至属性)中,并且速度至少提高 100 倍。
我现在使用全局变量的唯一方法是用于一些前缀和命名小部件。
我正在使用一种解决方法,通过返回一个带有全局变量对象的函数:
function globalVariables(){
var variables = {
sheetName: 'Sheet1',
variable1: 1,
variable2: 2
};
return variables;
}
function functionThatUsesVariable (){
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(globalVariables().sheetName);
}