【问题标题】:google apps script - form not automatically mailing spreadsheet response谷歌应用程序脚本 - 表单不会自动邮寄电子表格响应
【发布时间】:2015-01-12 18:25:43
【问题描述】:

我是 Google 脚本的新手,但很快就掌握了它的要点。我正在尝试为我们的商业打印机自动订购碳粉。我设置了一个包含 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); 
}

【问题讨论】:

  • 您只是为附加到电子表格的表单创建触发器。 sendFormByEmil(e) 只会在您提交表单时触发(根据您创建的触发器)。
  • Initialize() 函数不调用sendFormByEmail() 函数。如果您只希望在提交表单时运行 sendFormByEmail() 函数,您不会希望它这样做。
  • 为什么要先删除所有触发器?为什么要在代码中创建触发器?
  • 我编辑了问题以消除不需要的冗余代码,例如先删除触发器。此代码也不起作用...
  • 另外,我正在代码中创建触发器,因为从编辑器的资源部分它也不起作用,所以我认为对它们进行编程会起作用吗?它没有...

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


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2012-09-24
    • 1970-01-01
    • 1970-01-01
    • 2017-06-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-15
    • 2019-11-16
    相关资源
    最近更新 更多