Я пытаюсь получить некоторые функции в скрипте приложений Google (внутри электронной таблицы), чтобы изменить глобальную переменную, но я не могу понять ее.Глобальные переменные в Google Script (электронная таблица)
В принципе я хочу объявить переменную (в данном случае «globalTestVar»), и каждый раз, когда одна из двух функций (globalVarTestFunctionOne и two) запускает эту переменную, должна увеличиваться на единицу.
Проблема заключается в том, что переменная объявляется снова при каждом нажатии кнопки, даже если инструкция 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.
Спасибо!
Ну, это беспокоит. Должен быть способ использовать какие-то глобальные переменные. Я подумал о работе и использовании таблицы «Variables» для сохранения/изменения и получения глобальных переменных. Но это не очень элегантно и не эффективно. – Eric
Я использовал 'CacheService', чтобы делать то, что мне было нужно, но это было краткосрочное хранилище для повышения производительности. Вы можете найти «ScriptDB» лучше, но я этого не пробовал. –
Да, cacheService работает хорошо для строк и чисел, но можно ли хранить массивы с помощью cacheService? – Eric