脚本复制和表单提交的数据进行排序(Script to copy and sort form subm

2019-10-17 15:20发布

我使用谷歌的形式来创造,我想通过邮戳ZA自动排序的表格。 每当有人填写表格的排序将被触发。

我认为,这样做的方法是:

  1. 问是否有关于电子表格“的形式回应副本” ......
    • 如果是,清除所有内容...
    • 其他...
  2. 复制电子表格“的形式回应副本” ......
  3. 排序根据时间戳

下面是我到目前为止的鹅卵石。 它的工作原理只有在第一时间响应被记录下来。 我不是一个编码器,所以任何帮助表示赞赏。 如果有人还可以点我与基本语法命令的列表,我会很感激。

function CopySheet() {
    var ss = SpreadsheetApp.getActiveSpreadsheet();
    var msheet = ss.getSheetByName("Form Responses"); 
    msheet.copyTo(ss);

    var CopySheet = ss.getSheetByName("Copy of Form Responses"); 
    CopySheet.sort(1,   false); // here 1 is for column no. 1 that 
               // is "Column A" and true is for ascending, make it 
               // false if you want descending.
};

Answer 1:

你可以做到这一点没有剧本,通过使用QUERY()在复印纸上。 举例来说,如果你把这个功能您的复印纸单元格A1,代替您的表格回应表格的关键,你会响应的反向时间戳排序副本结束:

=Query(ImportRange(spreadsheet_key,"Form Responses!A:Z"), "select * order by Col1 desc")

这些数据将定期(约5分钟)刷新,所以它会反映新的表单提交,但不实时。

注意:当使用ImportRange()作为源数据Query ,你需要参考列在使用查询字符串ColN符号。

或者,你可以制作电子表格接收表单提交一个表单提交触发功能,并将其排序表格回应复制到复印纸上。 下面的函数做到这一点。 您需要将其设置为电子表格表单提交事件触发功能。 有关如何测试这样的功能的信息,请参阅如何测试中气体的触发功能? 。

function copyFormSubmissions(e) {
  var sourceSheet = e.range.getSheet();
  var data = sourceSheet.getDataRange().getValues();
  var headers = data.splice(0,1)[0]; // remove headers from data
  data.sort(reverseTimestampOrder);  // Sort 2d array
  data.splice(0,0,headers);          // replace headers

  var destId = "--copy-sheet-ID--";
  var destSheet = SpreadsheetApp.openById(destId).getSheetByName('Sheet1');
  destSheet.clear();
  destSheet.getRange(1,1,data.length,data[0].length).setValues(data);
};

function reverseTimestampOrder(a,b) {
  // Timestamp is in first (zero-th) column
  return (b[0]-a[0]);
}

如果有人还可以点我与基本语法命令的列表,我会很感激。

该谷歌Apps脚本API的类和方法是参考这里 。 如果你正在学习,尝试教程(同一地点),我建议你通过某种形式的数字化学习的熟悉的Javascript - CodeAcademy.com是一个良好的开端,因为它引入了所有的语言结构,而不注重网页的发展,使得对Googls Google Apps脚本非常重要。



文章来源: Script to copy and sort form submission data