form.getResponses()。length返回不一致的响应。

时间:2015-08-02 18:29:25

标签: google-apps-script google-form

如果有一个Google表单,并在电子表格中附加了以下脚本:

var ss = SpreadsheetApp.openById("INSERT ID");
SpreadsheetApp.setActiveSpreadsheet(ss);//Make it active. 
var sheet = ss.getSheetByName('Form responses 1');
var form = FormApp.openById('INSERT ID');

function testSubmission() {
var numberOfResponses = form.getResponses().length;
var cell = sheet.getRange(sheet.getLastRow(), sheet.getLastColumn());
cell.setValue(numberOfResponses);
}

我希望form.getResponses()。length始终向上递增计数。但是,有时它会跳过一个增量。例如,您可能会看到1,2,3,3,5,6等。

无论响应多远,都会发生这种情况。请在此处查看我的测试回复:enter image description here

还有其他人经历过这个吗?为什么会这样?我怀疑这可能是一个错误,但我在报告之前正在寻找一些确认。

1 个答案:

答案 0 :(得分:0)

无法使用您的代码重现,但它完全错过了一次计数。

考虑:

  • 当您引用的ss持有脚本时,使用.getActiveSpreadsheet()代替openById()
  • 不使用.setActiveSpreadsheet(ss),不需要
  • 让表单保存脚本而不是ss。尽管onSubmit触发器可能与此问题无关,但它可能更可靠。然后可以使用.getActiveForm()
  • 将响应var与其长度分开。 var responses = form.getResponses(); var len = responses.length;
  • 将表格和ss排除在全球范围之外
  • 使用LockService