У меня есть форма Google, которая собирает ответы в связанной электронной таблице. Одно из полей формы - Username
(столбец B на листе). Я пишу сценарий, чтобы уведомить меня, когда новый пользователь (уникальное имя пользователя) делает заявку. Для этого я:
- Получить все значения в столбце B, кроме самого последнего
- Получить последнее имя пользователя
- Проверьте, есть ли в списке значений последнее имя пользователя (если что-то не так).
Вот что у меня так далеко:
function isUserNew() {
var spreadsheet = SpreadsheetApp.openById("INSERT ID HERE");
var sheet = SpreadsheetApp.setActiveSheet(spreadsheet.getSheets()[0]);
var last_row_number = sheet.getLastRow()
var penultimate_row_number = (last_row_number-1)
var latest_username = sheet.getRange(last_row_number, 2).getValue()
var usernames = sheet.getRange("B2:B" + penultimate_row_number).getValues();
}
Это дает мне двумерный массив usernames
, который выглядит как [[UserA],[UserB],[UserC],[UserC],[UserA],[UserX]].
Затем я попытался if (usernames.indexOf(latest_username) == -1
, но это не работает - это работает только для одномерного массива. Я думал о преобразовании массива в 1D с помощью цикла:
for (var i = 0; i < usernames.length; i++) {
Logger.log(usernames[i][0]);
}
Это заставляет регистратор правильно регистрировать все имена пользователей, которые я хочу, но я не знаю, как поместить их в массив.
2 основных вопроса:
- Как получить значения в массив вместо Logger?
- Это лучший способ сделать то, что я пытаюсь сделать? Кажется ненужным, чтобы при каждой отправке я брал двумерный массив, конвертировал в 1D и сравнивал. Данные столбца не собираются меняться, они только увеличиваются на 1 каждый раз. Как это повлияет на время выполнения, когда данные вырастут в тысячи?