我在跟踪器中使用了2个函数。 1函数用于在编辑该列中的单元格时自动按日期(最早的第一个)对列C进行排序。如果在该单元格中输入“done”或“void”一词,则整行将被复制到下一张纸上。
但是我的问题是当我在这个单元格中输入'done'或'void'时,Google工作表正在对列表进行排序,并处理移动函数,从而移动错误的行(排序后生成的行号)。我该如何修复或改进代码。
function movedonevoid(event) {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var s = event.source.getActiveSheet();
var r = event.source.getActiveRange();
var value = r.getValue();
if(s.getName() == "tracker" && r.getColumn() == 3 && (value=="done" || value=="void" )) {
var row = r.getRow();
var numColumns = s.getLastColumn();
var targetSheet = ss.getSheetByName("tracker2");
var target = targetSheet.getRange(targetSheet.getLastRow() + 1, 1);
s.getRange(row, 1, 1, numColumns).moveTo(target);
s.deleteRow(row);
}
}
和
function sorttracker(event){
var sheet = event.source.getActiveSheet();
if(sheet.getName() == 'tracker'){
var editedCell = sheet.getActiveCell();
var columnToSortBy = 3;
var tableRange = "A2:D"; // What to sort.
if(editedCell.getColumn() == columnToSortBy) {
var range = sheet.getRange(tableRange);
range.sort( { column : columnToSortBy, ascending: true } );
}
}
}
我已经将上面的2位代码作为2个不同的脚本插入,然后使用项目触发器进行“编辑”。不确定这是不是最好的方法?
正如您已经注意到的那样,让两个不同的函数在同一范围内运行并被两个不同的onEdit触发器调用并不是一个好主意。
而不是使用两个onEdit触发器,只使用一个来调用orchestral conductor函数,该函数将调用原始的两个。 orchestral conductor function
可能类似于以下内容:
function onEdit(e) {
movedonevoid(e);
sorttracker(e);
}