Проблема с циклом google apps script

Есть вот такая часть кода

var ss = tabl.getRange(2,1).getValue();

for(;ss==“”;){logger.log(“good”)}

Значение переменной ss перед циклом равно пустоте и поэтому когда доходит до цикла, он запускается и работает, но когда я вношу изменения в строку, то есть уже ss не равно пустоте цикл все равно продолжает работать и выдавать в журнал «good”. А мне нужно чтобы после того как строка уже не является пустой выполнение цикла закончилось


Ответы (2 шт):

Автор решения: contributorpw

Ваше утверждение о состоянии функции и ее переменных неверны, т.к.

function fn() {
  let ss = '';
  let i = 0;

  for (; ss === '';) {
    console.log(++i);
    if (i > 5) ss = '?';
  }

  console.log(ss);
}
Execution log
2:34:17 PM  Notice  Execution started
2:34:17 PM  Info    1
2:34:17 PM  Info    2
2:34:17 PM  Info    3
2:34:17 PM  Info    4
2:34:17 PM  Info    5
2:34:17 PM  Info    6
2:34:17 PM  Info    ?
2:34:17 PM  Notice  Execution completed

Не думаю, что в Rhino будет работать как-то по-другому чем в V8.

Что касается вашего вопроса, вам в цикле нужно проверять не обновилось ли значение в ячейке

function myFunction() {
  const book = SpreadsheetApp.getActiveSpreadsheet()
  const range = book
    .getSheetByName('Тестовая')
    .getRange('A1');
  let value = getValue(range);
  for (; value === '';) {
    console.log(value);
    book.toast('Ожидаются данные в ячейке A1');
    Utilities.sleep(900);
    value = getValue(range);
  }
  book.toast(`Значение в ячейке A1 "${value}"`);
  console.log(value);
}

/**
 * @param {globalThis.SpreadsheetApp.Range} range
 */
const getValue = (range) => {
  SpreadsheetApp.flush();
  return range.getValue();
}

function onOpen() {
  SpreadsheetApp.getUi()
    .createMenu('Запуск')
    .addItem('Запустить пример', 'myFunction')
    .addToUi();
}
→ Ссылка
Автор решения: Алекс

возможно нужно обновить после изменения в ячейке SpreadsheetApp.flush();

→ Ссылка