Цикл For продолжает прерываться после 1 экземпляра — Сценарий приложений

#javascript #google-apps-script #google-sheets

#javascript #google-apps-script #google-sheets

Вопрос:

Я искал везде, где мог придумать, что-нибудь, что может дать ответ на этот вопрос. Впервые публикуя вопрос здесь — я обычно могу найти свои ответы. У меня есть цикл for, который извлекает информацию из диапазона данных, отформатированных в одной ячейке следующим образом: 01.09.2016 — Статус изменен на активный.

Предполагается, что цикл сначала проверяет, сколько значений в этом столбце, затем переходит по одному и разбивает данные на простой массив, размещает его в двух столбцах на отдельном листе, затем переходит к следующему. Проблема в том, что он останавливается после первой записи.

 var numEntries = dataSheet.getRange(1,i 1,1000).getValues();
var lastEntry = numEntries.filter(String).length;
if (lastEntry == 7) {
  // no change data to date
  sheet.getRange(18,3).setValue("No changes yet");
  } else {
var changeData = dataSheet.getRange(8,i 1,lastEntry-7).getValues();
for (var y = 0; y < changeData.length; y  ) {
    var changeHistory = changeData[y][y].split(" - ");
    sheet.getRange(nextRow 1,2).setValue(changeHistory[0]);
    sheet.getRange(nextRow 1,3).setValue(changeHistory[1]);
    nextRow  ;
  Logger.log(nextRow);
  Logger.log(changeData.length);
  Logger.log(y);
  }
}
  

Я знаю, что он выполняется правильно, потому что он правильно устанавливает значение «Пока нет изменений», когда записей нет. Переменная NextRow начинается со значения 17, и в журнале правильно отображается changeData.length с количеством записей и y, равным 0. Но затем он останавливается. Из цикла не следует, что y по-прежнему меньше, чем changeData.length . Любая помощь очень ценится!

[редактировать] — Я также хочу отметить, что он правильно разделяет и заполняет первое значение в две ячейки, которые я хочу, поэтому весь оператор for работает, он просто не зацикливается. [править]

[16-09-29 15:37:48:514 CDT] 18.0
[16-09-29 15:37:48:515 CDT] 11.0
[16-09-29 15:37:48:515 CDT] 0,0

Комментарии:

1. Ваш код не завершен.

Ответ №1:

changeData является n*1 массивом.
Вы увеличиваете y , и вы также пытаетесь получить y -й столбец из changeData . После первой итерации это undefined связано с тем, что есть только один столбец.
undefined не имеет split метода, вызывающего исключение и завершающего сценарий. (Вы можете не видеть это исключение, такие исключения по какой-то причине не всегда отображаются пользователю)

Попробуйте

 var changeHistory = changeData[y][0].split(" - ");
  

вместо этого.

Комментарии:

1. Я не видел исключения, но как только вы его разместили, это имело смысл! Это сработало! Огромное спасибо!