我使用Google表格让人们请假。名为“表单批准”的加载项用于向某些可以批准或拒绝请求的人发送电子邮件。在列出响应的Google表格中,新条目一直位于底部。
是否可以通过Google表格中的休假日期自动对Google表单中的新条目进行排序?
我找到了这个脚本,但是它不起作用:
function onEdit(event){
var sheet = event.source.getActiveSheet();
var editedCell = sheet.getActiveCell();
var columnToSortBy = 2;
var tableRange = sheet.getDataRange();
if(editedCell.getColumn() == columnToSortBy){
var range = sheet.getRange(tableRange);
range.sort( { column : columnToSortBy } );
}
}
还有,是否可以指定运行脚本的工作表标签?
答案 0 :(得分:1)
尝试一下:
function onEdit(e){
var sh=e.range.getSheet();
if(sh.getName()!="Your desired sheet name")return;
if(e.range.columnStart==2){
sh.getDataRange().sort({ column:2});
}
}
许多新程序员尝试从脚本编辑器运行这些onEdit(e)函数。不幸的是,这是行不通的,因为e参数期望由事件触发器填充。如果没有事件对象,通常会收到诸如无法读取未定义属性范围之类的错误,因为事件触发器未填充e。
我通过确保编辑正确的图纸和正确的范围来测试它们,并使用e.source.toast()函数为我提供类似于console.log()的反馈。
如果您想了解有关事件对象的更多信息,请尝试添加Logger.log(JSON.stringify(e));。到函数声明后的第一行。然后以适当的方式编辑适当的工作表并使其运行,然后查看日志以查看结果。
答案 1 :(得分:0)
如果您的工作表由表单填充,并且您希望在每次提交新表单时对数据进行排序-您需要使用onFormSubmit
触发器。
Google表单按时间顺序填充了目标电子表格,为避免发生干扰,您可以使用同步表,每次提交表单时将数据传输到该同步表,并可以根据需要进行排序。
示例:
function myFunction() {
var ss=SpreadsheetApp.getActiveSpreadsheet();
var sheet=ss.getActiveSheet();
if(sheet.getName()=="Name of Tab to copy and sort"){
var lastRow=sheet.getLastRow();
var lastCol=sheet.getLastColumn();
var range=sheet.getRange(lastRow,1,1,lastCol);
var secondarySheetId="XXX";//Paste here the Id of the secondary spreadsheet
var secondarySheet=SpreadsheetApp.openById(secondarySheetId).getSheetByName("Name of tab of your choice");
secondarySheet.getRange(secondarySheet.getLastRow()+1,1,1,lastCol).setValues(range.getValues());
SpreadsheetApp.flush();
var secondaryRange = secondarySheet.getDataRange();
var columnToSortBy=2; //adapt to your needs
secondaryRange.sort( { column : columnToSortBy } );
}
}
将此脚本连接到目标电子表格,插入辅助电子表格(您必须首先创建)的ID,保存脚本并通过Edit->Current project's triggers->New trigger
将installable onFormSubmit触发器绑定到脚本。
答案 2 :(得分:0)
我使用https://www.idiotinside.com/2018/06/08/sort-multiple-columns-google-sheets-apps-script/知道了:)
对于我的电子表格:
将此脚本与onEdit触发器一起使用:
SHEET_NAME = "Requests";
SORT_DATA_RANGE = "A2:L1500";
SORT_ORDER = [
// {column: 1, ascending: true}, // 1 = column number for Column A, sorting by ascending order
// {column: 3, ascending: false}, // 3 = column number for Column C, sorting by descending order
{column: 2, ascending: true},
];
function onEdit(e){
multiSortColumns();
}
function multiSortColumns(){
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName(SHEET_NAME);
var range = sheet.getRange(SORT_DATA_RANGE);
range.sort(SORT_ORDER);
ss.toast('Sorting by Date completed.');
}
然后转到https://script.google.com/并为上述脚本创建触发器。在“选择事件类型”下,使用“在表单上提交”。
目前为止效果很好:)