我正在使用Google表单创建一个电子表格,我希望按日期戳Z-A自动排序。 每当有人填写表单时,都会触发排序。
我认为这样做的方法是:
- 询问电子表格上是否有"表单回复的副本"...
- 如果是,请清除所有内容...
- 还。。。
- 将电子表格复制到"表单回复副本"...
- 根据时间戳排序
以下是我到目前为止拼凑的内容。 它仅在第一次记录响应时有效。 我不是编码员,所以任何帮助都值得赞赏。 如果有人也可以指出我带有基本语法的命令列表,我将不胜感激。
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.
};
您可以在没有脚本的情况下,通过在复制工作表中使用QUERY()
来完成此操作。例如,如果您将此函数放在复制表的单元格 A1 中,并将键替换为表单响应电子表格,则最终会得到一个反向时间戳排序的响应副本:
=Query(ImportRange(spreadsheet_key,"Form Responses!A:Z"), "select * order by Col1 desc")
此数据将定期刷新(~5 分钟),因此它将反映新表单提交,但不是实时的。
注意:使用 ImportRange()
作为Query
的源数据时,您需要使用ColN
表示法引用查询字符串中的列。
或者,您可以在接收表单提交的电子表格中生成表单提交触发器函数,并让它将排序后的表单响应复制到您的复制表中。以下函数执行此操作。您需要将其设置为电子表格表单提交事件的触发函数。有关如何测试此类功能的信息,请参阅如何在 GAS 中测试触发功能?。
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]);
}
如果有人也可以指出我带有基本语法的命令列表,我将不胜感激。
Google Apps Script API 类和方法参考资料在这里。如果你正在学习,试试教程(同一个地方),我建议你通过某种形式的电子学习来熟悉Javascript - CodeAcademy.com 是一个很好的起点,因为它引入了所有语言结构而不关注网页开发,这使得它与Googls Apps Script非常相关。