我正在使用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.
};
答案 0 :(得分:1)
您可以在没有脚本的情况下通过在副本表中使用QUERY()
来完成此操作。例如,如果您将此函数放在副本工作表的单元格A1中,并将该代码替换为表单响应电子表格,则最终会得到反向时间戳排序的响应副本:
=Query(ImportRange(spreadsheet_key,"Form Responses!A:Z"), "select * order by Col1 desc")
此数据将定期刷新(约5分钟),因此它将反映新表单提交,但不是实时的。
注意:使用ImportRange()
作为Query
的源数据时,需要使用ColN
表示法引用查询字符串中的列。
或者,您可以在接收表单提交的电子表格中生成表单提交触发器功能,并将已排序的表单响应复制到您的副本表。以下功能可以做到这一点。您需要将其设置为电子表格表单提交事件的触发器功能。有关如何测试此类功能的信息,请参阅How can I test a trigger function in 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脚本API类和方法参考是here。如果您正在学习,请尝试教程(相同的地方),我建议您通过某种形式的电子学习熟悉Javascript - CodeAcademy.com是一个很好的起点,因为它引入了所有的语言结构,而没有关注网页开发,使其与Googls Apps Script非常相关。