Автоматическая рассылка по электронной почте с использованием информации из формы Google и различных таблиц? - PullRequest
0 голосов
/ 19 марта 2020

Я новичок в скриптах Google, поэтому, пожалуйста, потерпите меня. Я работаю над автоматизацией связи для регистрации в двух условиях с помощью формы Google и листов Google. По сути, когда участник отправляет форму, мне нужно отправить подтверждение по электронной почте (триггер - это отправка формы) с выбранной датой и новым уникальным идентификатором в зависимости от его состояния (у меня есть два отдельных списка готовых идентификаторов, которые мне нужно использовать. ). Прямо сейчас у меня есть основной лист ответов формы, а затем я использую = query, чтобы разделить ответы опроса на листы для двух условий на основе вопроса с множественным выбором в опросе («Утро» и «Вечер»). У меня есть списки идентификаторов, заполненные на соответствующие листы, так что когда запрос = сортирует ответы, им автоматически «присваивается» идентификатор при заполнении строк. У меня есть код, работающий для отправки электронных писем без идентификаторов, просто используя имя и дату на первом листе электронной таблицы (лист ответа формы), но я сталкиваюсь с проблемами при получении идентификатора с другого соответствующего листа для вставки в электронное письмо. ,

Вот что у меня есть:

  function IntialEmails(e){
  var ss = SpreadsheetApp.openById('MyownSpreadsheetID'); //not including real ID for privacy reasons
  var type = e.values[4];

  if (type == 'Condition A') {
    var sheet = ss.getSheets()[1];
    ss.setActiveSheet(sheet);
  }

  if (type == 'Condition B') {
    var sheet = ss.getSheets()[2]; 
    ss.setActiveSheet(sheet);
  }


  var userName = sheet.values[0];
  var userEmail = sheet.values[2];
  var date = sheet.values[4]; //Using date from corresponding spreadsheet based on survey format
  var ID = sheet.values[5]; // Should be from corresponding sheet
  var subject = "Study Signup Confirmation and Participant ID";

  var templ = HtmlService
      .createTemplateFromFile('My html'); //not including real ID for privacy reasons

  templ.date = date;
  templ.ID = ID;
  templ.userName = userName;

  var message = templ.evaluate().getContent();

  MailApp.sendEmail({
    to: userEmail,
    subject: subject,
    htmlBody: message
  });

}

Я очень застрял и постоянно получаю ошибки. Этот код возвращает сообщение об ошибке «Ошибка типа: невозможно прочитать свойство« 0 »неопределенного значения». Если кто-нибудь может мне помочь, это было бы очень полезно!

1 Ответ

0 голосов
/ 19 марта 2020

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

function initEmails(e) {
  var ss=SpreadsheetApp.getActive();
  var shts=ss.getSheets();
  var sh=(e.values[4]=="Condition A")?shts[1]:shts[2];
  var vs=sh.getRange(1,1,sh.getLastRow(),7).getValues();
  for(var i=0;i<vs.length;i++) {
    if(vs[i][7]!='USED') {
       var userName=vs[i][0];
       var userEmail=vs[i][2];
       var date=vs[i][4];
       var ID=vs[i][5];
       var subject = "Study Signup Confirmation and Participant ID";
       sh.getRange(i+1,8).setValue('USED');//this provides a way to keep track of which row was used last
    } 
    /*.............I have no idea what your trying to do beyond this point.  

  }

Но я не думаю, что вы сможете вставьте эти значения в шаблон html следующим образом:

templ.date = date;
templ.ID = ID;
templ.userName = userName;

Обычно шаблоны заполняются требуемыми данными во время процесса оценки с помощью скриптлетов.

Templated HTML

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