每次提交Google表单时,如何通过电子邮件发送解析后的字符串?

时间:2013-12-10 09:14:42

标签: google-apps-script google-sheets google-form

我创建了一个Google表单,要求用户从列表中选择名称和ID。名称和ID的格式可以是两种:

Smith, John (12345)
Doe, John (JDO)

我希望每次提交表单时都会自动将电子邮件发送到地址,主题行只是括号中包含的ID。我有自动发送的电子邮件,可以从我想要的单元格中获取整个字符串,但我需要一个函数,可以将字符串解析为括号中包含的内容。到目前为止,这是我在本论坛上找到的帮助拼凑而成的(感谢amit@labnol.org)。

function Initialize() {

  var triggers = ScriptApp.getScriptTriggers();

  for(var i in triggers) {
    ScriptApp.deleteTrigger(triggers[i]);
  }

  ScriptApp.newTrigger("SendGoogleForm")
  .forSpreadsheet(SpreadsheetApp.getActiveSpreadsheet())
  .onFormSubmit()
  .create();
  }

  function SendGoogleForm(e) 
  {  
  try 
  {  
    // You may also replace this with another email address
    var email = "xxxxxx@gmail.com";

    // Optional but change the following variable
    // to have a custom subject for Google Docs emails


    var s = SpreadsheetApp.getActiveSheet();
    var subject = s.getRange(s.getLastRow(),21).getValue();
    var headers = s.getRange(1,1,1,s.getLastColumn()).getValues()[0];    
    var message = "";    

    // Credit to Henrique Abreu for fixing the sort order

    for(var i in headers) {
      message += headers[i] + ' :: '+ e.namedValues[headers[i]].toString() + "\n\n"; 
    }

    message += "Sheet URL :: " + SpreadsheetApp.getActiveSpreadsheet().getUrl() + "\n";

    // This is the MailApp service of Google Apps Script
    // that sends the email. You can also use GmailApp here.

    MailApp.sendEmail(email, subject, message); 

  } catch (e) {
    Logger.log(e.toString());
  }

 }

我只是javascript的新手,所以任何帮助都会非常感激。

干杯。

1 个答案:

答案 0 :(得分:0)

由于ID包含在两种格式的括号内,因此您可以使用javascript字符串操作来有效隔离它:

...
var subject = s.getRange(s.getLastRow(),21).getValue()
               .split('(')[1].split(')')[0];
...

说明:split() method将字符串分解为子字符串数组。我们首先分开开括号,我们期望它会给我们两个子串。我们选择第二个(或第1个,因为数组索引从0开始)子字符串,它包含ID,并进一步将其拆分为闭括号。从该数组中,第一个(第0个)元素是我们的ID。