Google apps script 使用来自谷歌表单和不同电子表格的信息自动发送电子邮件?

Google apps script 使用来自谷歌表单和不同电子表格的信息自动发送电子邮件?,google-apps-script,google-sheets,Google Apps Script,Google Sheets,我是谷歌脚本的新手,所以请容忍我。我正在使用谷歌表单和谷歌表单为一个2条件研究注册进行自动化交流。本质上,当参与者提交表单时,我需要发送一封确认电子邮件(触发器是表单提交),注明他们选择的日期,并根据他们的情况发送一个新的唯一ID(我有两个需要使用的预制ID的单独列表)。现在,我有了主表单响应表,然后我使用=query将调查响应根据调查中的多项选择题(“上午”和“晚上”)分为两种情况的表单。我将ID列表填充到相应的工作表中,这样当=查询对响应进行排序时,它们会自动“分配”一个ID作为行填充。我有

我是谷歌脚本的新手,所以请容忍我。我正在使用谷歌表单和谷歌表单为一个2条件研究注册进行自动化交流。本质上,当参与者提交表单时,我需要发送一封确认电子邮件(触发器是表单提交),注明他们选择的日期,并根据他们的情况发送一个新的唯一ID(我有两个需要使用的预制ID的单独列表)。现在,我有了主表单响应表,然后我使用=query将调查响应根据调查中的多项选择题(“上午”和“晚上”)分为两种情况的表单。我将ID列表填充到相应的工作表中,这样当=查询对响应进行排序时,它们会自动“分配”一个ID作为行填充。我有代码在没有ID的情况下发送电子邮件,只使用电子表格第一页(表单响应表)中的名称和日期,但在从另一张对应表中获取ID以放入电子邮件时遇到问题

以下是我所拥有的:

  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
  });

}


我被卡住了,不断地出错。此代码返回错误“TypeError:无法读取未定义”的属性“0”。如果有人能帮助我,将不胜感激

如果你想从工作表中获取一个值,你可以这样做:(即使我通常不会这样做,我也会遵循你使用的相同方法。我假设你的id或任何数据都在行中。但显然我不知道,因为你没有提供这些信息

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.  

  }
通常,在评估过程中,模板会使用scriptlet填充所需的数据


您的模板文件是什么样子的?您的id表是什么样子的?哪一行会抛出此错误?
templ.date = date;
templ.ID = ID;
templ.userName = userName;