我怎样才能从同一个 onFormSubmit 触发器中获取多个不需要的事件块?

How can I be getting multiple unwanted event blocks from the same onFormSubmit Trigger?

我今天早上创建了一个一个问题表单,因为我想亲自看看事件块。然而,这个过程让我出乎意料。我的描述如下:

我正在使用以下代码记录 onFormSubmit 事件:

function testFormSubmission(e) {
  var lock=LockService.getUserLock();
  try{
      if(lock.tryLock(30000)) {
      var ss=SpreadsheetApp.getActive();
      var sh=ss.getSheetByName('LogSheet');
      var tA=[Utilities.formatDate(new Date(), Session.getScriptTimeZone(),"d/M/yyyy HH:mm:ss")];
      tA=tA.concat(e.values);
      tA.splice(tA.length-1,1,e.triggerUid,e.range.rowStart,e.range.columnEnd,JSON.stringify(e.values));
      sh.appendRow(tA);
      lock.releaseLock();
    }
  }
  catch (e){throw("Couldn\'t get lock for 30 seconds");return;};
}    

下面有两张我的传播图片sheet:

e.values 实际上只有两列,一列是日期,一列是问题的答案,即 "green" 或 "blue"。空白列是因为我一开始提出了三个问题并收集了电子邮件,但为了简单起见,我决定删除其中两个,因为我自己生成了提交内容。

无论如何,C 列中没有绿色或蓝色的响应不应该存在。 J 列只是 JSON.stringify(e.values),它似乎暗示e 中的值不正确...我认为? Yes/No

这是 Spread 的图像sheet。 (其中一些)

这是表单回复 1 Sheet:

这是日志Sheet:

So my question is simply where are the unwanted appended lines in the Log Sheet coming from?

我更新了我的标题问题,因为我认为我不会收到多个提交,否则我希望在表单回复 1 中有多行 sheet。

供您参考,LogSheet 中的 columnH 是 rowStart,因此很容易找出 Form Response 1 中的哪一行相关联。

获得虚假的 onFormSubmit 触发器

作为@J.G。指出我从每次提交的表格中得到了不止一个触发器。

通过将 e.values 记录到电子表格中,我注意到我没有得到任何答案。因此,为了消除这些不需要的触发器,我只使用了以下逻辑。

if(e.values && !e.values[1]){return;} 其中 e.values[1] 是必答题。

我的日志:

C 列中没有值的行是不需要的触发器。

我认为您的代码证明某些触发器是虚假的和不需要的,因此 Google 不应生成它们。我向 Google 提交了关于类似问题的反馈。

在我不需要的触发器中,我只是让 e.range.getRow() 确定更改了哪一行,然后转到该行进行所需的计算。在我的例子中,该行包含所有虚假触发器的正确​​信息(可能是因为第一个正确地记录了电子表格中的数据)。

您的代码是防止它发生的重要后盾,但我有太多的表单和触发器无法涵盖。将这段代码放在所有这些地方会很痛苦。希望 google 尽快解决这个问题,我们不会再看到任何虚假触发器的发生。