使用来自subjectLine的var的数据

时间:2016-03-03 02:57:46

标签: google-apps-script google-sheets google-apps google-form asana

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

/*
   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 */

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

Sandy Good创建了一个类似的应用Data Director。我不知道他为什么不在这里提到它?可能不是你想要的。

我还没有使用它,但认为他的作品可能会帮助那些需要它的人。

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

<强>概览

将表单数据发送到不同的表单。与日历集成。发送电子邮件。制作修改网址和/或预填充网址。

Forms Director for Forms Add-on具有多个功能。它可以将表单响应发送到备用电子表格。提交表单时,它可以发送电子邮件或多封电子邮件。它可以为您的日历活动添加访客。      提交Google表单后,Data Director for Forms Add-on可以提交最后一个表单,并将其保存到您选择的第二个电子表格目标中。目标电子表格可以是您的Google帐户有权写入的任何Google电子表格。例如:您的Google表单目前将数据写入电子表格,但您希望表单响应也进入同一电子表格中的第二个表单。这个附加组件可以做到这一点。或者,加载项可以将表单响应的副本写入完全不同的电子表格。      如果要将表单响应的副本保存到表单设计中设置的目标以外的目标,则应安装此附加组件。      但并非所有Data Director都能做到! Data Director还将创建编辑URL和/或预填充URL,并将这些链接保存到电子表格中。     还有更多!它还会通过自定义消息向您选择的电子邮件地址发送电子邮件。这是您可能需要或需要使用的额外选项。

这是一个Data Director可以做的列表!

  • 将表单回复的副本发送到Google电子表格。

    • 已收到表单回复的相同Google电子表格,或

    • 与当前收到表单回复的电子表格不同。

  • 如果选择,请从复制的响应中排除时间戳。默认设置是包含时间戳。

  • 创建编辑网址并保存指向目标电子表格的链接。

  • 创建预填充网址并将链接保存到目标电子表格。

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

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

  • 在电子邮件中包含修改网址和/或预填充网址。

    • 将电子邮件发送到您选择的地址。

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

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

enter image description here