#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. Я не видел исключения, но как только вы его разместили, это имело смысл! Это сработало! Огромное спасибо!