我怎样才能从同一个 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 尽快解决这个问题,我们不会再看到任何虚假触发器的发生。
我今天早上创建了一个一个问题表单,因为我想亲自看看事件块。然而,这个过程让我出乎意料。我的描述如下:
我正在使用以下代码记录 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 尽快解决这个问题,我们不会再看到任何虚假触发器的发生。