1

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

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

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

Google Scripts 编辑器似乎无法识别脚本触发器的“ScriptApp”部分,因为它不是特定的颜色,与其他代码不同,这让我想知道我是否必须编写某种形式的#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); 
}
4

1 回答 1

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); 
}
于 2015-01-12T19:43:13.820 回答