javascript - Google 脚本中的全局变量(电子表格)

标签 javascript variables google-apps-script global-variables

我一直在尝试在 Google 应用脚本(电子表格内)中获取一些函数来修改全局变量,但我似乎无法弄清楚。

基本上我想声明一个变量(在本例中为“globalTestVar”),并且每次两个函数(globalVarTestFunctionOne和2)之一启动时,该变量应该增加一。

问题是,每次按下按钮时都会再次声明变量,即使 if(typeof(globalTestVar) == 'undefined') 语句应该处理这个问题。

我习惯了 Objective C 和 Java,我可以在开头声明变量,并在代码中的任何位置修改这些变量。

如果这是一个基本问题,我很抱歉,但我已经在谷歌上搜索了几个小时,但我就是无法让它发挥作用。

这是代码:

logstuff("outside");


function logstuff(logInput){
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Sheet1');
var lastRow = sheet.getLastRow() + 1;
sheet.getRange("A"+lastRow).setValue(logInput);
return;
}


if (typeof(globalTestVar) == 'undefined') {
logstuff('declaring global variable');
globalTestVar = 0;

} else {
logstuff('global variable has been declared'); 
}



function globalVarTestUIFunction() {
var app = UiApp.createApplication().setTitle('Test UI');
var doc = SpreadsheetApp.getActive();
var formPanel = app.createVerticalPanel();


var buttonF1 = app.createButton('F1');
var buttonbuttonF1ClickHandler = app.createServerClickHandler("globalVarTestFunctionOne");
buttonF1.addClickHandler(buttonbuttonF1ClickHandler);
buttonbuttonF1ClickHandler.addCallbackElement(formPanel);

var buttonF2 = app.createButton('F2');
var buttonbuttonF2ClickHandler = app.createServerClickHandler("globalVarTestFunctionTwo");
buttonF2.addClickHandler(buttonbuttonF2ClickHandler);
buttonbuttonF2ClickHandler.addCallbackElement(formPanel);


app.add(formPanel);

formPanel.add(buttonF1);
formPanel.add(buttonF2);


doc.show(app);

return app;
}



function globalVarTestFunctionOne() {
logstuff('globalVarTestFunctionOne');
globalTestVar++;
logstuff('Value of globalTestVar: ' + globalTestVar);
}

function globalVarTestFunctionTwo() {
logstuff('globalVarTestFunctionTwo');
globalTestVar++;
logstuff('Value of globalTestVar: ' + globalTestVar);
}

输出:

  • 外面3
  • 声明全局变量
  • 外面3
  • 声明全局变量
  • globalVarTestFunctionOne
  • globalTestVar 的值:1
  • 外面3
  • 声明全局变量
  • globalVarTestFunctionTwo
  • globalTestVar 的值:1

我编写了自己的函数“logstuff”来打印消息,因为我不喜欢内置的 Logger.log 函数。

谢谢!

最佳答案

您不会喜欢这样的:GAS 中的全局变量是静态的 - 您无法更新它们并期望它们保留其值。我也用谷歌搜索了几个小时。

您可以使用CacheServiceScriptDB作为此类问题的可能存储。 CacheService 快速且易于使用,但由于缓存最终会过期而受到限制。我没有尝试过 ScriptDB

关于javascript - Google 脚本中的全局变量(电子表格),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17375360/

相关文章:

javascript - angularjs ng-class 方法被多次调用

c - C 编程中的 p 符号是什么?

google-apps-script - 将 *.googleusercontent.com 添加到 Authorized JavaScript origins

google-apps-script - 表 : Transpose Single Column to Multiple Rows

amazon-s3 - 如何将 png 文件上传到 S3 Bucket?

javascript - 自动滚动到最近的div

javascript - 覆盖console.log(或一般的任何函数): Is there a proper way to do this?

javascript - Angular 火错误 : [$injector:unpr] Unknown provider: $firebaseStorageProvider <- $firebaseStorage

javascript - 从现有 JSON 文件实例化新的 JavaScript 对象

javascript - 使用字符串变量访问nodejs静态方法