【问题标题】:Google Form Script - Email SubmissionGoogle 表单脚本 - 电子邮件提交
【发布时间】:2016-01-26 21:48:36
【问题描述】:

我正试图让谷歌通过电子邮件将表单中提交的信息发送给我。我可以让它与默认工作表(表单响应)一起工作,但我使用的是一个名为“ConversionTracker”的单独工作表,它实际上使用查询函数将数据从默认工作表导入到第二个工作表,这样我就可以在其中使用公式的回应。基本上我希望电子邮件脚本在发送最后一次提交的电子邮件时引用第二张表而不是第一张表。每次我使用脚本时,我都有它从第一张表发送数据(表单响应)而不是表名为“Conversion Tracker”的我尝试了不同的脚本变体,但似乎无法理解。请参阅下面的脚本。

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 = "dustin.****@b****.com";

  // Enter your subject for Google Form email notifications
  var subject = "Google Form Submitted";

  var key, entry,
    message = "",
    ss = SpreadsheetApp.getActiveSheet(),
    sheet = ss.getSheets()["ConversionTracker"],
    ss.setActiveSheet(sheet),
    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";
  }

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

工作并从第一张表发送数据的脚本是:

函数初始化(){ 试试 {

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 = "dustin****@b****.com";

  // Enter your subject for Google Form email notifications
  var subject = "Google Form Submitted";

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

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

【问题讨论】:

    标签: google-apps-script google-sheets google-docs google-spreadsheet-api


    【解决方案1】:

    我认为您不能使用方括号内的文本来获取工作表:

    sheet = ss.getSheets()["ConversionTracker"]
    

    我会使用.getSheetByName() 方法。

    getSheetByName("ConversionTracker");
    

    代码:

    ss = SpreadsheetApp.getActiveSpreadsheet();
    sheet = ss.getSheetByName("ConversionTracker");
    

    【讨论】:

    • 嗨,我在日志中收到消息“[15-10-27 12:09:01:639 EDT] TypeError: Cannot find function getSheetByName in object Sheet。”当我尝试改变它时。请参阅下面我更改为的代码.. var key, entry, message = "", ss = SpreadsheetApp.getActiveSheet(), sheet = ss.getSheetByName("ConversionTracker"); ss.setActiveSheet(表); var cols = ss.getRange(1, 1, 1, ss.getLastColumn()).getValues()[0];
    • 您正在使用一个名为ss 的变量,该变量通常用于电子表格。但是您将活动工作表分配给变量ss。使用ss = SpreadsheetApp.getActiveSpreadsheet();
    • 嗨桑迪,我也收到了错误消息“ [15-10-27 10:10:10:559 PDT] InternalError: 找不到方法 setActiveSheet((class))。 "我的脚本是: var key, entry, message = "", ss = SpreadsheetApp.getActiveSpreadsheet(), sheet = ss.getSheets()["ConversionTracker"]; ss.setActiveSheet(表); var cols = ss.getRange(1, 1, 1, ss.getLastColumn()).getValues()[0];
    • 您的代码中仍有sheet = ss.getSheets()["ConversionTracker"]; 。添加这行代码Logger.log('sheet: ' + sheet);' somewhere after the line of code to assign sheet`。运行代码,然后在 View 菜单中打开 Logs。打印到日志的内容是什么?
    • 嗨桑迪,我想也许是我的;而且,不对..但是我按照您所说的那样做了记录器:[15-10-27 13:42:57:877 EDT] sheet: Sheet [15-10-27 13:42:58:086 EDT] InternalError: 找不到方法 getRange(number,number,number,number)。我更改了 [ ],所以它们不再存在,所以现在代码是:` var key, entry, message = "", ss = SpreadsheetApp.getActiveSpreadsheet(), sheet = ss.getSheetByName("ConversionTracker"); Logger.log('sheet:' + sheet); ss.setActiveSheet(表); var cols = ss.getRange(1, 1, 1, ss.getLastColumn()).getValues()[0];`
    猜你喜欢
    • 2021-11-11
    • 1970-01-01
    • 2016-11-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-15
    • 1970-01-01
    相关资源
    最近更新 更多