グローバル変数を変更するためにGoogleのアプリスクリプト(スプレッドシート内)でいくつかの関数を取得しようとしていましたが、わかりません。Google Script(スプレッドシート)のグローバル変数
基本的に変数(この場合は "globalTestVar")を宣言し、2つの関数のいずれか(globalVarTestFunctionOneと2)がこの変数を起動するたびに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
- globalVarTestFunctionOne
- globalTestVarの値:globalTestVarの1
- outside3
- が
- グローバル変数を宣言globalVarTestFunctionTwo
- 値:1
私はメッセージをプリントアウトするために私自身の機能 "logstuff" を書きました私はLogger.log-機能で作られたものが好きではないからです。
ありがとうございました!
まあ、それは邪魔です。何らかの種類のグローバル変数を使用する方法がなければなりません。私は回避策を考え、変数を保存/変更してグローバル変数を取得するために "変数"シートを使用しました。しかしそれはあまり優雅ではなく、効率的でもありません。 – Eric
私は必要なことをするために 'CacheService'を使いましたが、それはパフォーマンス向上のための短期間の記憶でした。 'ScriptDB'が優れているかもしれませんが、私はそれを試していません。 –
はい、cacheServiceは文字列や数値には有効ですが、cacheServiceで配列を格納することは可能ですか? – Eric