无法在表单提交时触发Google电子表格功能

时间:2015-03-30 16:27:23

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

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

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

  2. 然后,如果两张纸上都符合匹配的ID条件,请将第一张纸的值设置为第二张纸上的相应范围:s1Row.setValues(s0Row);

  3. 可能有更好的方法可以做到这一点,但是现在这个功能在从Google脚本运行时工作正常,而且表单正在将提交内容返回到第一页。

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

    代码

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

    当前项目的触发器

    Current Project's Triggers

2 个答案:

答案 0 :(得分:2)

这绝对是电子表格中你正在拦截的一个事件,尽管这看似违反直觉。

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

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

  • e.values(表单值的数组按电子表格中显示的顺序排列)
  • e.namedValues(表单值的字典/哈希)

答案 1 :(得分:1)

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