【问题标题】:Having trouble triggering a Google spreadsheet function on Form Submission在提交表单时无法触发 Google 电子表格功能
【发布时间】:2015-03-30 16:27:22
【问题描述】:

我创建了一个链接到包含两个工作表的 Google 电子表格的 Google 表单。我还在 Google Scripts 中创建了一个名为“handleFormSubmission”的函数,当触发时(在提交链接表单时):

  1. 从第一张表创建一个包含此提交值的变量:var s0Row = s0.getRange("A"+(s0Last)+":J"+(s0Last)).getValues();

  2. 然后,如果两个工作表上都满足匹配的 ID 条件,则将工作表一中的这些值设置到工作表二上的适当范围内:s1Row.setValues(s0Row);

可能有更好的方法来做到这一点,但现在从 Google Scripts 运行该函数可以正常工作,并且表单正在将提交返回到第一张表。

我遇到的问题是在提交链接表单时触发此功能。正如您将在下面的屏幕截图中看到的那样,我已尝试设置此触发器。

代码

function handleFormSubmission() {
  var ss = SpreadsheetApp.openById("1FmArzo50IV2Wmykgsa89l_EARjzkiyeFDoPaCjGyBZM");
  SpreadsheetApp.setActiveSpreadsheet(ss);
  var sheet = SpreadsheetApp.getActive();
  var s0 = sheet.getSheets()[0];
  var s0Last = s0.getLastRow();
  var s1 = sheet.getSheets()[1];
  var s1Last = s1.getLastRow();
  var s0Bid = s0.getRange(s0Last, 10).getValue();
  var s0Row = s0.getRange("A"+(s0Last)+":J"+(s0Last)).getValues();
  for (var i = 2; i < s1Last + 1; i++) {
    var s1Bid = s1.getRange(i, 10).getValue();
    var s1First = s1.getRange(i, 2).getValue();
    var s1LastName = s1.getRange(i, 3).getValue();
    var s1Row = s1.getRange("A"+(i)+":J"+(i));
     if (s0Bid === s1Bid) {
      Logger.log(i + " " + s1First + s1LastName);
      Logger.log("s0: " + s0Bid);
      Logger.log("s1: " + s1Bid);
      Logger.log("Match!");
      s1Row.setValues(s0Row);
      Logger.log("----------------------");
      break;
    } else {
      Logger.log(i + " " + s1First + s1LastName);
      Logger.log("s0: " + s0Bid);
      Logger.log("s1: " + s1Bid);
      Logger.log("Nope...");
      Logger.log("----------------------");
    }
  };
};`

当前项目的触发器

【问题讨论】:

  • 我认为事件应该是“来自表单”而不是“来自电子表格”。尝试改变它,它的工作原理。希望有帮助!
  • 感谢 KRR,但“来自电子表格”是唯一的选择。
  • 那是因为您正在使用从电子表格打开的脚本编辑器。当您从表单打开脚本编辑器并在该编辑器中编写函数时,它会填充。
  • KRR,这就是问题所在。谢谢。

标签: javascript google-apps-script google-sheets google-forms eventtrigger


【解决方案1】:

这绝对是您截获的电子表格上的一个事件,尽管这似乎违反直觉。

我遇到了同样的问题并通过删除触发器、创建新版本的脚本然后重新创建触发器来解决它。不知道它为什么起作用——也许 GAppsScript 专家可以向我们解释一下。

另外,为什么不从事件对象中获取表单提交值呢?因此,您可以从事件对象中访问所需的字段,而不是寻找 sheet[0] 的最后一行(在极端情况下,这可能不是您要查找的提交,而是下一个)使用以下任一:

  • e.values(表单值的数组,按它们在电子表格中出现的顺序排列)
  • e.namedValues(表单值的字典/散列)

【讨论】:

    【解决方案2】:

    我认为事件应该是“来自表单”而不是“来自电子表格”。那是因为您正在使用从电子表格打开的脚本编辑器。当您从表单打开脚本编辑器并在该编辑器中编写函数时,它会填充。希望对您有所帮助!

    【讨论】:

      猜你喜欢
      • 2015-09-12
      • 1970-01-01
      • 1970-01-01
      • 2016-11-23
      • 2018-01-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多