触发不为任何事件触发

时间:2015-03-24 18:25:07

标签: google-apps-script

当有人在Squarespace网站上提交表单时,我想要触发以下非常基本的脚本。这是形式:

/* Send Confirmation Email with Google Forms */

function SendConfirmation() {

  var name, body, email, subject;

  name = 'Matt';
  email = 'myemailaddress@gmail.com';
  subject = "Thanks for signing up for DOPPS!";
  body = "Thank you " + name;

  MailApp.sendEmail(email, subject, body);

}

它只是向我的电子邮件地址发送一封电子邮件,当我从脚本编辑器运行代码时,它可以正常工作。

我设置了以下触发器: triggerimage

我尝试过“On form submit”和“On Edit”,当从网站提交表单时,这些都不会触发。但是,Squarespace的“myFunction”会触发并向所有者帐户发送电子邮件,因此我知道提交表单会触发某些事件。

请注意,我正在使用填充Google表格的Squarespace表单。

2 个答案:

答案 0 :(得分:1)

在工作表界面外调用电子表格时没有事件(调用onEdit和onChange)。您需要的是一个1分钟的时间触发器,用于检查自上次检查后是否添加了新行。您可以使用脚本属性来记住最后处理的行。

答案 1 :(得分:0)

可以使用Google Scripts通过Squarespace Forms和Google表格发送自动确认。 @Zig Mandel表示你必须创建一个每分钟运行一次的时间驱动触发器(模拟自动确认)是正确的。这不是最优雅的方式,但它仍然有效。以下脚本适用于包含3个表单字段(时间戳,名称和电子邮件)的电子表格。我添加了第四列“确认已发送”以跟踪谁已发送电子邮件,谁没有。这是脚本:

/* Send Confirmation Email with Squarespace Forms */

function emailConfirmation(row, sheet) {
  var email = sheet.getRange("C" + row).getValue();
  var body = “Thank you for signing up!”
  var subject = “Welcome to my site!";
  Logger.log(row);

  // Send Email
  MailApp.sendEmail( email, subject, body);

  // Register email sent in spreadsheet
  sheet.getRange("D" + row).setValue('sent');
};

function findIndex(columnValues) {
  var rowNum = [];
  for (var i = 0; i < columnValues.length; i++) {
    if (columnValues[i] == '') {   
      rowNum.push(i + 2);
    }
  }
  return rowNum;
};

function searchForNew(sheet) {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheets()[0]; // gets the first and only sheet
  var column = sheet.getLastColumn();
  var lastRow = sheet.getLastRow();
  var columnValues = sheet.getRange(2, column, sheet.getLastRow() - 1).getValues(); // returns all values in "Confirmation Sent" column
  var searchResult = findIndex(columnValues); // returns rows that do not have a value of 'sent'
  if(searchResult.length > 0) {
    for (var i = 0; i <= searchResult.length - 1; i++) {
      var row = searchResult[i];
      emailConfirmation(row, sheet);
    }
  } else {
    Logger.log('No new registrants.');
  }
}

触发器应在此方案中运行searchForNew()功能。如果有人有兴趣了解更多相关信息,我已经详细介绍了blog post这个解决方法。我花了3天时间试图找出解决方案,所以我认为其他人可能会从中受益。