我有一个谷歌电子表格,有两张名为Robin和Lucy的表格。每次向A列添加一些数据时,我都会创建/发现/修改一个脚本来对工作表上的数据进行排序
function onEdit(event){
var sheet = event.source.getActiveSheet();
var editedCell = sheet.getActiveCell();
var columnToSortBy = 1;
var tableRange = "a2:I30";
if(editedCell.getColumn() == columnToSortBy){
var range = sheet.getRange(tableRange);
range.sort( { column : columnToSortBy } );
}
}
这个脚本效果很好,但我只想把它应用到第一张表Robin上。第二张表中的数据Lucy不一样,所以一旦我解决了这个问题,我将为那一个创建另一个不同范围的脚本。
我想我需要使用getSheetByName(“Robin”),但我似乎无法让它工作。提前致谢
你可以把你的整个函数放在这样的条件:
function onEdit(event){
var sheet = event.source.getActiveSheet();
if(sheet.getName()=='Robin'){
var editedCell = sheet.getActiveCell();
var columnToSortBy = 1;
var tableRange = "a2:I30";
if(editedCell.getColumn() == columnToSortBy){
var range = sheet.getRange(tableRange);
range.sort( { column : columnToSortBy } );
}
}
}
或者如果条件如下所示,您也可以返回
...
var sheet = event.source.getActiveSheet();
if(sheet.getName()!='Robin'){return}
...
两种方法都以相同的方式工作。
我还建议更换这一行:var tableRange =“a2:I30”;使用:var tableRange = sheet.getDataRange();
随着范围的增长,getDataRange()返回的范围将进行调整以适应它。无需使用硬编码地址,使代码更灵活
仅供参考:我在这里找到了一些有用的例子:
将event object收到的onEdit
转发到处理所需工作表上事件的特定功能。
function onEdit(event) {
var name = event.range.getSheet().getName();
switch (name) {
case "Robin":
updateRobin(event);
break;
case "Lucy":
updateLucy(event);
break;
}
}
function updateLucy(event) {
// Code designed to handle edits to the "Lucy" sheet.
}
function updateRobin(event) {
// Code designed to handle edits to the "Robin" sheet.
}