我一直在嘗試在谷歌應用程序腳本(電子表格內)中修改一個全局變量,但我似乎無法弄清楚它的一些功能。谷歌腳本(電子表格)中的全局變量
基本上我想聲明一個變量(在本例中爲「globalTestVar」),並且每次兩個函數(globalVarTestFunctionOne和two)中的一個啓動時,此變量應該遞增1。
問題是,即使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);
}
輸出:
- outside3
- 聲明全局變量
- outside3
- 聲明全局變量
- globalVarTestFunctionOne
- 價值globalTestVar的:1
- outside3
- 聲明全局變量
- globalVarTestFunctionTwo
- globalTestVar的價值:1
我寫我自己的函數 「logstuff」 打印出來的消息因爲我不喜歡內置的Logger.log函數。
謝謝!
嗯,這很令人不安。必須有一種方法來使用某種全局變量。我想到了一個解決方法,並使用「變量」表單來保存/修改並獲取全局變量。但這不是很優雅,也不是很有效率。 – Eric
我使用'CacheService'來做我所需要的,但這是短期存儲以提高性能。你可能會發現'ScriptDB'更好,但我沒有嘗試過。 – 2013-06-29 00:28:11
是的,cacheService適用於字符串和數字,但可以使用cacheService存儲數組嗎? – Eric