javascript - 谷歌应用程序脚本 - 表单不会自动邮寄电子表格响应

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

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

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

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

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

最佳答案

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

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

关于javascript - 谷歌应用程序脚本 - 表单不会自动邮寄电子表格响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27908399/

相关文章:

java - 如何从 JavaScript 调用小程序中声明的方法

javascript - AngularJS指令: Attaching a function from the controller to ng-click

javascript - 从 html 表单到 javascript

javascript - 将字符串转换为 float /数字以在 javascript 中进行数值运算

javascript - 使用 fs.writeFileSync 时避免竞争条件

javascript - 创建长度为 n 的空数组

google-apps-script - 如何在Google Apps脚本电子表格中引用当前单元格

google-apps-script - 无法将视频插入稍后观看 (WL) 播放列表

css - 使用 CSS 将输入值旋转 90 度

css - 如何在 Mac 上设置样式选择标签