Coo*_*per 4 google-sheets google-apps-script google-forms
我今天早上创建了一个问题表格,因为我想自己看看事件块。但是,这个过程对我来说是出乎意料的。我的描述如下:
我正在使用以下代码记录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;};
}
Run Code Online (Sandbox Code Playgroud)
我的电子表格下面有两张图片:
e.values实际上只有两列,一列是日期,一列是问题的答案,即“绿色”或“蓝色”。空白列来自以下事实:我从三个问题开始并收集电子邮件,但为了简化起见决定删除其中两个,因为我是自己生成提交的。
无论如何,在columnC中没有绿色或蓝色的响应都不应存在。 J列很简单JSON.stringify(e.values),似乎表明e中的值不正确...我认为吗?是/否
这是电子表格的图像。(其中一些)
这是表格回复1表格:
这是LogSheet:
所以我的问题很简单,日志表中多余的附加行是从哪里来的?
我更新了标题问题,因为我认为我不会收到多次提交,否则我希望在Form Responses 1工作表中有多行。
对于您的信息,LogSheet中的columnH是rowStart,因此很容易找出Form Response 1中的哪一行相关。
正如@JG指出的那样,每次提交表单我都会得到更多的触发。
通过将e.values记录到电子表格中,我注意到我没有得到任何答案。因此,为了消除这些不必要的触发器,我只使用了以下逻辑。
if(e.values && !e.values[1]){return;}e.values[1]必需的问题在哪里。
我的日志:
C列中没有值的行是不需要的触发器。