Веду семейный бюджет в Google Spreadsheets. Появилась необходимость в значениях типа флажок. Написал скрипт для изменения значения в данной ячейке и заметил неверное его выполнение. Вот пример скрипта:
spreadsheet.getRange('H1').activate();
data = SpreadsheetApp.getActiveSpreadsheet().getRange('H1').getValues();
if (data == 'FALSE') {
spreadsheet.getCurrentCell().setValue('TRUE');
} else {
spreadsheet.getCurrentCell().setValue('FALSE');
}
Поясняю. Если в ячейке типа флажок стоит значение TRUE (установлен флажок), то скрипт выполняется нормально - устанавливается значение FALSE и флажок снимается. Если ф ячейке стоит значение FALSE (не установлен флажок), то скрипт не выполняется - в ячейке остаётся значение FALSE и флажок не устанавливается.
Вероятно, я написал скрипт неправильно, так как только начинаю изучать данный язык. Заранее прошу за это прощения.
Использую браузеры Firefox и Opera на ноутбуке и Google Chrome на мобильном телефоне.
Есть некоторые подозрения по работе кода. Рассмотрим ваш пример кода и попробуем догадаться, в чем же дело:
// получить с таблицы ячейку 'H1' и установить ее активной
spreadsheet.getRange('H1').activate();
// getActiveSpreadsheet() - получить активную электронную таблицу (null - если ее нет)
// getRange('H1') - получить с таблицы ячейку 'H1'
// получить значение ячейки (вот тут может быть массив массивов типа `values[][]`)
data = SpreadsheetApp.getActiveSpreadsheet().getRange('H1').getValues();
// если полученное значение (значения) эквивалентны 'FALSE' выполнить первую часть условия
if (data == 'FALSE') {
// getCurrentCell() - получить текущую ячейку таблицы (которая активна)
// установить значение ячейки в 'TRUE'
spreadsheet.getCurrentCell().setValue('TRUE');
} else {
// вторая часть условия, если у нас в `data` лежит 'TRUE'
// getCurrentCell() - получить текущую ячейку таблицы (которая активна)
// установить значение ячейки в 'FALSE'
spreadsheet.getCurrentCell().setValue('FALSE');
}
На первый взгляд код выглядит вполне нормально, но лично мне кажется, что в коде присутствуют лишние операции, которые могут нарушать ожидаемое поведение кода. Судя по начальному коду, в переменной spreadsheet хранится таблица, соответственно все, что нам нужно - у нас уже в принципе есть и нам не нужно заниматься активацией ячеек и получением активных таблиц. Попробуем немного изменить исходный код:
// получить ячейку 'H1' с таблицы `spreadsheet` (ваша переменная)
var cell = spreadsheet.getRange('H1');
// получить значение ячейки (не `getValues`)
var value = cell.getValue();
// поменяем значение `value` на противоположное и положим его в переменную `newValue`
var newValue = !value;
// установим в ячейку новое значение, которое лежит в переменной `newValue`
cell.setValue(newValue);
Вообще, можно записать этот код в меньшее количество строк (к примеру в две), но это уже на ваше усмотрение. Из советов - читайте доки, к примеру: getValue()
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости