我的Google表格功能可以在通过编辑器运行时完成工作,但是在通过表单提交进行触发时会给出不同的结果

我有一个Google表单和一个工作表,用于收集响应,这些响应当然总是显示在底部。我一直在使用以下脚本将响应表(表单响应2)中的最后响应(始终位于最后一行)复制到另一个表的第二行(所有响应)。当在表单提交上由触发器运行时,脚本会将空白行插入所有响应,然后将复制的值插入空白行上方的另一行。请您帮忙,告诉我为什么以及如何更改脚本,以便不添加空白行:

function CopyLastrowformresponse () {
var ss = Spreadsheetapp.getactive();
var AR = ss.getSheetByName("All Responses");
var FR = ss.getSheetByName("Form responses 2");
var FRlastrow = FR.getLastRow();

AR.insertRowBefore(2);
FR.getRange(FRlastrow,1,FRlastrow,22).copyTo(AR.getRange("A2"),Spreadsheetapp.CopypasteType.PASTE_VALUES,false);

  }
hdljh 回答:我的Google表格功能可以在通过编辑器运行时完成工作,但是在通过表单提交进行触发时会给出不同的结果

一些事情可能会在这里发生。

  1. 当我认为您只想获得1行时,您得到的行数等于FRlastrow
  2. Apps脚本具有onFormSubmit()触发器的错误行为,因此您可以检查重复的触发器(请参阅this answer)。
  3. 该脚本未完全利用onFormSubmit()提供的event object。具体来说,您可以使用e.values,它是相同的数据,而不是从一张纸上获取最后一行。

我将脚本更改为以下内容:

function CopyLastrowformresponse (e) {
  if (e.values && e.values[1] != "") { // assuming e.values[1] (the first question) is required
    SpreadsheetApp.getActive()
      .getSheetByName("All Responses")
      .insertRowBefore(2)
      .getRange(2,1,e.values.length)
      .setValues([e.values]);
  }
}

但是,最终,如果您要做的只是简单地 reverse 结果的顺序,那么我将完全放弃Apps脚本,只使用=SORT()函数。

=SORT('Form responses 2'!A:V,'Form responses 2'!A:A,FALSE)
本文链接:https://www.f2er.com/3127746.html

大家都在问