Rya*_*yan 38 google-docs google-sheets google-apps-script
我看到谷歌的大多数例子都是他们只使用一个巨大的脚本中的函数.
例如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);
};
Run Code Online (Sandbox Code Playgroud)
但是,当我运行上面的代码时,它返回
"MyCompany is not defined."
Run Code Online (Sandbox Code Playgroud)
怎么解决?
Ash*_*rke 87
您可能最好使用Properties Service,因为您可以将它们用作一种持久的全局变量.
单击"文件>项目属性>项目属性"以设置键值,或者您可以使用
PropertiesService.getScriptProperties().setProperty('mykey', 'myvalue');
Run Code Online (Sandbox Code Playgroud)
可以使用检索数据
var myvalue = PropertiesService.getScriptProperties().getProperty('mykey');
GAS 中的全局变量与其他语言中的不同。它们不是在所有例程中都可用的常量或变量。
我想我也可以使用全局变量来保持功能和效率之间的一致性。但正如这里的一些人所指出的那样,我错了。
全局变量将在每次执行脚本时评估,因此不是每次运行应用程序时都评估一次。
全局变量可以在脚本中更改(因此它们不是不能意外更改的常量),但会在调用另一个脚本时重新初始化。
使用全局变量也有速度损失。如果在一个函数中您两次或多次使用相同的全局变量,分配一个局部变量并使用它会更快。
如果您想保留应用程序中所有函数之间的变量,最好使用 cacheService。我发现遍历驱动器上的所有文件和文件夹需要很多时间。但是您可以将有关文件和文件夹的信息存储在缓存(或什至属性)中并加速至少 100 倍。
我现在使用全局变量的唯一方法是用于某些前缀和命名小部件。
小智 5
我通过返回一个带有全局变量对象的函数来使用一种解决方法:
function globalVariables(){
var variables = {
sheetName: 'Sheet1',
variable1: 1,
variable2: 2
};
return variables;
}
function functionThatUsesVariable (){
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(globalVariables().sheetName);
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
74291 次 |
最近记录: |