Ho cercato di ottenere alcune funzioni in uno script di app Google (all'interno di un foglio di calcolo) per modificare una variabile globale, ma non riesco a capirlo.Variabili globali in Google Script (foglio di calcolo)
Fondamentalmente voglio dichiarare una variabile (in questo caso "globalTestVar"), e ogni volta che una delle due funzioni (globalVarTestFunctionOne e due) lancia questa variabile dovrebbe aumentare di uno.
Il problema è che la variabile viene nuovamente dichiarata ogni volta che si preme un pulsante, anche se l'istruzione if (typeof (globalTestVar) == 'undefined') - dovrebbe occuparsene.
Sono abituato all'Obiettivo C e Java dove posso dichiarare le mie variabili all'inizio e modificare queste variabili ovunque nel codice.
Mi dispiace se questa è una domanda di base, ma sono stato googling per ore e non riesco a farlo funzionare.
Ecco il codice:
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);
}
uscita:
- outside3
- dichiarando variabile globale
- outside3
- dichiarando variabile globale
- globalVarTestFunctionOne
- Valore della globalTestVar: 1
- outside3
- dichiarando variabile globale
- globalVarTestFunctionTwo
- Valore della globalTestVar: 1
ho scritto la mia funzione "logstuff" per stampare i messaggi perché non mi piace la funzione Logger.log integrata.
Grazie!
Beh, è inquietante. Deve esserci un modo per usare una sorta di variabili globali. Ho pensato a una soluzione e ho usato un foglio "Variabili" per salvare/modificare e ottenere variabili globali. Ma non è molto elegante, né efficiente. – Eric
Ho usato 'CacheService' per fare ciò di cui avevo bisogno, ma quello era lo storage a breve termine per il miglioramento delle prestazioni. Potresti trovare che 'ScriptDB' è migliore, ma non l'ho provato. –
Sì, cacheService funziona bene per stringhe e numeri, ma è possibile archiviare gli array con cacheService? – Eric