1

我制作了一个包含许多字段的谷歌表单。我已经放置了一个触发器来将表单值发送到一个特定的(也将它保存在谷歌驱动器的 excel 表中)。但它也会将用户未选择的空白值邮寄给我。我应该如何通过修改以下代码仅将填充的值发送到邮件。

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 
  {  
    var email ="abc@abc.com";

    var subject = "Form Submission";  

    var s = SpreadsheetApp.getActiveSheet();
    var headers = s.getRange(1,1,1,s.getLastColumn()).getValues()[0];    
    var message = "";    
    for(var i in headers) {

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

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

    MailApp.sendEmail(email, subject, message); 

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

}

请帮我怎么做。谢谢 :)

4

2 回答 2

1

另一种方法是使用三元语句:

message += e.namedValues[headers[i]] != "" ? e.namedValues[headers[i]].toString() + "\n\n" : "";

我在 GAS/Javascript 脚本中使用它来防止在生成的电子邮件中发送无关数据。

于 2013-10-24T21:06:01.173 回答
0

我找到了解决问题的方法。只是在 for 循环中添加了一个简单的 if 语句。

解决方案:

for(var i in headers) 
{
      if( e.namedValues[headers[i]].toString() != "") //Add this line.
      {   
      message += headers[i] + ' :: '+ e.namedValues[headers[i]].toString() + "\n\n"; 
      }
    }
于 2013-10-16T09:24:28.243 回答