создавать индивидуальные формы Google на основе информации о Google листах - PullRequest
0 голосов
/ 11 октября 2019

Скажем, у меня есть электронная таблица в листах Google с тремя столбцами EMAIL, TOPIC и TIME, где я хочу отправить электронное письмо на каждый из электронных адресов электронной почты, содержащее ссылку на форму Google, в которой есть вопрос с вопросом о предпочтительномВРЕМЯ для данной ТЕМЫ в электронной таблице. Можно ли создавать такие индивидуальные формы Google на основе листов?

1 Ответ

2 голосов
/ 11 октября 2019

Первое, что нужно сделать, это создать формы и отправить электронные письма. Для этого я написал функцию, которая перебирает все строки на вашем листе (называется «Sheet1», изменяет ее в соответствии с вашими предпочтениями), создает форму для каждой строки и отправляет ее на электронные письма, найденные в столбце A (влист, над которым я работаю, данные начинаются со строки 2 и столбцы: A - электронная почта / B - тема / C - время):

function sendMails() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var values = ss.getSheetByName("Sheet1").getDataRange().getValues();
  for(var i = 1; i < values.length; i++) {
    var email = values[i][0];
    var topic = values[i][1]
    var formName = email + " - " + topic;
    var form = FormApp.create(formName);
    var url = form.getPublishedUrl();
    form.setTitle(formName);
    form.setDestination(FormApp.DestinationType.SPREADSHEET, ss.getId()); // This line bounds the created form to your spreadsheet so that responses will be written in here, in an automatically created sheet
    // You can set another destination spreadsheet if you don't want all these sheets created in your spreadsheet
    var question = form.addDateTimeItem();
    question.setTitle("Please provide a preferred time for your assigned lecture on " + topic);
    var userEmail = form.addCheckboxItem();
    userEmail.setChoices([userEmail.createChoice(email)]);
    var topicName = form.addCheckboxItem();
    topicName.setChoices([topicName.createChoice(topic)]);
    var checkBoxValidation = FormApp.createCheckboxValidation()
    .requireSelectExactly(1)
    .build();
    userEmail.setValidation(checkBoxValidation);
    topicName.setValidation(checkBoxValidation);
    MailApp.sendEmail(email, topic, url);
  }
}

Далее необходимо установить onFormSubmitвызвать в вашей таблице. Вы можете сделать это, чтобы запустить функцию, которая будет записывать предпочтительное ВРЕМЯ, выбранное пользователем в форме при каждой отправке формы. Чтобы создать триггер, запустите эту функцию в своем скрипте только один раз:

function createOnFormSubmitTrigger() {
  var ss = SpreadsheetApp.getActive();
  ScriptApp.newTrigger('writeTime')
      .forSpreadsheet(ss)
      .onFormSubmit()
      .create();
}

Наконец, ниже приведена функция, которая запускает триггер при отправке формы. Он ищет строку, в которой тема и электронное письмо совпадают с теми, которые приходят из формы, и устанавливает время:

function writeTime(e) {
  var response = e.values;
  var time = response[1];
  var email = response[2];
  var topic = response[3];
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet1");
  var values = sheet.getDataRange().getValues();
  for(var i = 1; i < values.length; i++) {
    if(values[i][0] == email && values[i][1] == topic) {
      sheet.getRange(i + 1, 3).setValue(time);
    }
  }
}

Надеюсь, это полезно для вас.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...