【发布时间】:2016-09-13 17:11:08
【问题描述】:
我正在通过应用脚本处理谷歌表单。我想确定当前提交的表单是处于编辑模式还是新响应?如何在 onSubmit 事件中检查这一点。
如果是,该用户正在编辑之前提交的回复,而不是我想将电子表格中的值更改为“是”。
下面是我的代码的 sn-p:
function testExcel2() {
var email = "email";
var s = SpreadsheetApp.openById("id");
var sheet = s.getSheets()[0];
var headers = sheet.getRange(1,1,1,sheet.getLastColumn() - 1).getValues()[0];
var datarow = sheet.getRange(sheet.getLastRow(),1,1,sheet.getLastColumn() - 1).getValues()[0];
var message = "";
for(var i in headers)
{
message += "" + headers[i] + " : " + datarow[i] + "\n\n";
}
MailApp.sendEmail(email, "Submitted Data Test", message);
var af = FormApp.getActiveForm();
//af.setCustomClosedFormMessage("The form is currently processing a submission, please refresh the page.");
af.setConfirmationMessage('Thanks for responding!')
//af.setAcceptingResponses(false);
var rowKey = "o" + sheet.getLastRow();
var editCell = sheet.getRange(rowKey).setValue('no');
}
【问题讨论】:
-
我不知道有什么完美的方法可以从表单确定提交是编辑还是新响应。我花了很多时间试图想出一些东西。我希望有办法。我将响应 ID 保存到电子表格中,并在电子表格中查找表单提交的响应 ID。因此,我知道确定它是否是编辑的唯一方法是在表单之外拥有一组数据。在您可以比较旧/新时间戳之前,编辑的时间戳会在表单数据中更新。所以你不能这样想。
-
另外,编辑后的响应似乎放在了数据的末尾,所以无法比较当前提交的表单是否在数据的末尾。无论是新回复还是编辑过的回复,它始终位于数据的末尾。它似乎是按时间戳排序的。我认为这是 Google 表单中的一个重大缺陷。我可能会将第二组数据保存到一个文本文件中,并将其用作新旧数据的比较。
-
@SandyGood。我刚刚做了一个测试。在我的测试中,当回复被编辑时,回复不会被排序,所以编辑过的回复会保留它的位置。
-
@Rubén 把它放在哪里?显示在表格中的个别回复中?我认为个人响应如何显示在“个人响应”选项卡中,以及从数组中的 FormApp 获取数据可能是两件不同的事情。比如
FormApp.getActiveForm().getResponses();,则获取返回的数组的长度,获取最后的响应。这就是您测试获得最后响应的方式吗?如果有办法获取当前响应,然后在数组中找到它的索引,并且它不是最后一个元素,那么它可能会起作用。 -
@SandyGood:对不起,我使用绑定到电子表格而不是表单的脚本进行了测试,所以我的意思是回复保留在回复表上的位置。跨度>
标签: google-apps-script google-sheets google-forms