在主题行中使用来自 var 的数据

Using data from var in subjectLine

我正在修改 Amit 的代码(在此处找到:http://labnol.org/?p=20884) 尝试使用 Google 表单中的数据发送电子邮件。 但我想抓住的是他的钥匙和专栏。 我想专门从相关行中获取前 1 列和第 2 列的数据,并将其用作主题字段中的 var。 但是输出(在电子邮件中以及发送到 asana 时)被列为未定义。我哪里错了?

/*
   Send Google Form Data by Email v4.2
   Written by Amit Agarwal amit@labnol.org
   Source: http://labnol.org/?p=20884
*/

/**
 * @OnlyCurrentDoc
 */

function Initialize() {

  try {

    var triggers = ScriptApp.getProjectTriggers();

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

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

  } catch (error) {
    throw new Error("Please add this code in the Google Spreadsheet");
  }
}

function EmailGoogleFormData(e) {

  if (!e) {
    throw new Error("Please go the Run menu and choose Initialize");
  }

  try {

    if (MailApp.getRemainingDailyQuota() > 0) {

      // You may replace this with another email address
      var email = "x+00000000@mail.asana.com";

      // Enter your subject for Google Form email notifications

      var key, entry,
        message = "",
        ss = SpreadsheetApp.getActiveSheet(),
        cols = ss.getRange(1, 1, 1, ss.getLastColumn()).getValues()[0];

      // Iterate through the Form Fields
      for (var keys in cols) {

        key = cols[keys];
        entry = e.namedValues[key] ? e.namedValues[key].toString() : "";

        // Only include form fields that are not blank
        if ((entry !== "") && (entry.replace(/,/g, "") !== ""))
          message += key + ' :: ' + entry + "\n\n";
        var first = entry[1];
        var last = entry[2];

              var subject = first+" "+last+": Interested Candidate";

      }

      MailApp.sendEmail(email, subject, message);
    }
  } catch (error) {
    Logger.log(error.toString());
  }
}

/* For support, contact developer at www.ctrlq.org */

entry是一个字符串,定义在这里:

    entry = e.namedValues[key] ? e.namedValues[key].toString() : "";

...您稍后将其视为数组:

    var first = entry[1];
    var last = entry[2];

此时,firstlast都将是undefined,因为entry 不是数组.此外,这是在遍历行中所有列的 for 循环内 - 你看不到任何不好的副作用,但是 subject 的这些分配和生成发生了多次.

最后一条线索表明了实现目标的更好方法。在循环之前定义 firstlast 变量,使用默认值。然后在遍历列时,注意包含候选人姓名的列,并更新默认内容。最后在循环之后,生成主题行。

function EmailGoogleFormData(e) {

  if (!e) {
    throw new Error("Please go the Run menu and choose Initialize");
  }

  try {

    if (MailApp.getRemainingDailyQuota() > 0) {

      // You may replace this with another email address
      var email = "x+00000000@mail.asana.com";

      // Enter your subject for Google Form email notifications

      var key, entry,
        first = "unknown", last = "unknown",
        message = "",
        ss = SpreadsheetApp.getActiveSheet(),
        cols = ss.getRange(1, 1, 1, ss.getLastColumn()).getValues()[0];

      // Iterate through the Form Fields
      for (var keys in cols) {

        key = cols[keys];
        entry = e.namedValues[key] ? e.namedValues[key].toString() : "";

        // Only include form fields that are not blank
        if ((entry !== "") && (entry.replace(/,/g, "") !== ""))
          message += key + ' :: ' + entry + "\n\n";

        if (key == "first") {  // Assumes "first" is column header
          first = entry;
        }
        if (key == "last") {  // Assumes "last" is column header
          last= entry;
        }

      }

      var subject = first+" "+last+": Interested Candidate";

      MailApp.sendEmail(email, subject, message);
    }
  } catch (error) {
    Logger.log(error.toString());
  }
}

Sandy Good 开发了一个类似的应用程序 Data Director。不知道他为什么不在这里提?可能不是您要找的。

我还没有用过,但觉得他的作品可能对需要的人有所帮助。

----------------------------------------

概览:

将表单数据发送到不同的 sheet。与日历集成。发送电子邮件。进行编辑 URL and/or 预填充 URL.

Forms Add-on 的 Data Director 具有多项功能。它可以将表单响应发送到备用传播sheet。它可以在提交表单时发送一封电子邮件或多封电子邮件。它可以将客人添加到您的日历活动中。 当您提交 Google 表单时,表单附加组件的数据主管可以获得最后提交的表单,并将其保存到您选择的第二个 spreadsheet 目的地。目标价差sheet 可以是您的 Google 帐户有权写入的任何 Google 价差sheet。例如:您的 Google 表单当前正在将数据写入一个跨页 sheet,但您希望表单响应也进入同一个跨页 sheet 中的第二个 sheet。这个插件可以做到这一点。或者附加组件可以将表单的副本写入完全不同的传播sheet。 如果您想将表单响应的副本保存到表单设计中设置的目的地以外的目的地,则应安装此附加组件。 但这并不是 Data Director 所能做的全部! Data Director 还将创建一个 Edit URL and/or 和 PreFilled URL,并将那些 link 保存到 spreadsheet。 还有更多!它还会通过自定义消息向您选择的电子邮件地址发送一封电子邮件。这是您可能想要或需要使用的额外选项。

这是 Data Director 可以做什么的列表!

  • 发送对 Google 传播sheet 的表格回复的副本。

    • 相同的 Google spreadsheet 已经收到表单响应,或者

    • 与当前接收表单响应不同的传播sheet。

  • 如果您愿意,可以从复制的响应中排除时间戳。默认包含时间戳。

  • 创建编辑 URL 并将 link 保存到目标传播sheet。

  • 创建预填充 URL 并将 link 保存到目标点差sheet。

  • 向您选择的电子邮件地址发送多封电子邮件。

  • 向从表单字段中收集的电子邮件地址发送电子邮件。

  • 在电子邮件中包含编辑 Url and/or 预填 Url。

    • 将电子邮件抄送至您选择的地址,或不抄送。

    • 包括指定主题行的选项。

    • 邮件的正文可以写在邮件的设置里。无需创建模板电子邮件。