谷歌应用程序脚本 - 表格不会自动邮寄电子表格回复

时间:2015-01-12 18:25:43

标签: javascript forms google-apps-script google-sheets event-triggers

我是Google Scripts的新手,但我很快就掌握了它的要点。我正在尝试为我们的商业打印机自动订购碳粉。我设置了一个包含4个刻度问题的Google表格,每种颜色一个(CMYK),有1到5个碳粉盒可供选择。

然后,在记录回复的Google电子表格中,我创建了一个脚本(主要来自互联网示例),该脚本获取电子表格的最后一个条目(底行)并发送一封电子邮件,其中包含所需的碳粉盒数量,并带有触发器onFormSubmit()。

当我使用表单并点击提交按钮时,没有任何反应。表单和电子表格之间似乎有脱节?也许有些触发器不起作用?我尝试使用脚本编辑器中的触发器以及可编程触发器,但它仍无法从表单提交中使用。

" ScriptApp"脚本触发器的一部分似乎没有得到Google Scripts编辑器的识别,因为它没有特定的颜色,与其他代码不同,这让我想知道我是否需要写一些形式的#include语句或什么?所有的互联网示例都显示了ScriptApp的颜色。

编译" ...

时没有发现错误
function sendFormByEmail(e) 
{
  ScriptApp.newTrigger("sendFormByEmail").forSpreadsheet(SpreadsheetApp.getActiveSpreadsheet()).onFormSubmit().create();

  var email = "example@email.com"; 

  var s = SpreadsheetApp.getActiveSheet();
  var headers = s.getRange(1,2,1,s.getLastColumn()-1).getValues()[0];
  var colors = s.getRange(s.getLastRow(),2,s.getLastRow(),s.getLastColumn()-1).getValues()[0];
  var message = "";
  var subject = "Toner order";


  for(var i in headers) 
    message += headers[i] + ': ' + colors[i] + "\n\n";



  MailApp.sendEmail(email, subject, message); 
}

1 个答案:

答案 0 :(得分:0)

这绝对有效。必须首先清除过去的触发器,否则会发送多封电子邮件,因为每次提交都会创建一个新的触发器:

var triggers = ScriptApp.getProjectTriggers();

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

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

function sendFormByEmail(e) 
{    

  var email = "example@email.com"; 

  var s = SpreadsheetApp.getActiveSheet();
  var headers = s.getRange(1,2,1,s.getLastColumn()-1).getValues()[0];
  var colors = s.getRange(s.getLastRow(),2,s.getLastRow(),s.getLastColumn()-1).getValues()[0];
  var message = "";
  var subject = "toner order";


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


  MailApp.sendEmail(email, subject, message); 
}