Этот сценарий предназначен для сохранения URL-адреса для редактирования ответа на листе ответов. Триггер для этого сценария настроен на запуск при отправке формы. Это работает хорошо по большей части.
Проблема, с которой я столкнулся, заключается в том, что, как только пользователь редактирует свой ответ и нажимает кнопку "Отправить", этот сценарий запускается и перезаписывает URL-адрес последнего ответа редактирования строки.
Только что столкнулся с этой проблемой сейчас и не было много времени, чтобы подумать о решении. Хочу задать этот вопрос здесь, поскольку это кажется довольно интересным логическим испытанием.
Вот скрипт, который я использую:
function onFormSubmit(e) {
var editResponseURL = FormApp.getActiveForm().getResponse(e.response.getId()).getEditResponseUrl();
var sheet = SpreadsheetApp.openById("SHEET_ID_HERE").getSheetByName("Form responses 1");
sheet.getRange(sheet.getLastRow(), sheet.getLastColumn(), 1, 1).setValue(editResponseURL);
}
Мои мысли по поводу решения этой проблемы заключались в том, чтобы как-то найти уникальную идентификационную ценность. Возможно, что-то вроде Timestap и адреса электронной почты, чтобы создать уникальный ключ для поиска по строкам и, если он найден, установить значение URL-адреса редактирования ответа. (И что-то вроде, если значения равны нулю, просто напишите в последнюю строку - например, когда выполняется новая передача.)
Я буду продолжать обновлять этот пост новыми идеями. Интересно узнать, какие идеи есть у сообщества.
Обновление:
В скрипт добавлена новая логика - она исправляет проблему выше. К сожалению, он по-прежнему не будет работать, так как сценарии Google App Script на триггере отправки формы ненадежны. (В некоторых случаях триггер не срабатывает без предупреждения об ошибке.) *
Вот обновленный скрипт. (Надеюсь, это поможет кому-то в будущем.)
function onFormSubmit(e) {
var recordExists = false;
var editResponseURL = FormApp.getActiveForm().getResponse(e.response.getId()).getEditResponseUrl();
var sheet = SpreadsheetApp.openById("SPREADSHEET_ID_HERE").getSheetByName("Form responses 1");
var responseURLs = sheet.getRange(2, sheet.getLastColumn(), sheet.getLastRow(), 1).getValues();
for (var i = 0; i < responseURLs.length; i++){
if (responseURLs[i].indexOf(editResponseURL) !== -1){
recordExists = true
break;
}
}
if(recordExists === false){
sheet.getRange(sheet.getLastRow(), sheet.getLastColumn(), 1, 1).setValue(editResponseURL);
}
else {sheet.getRange(i +2, sheet.getLastColumn(), 1, 1).setValue(editResponseURL);
}
}
- Результаты выполнения моей команды нескольких заявлений: