我的谷歌电子表格脚本只运行一个函数.我把剧本编错了吗

My google spreadsheet script only runs one function. Am I coding the script wrong?

本文关键字:函数 错了 一个 脚本 电子表格 谷歌 运行 我的      更新时间:2023-09-26

第一个函数可以很好地进行排序,但我无法让归档行的第二个函数同时工作。

   function onEdit(event){
    var sheet = event.source.getActiveSheet();
    var editedCell = sheet.getActiveCell();
    var columnToSortBy = 10;
    var tableRange = "J:J3"; // What to sort. 
    if(editedCell.getColumn() == columnToSortBy){   
        var range = sheet.getRange(tableRange);
        range.sort( { column : columnToSortBy, ascending: true } );
        function onEdit2(event) {
            var ss = SpreadsheetApp.getActiveSpreadsheet();
            var s = event.source.getActiveSheet();
            var r = event.source.getActiveRange();
            if(s.getName() == "Orders" && r.getColumn() == 10 && r.getValue() == "5. Archive") {
                var row = r.getRow();
                var numColumns = s.getLastColumn();
                var targetSheet = ss.getSheetByName("Archive");
                var target = targetSheet.getRange(targetSheet.getLastRow() + 1, 1);
                s.getRange(row, 1, 1, numColumns).moveTo(target);
                s.deleteRow(row);
            }
        }
    }
}

您在if语句块中定义了onEdit2(event),但从未执行它。

在块内部定义这样的函数是不好的做法。你不能真的有条件地定义一个函数。请参阅此链接以了解有关为什么会出现这种情况的更多信息。

如果if条件为true,则似乎要执行onEdit2函数。

如果是这样的话,你应该全局定义函数,这样你就可以在任何需要的地方执行它

你可能想做这样的事情:

  function onEdit(event){
    var sheet = event.source.getActiveSheet();
    var editedCell = sheet.getActiveCell();
    var columnToSortBy = 10;
    var tableRange = "J:J3"; // What to sort. 
    if(editedCell.getColumn() == columnToSortBy){   
        var range = sheet.getRange(tableRange);
        range.sort( { column : columnToSortBy, ascending: true } );
        onEdit2(event);    // Execute the function, passing it whatever event was passed to onEdit
    }
  } // End definition of onEdit

function onEdit2(passedEvent) {     // Do the actual function definition out here
    var ss = SpreadsheetApp.getActiveSpreadsheet();
    var s = passedEvent.source.getActiveSheet();
    var r = passedEvent.source.getActiveRange();
    if(s.getName() == "Orders" && r.getColumn() == 10 && r.getValue() == "5. Archive") {
        var row = r.getRow();
        var numColumns = s.getLastColumn();
        var targetSheet = ss.getSheetByName("Archive");
        var target = targetSheet.getRange(targetSheet.getLastRow() + 1, 1);
        s.getRange(row, 1, 1, numColumns).moveTo(target);
        s.deleteRow(row);
    }
}