Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/google-sheets/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google apps script 类似的OnEdit和OnEdit2脚本不能一起工作_Google Apps Script_Google Sheets - Fatal编程技术网

Google apps script 类似的OnEdit和OnEdit2脚本不能一起工作

Google apps script 类似的OnEdit和OnEdit2脚本不能一起工作,google-apps-script,google-sheets,Google Apps Script,Google Sheets,我在GoogleSheets中使用GoogleScripts函数,根据某些条件将行从一张工作表复制到另一张工作表。本质上,我希望将“请求”移动到存档或确认池中。从确认池中,我希望在完成后将它们移动到归档中 我尝试了几种方法来移动代码,包括将代码分离成不同的脚本,并将其保存在同一个脚本中。部分代码同时工作——例如,我通常可以将请求移动到确认池或归档中。起初,我认为问题在于我在不同的表单中使用了相同的列。我改变了,但没有修正密码。然后,我发现多个“onEdit”脚本不能在同一个工作表中运行,所以我将

我在GoogleSheets中使用GoogleScripts函数,根据某些条件将行从一张工作表复制到另一张工作表。本质上,我希望将“请求”移动到存档或确认池中。从确认池中,我希望在完成后将它们移动到归档中

我尝试了几种方法来移动代码,包括将代码分离成不同的脚本,并将其保存在同一个脚本中。部分代码同时工作——例如,我通常可以将请求移动到确认池或归档中。起初,我认为问题在于我在不同的表单中使用了相同的列。我改变了,但没有修正密码。然后,我发现多个“onEdit”脚本不能在同一个工作表中运行,所以我将其中一个脚本的名称更改为onEdit2,然后更改为“myBookingRequests”。这种更改也不起作用

当我尝试将任何内容从确认池移动到归档文件中时,代码往往会中断,因此我认为现在的问题是,我正在将行移动到工作表中,并从工作表中获取行。任何关于如何解决此问题或从代码中删除冲突的帮助都会有所帮助。多谢各位

两个脚本分开:

  • }

  • 组合脚本很简单,因为我只需要在同一标题下添加两个额外的if子句

    我没有收到任何实际的错误消息,所以我假设代码的某些部分与其他部分存在负面交互。任何关于防止代码冲突的帮助都将是巨大的。谢谢

    (另外,我非常缺乏经验。我只在需要为工作制作功能性电子表格时才这样做。)

    分离出问题区域后的执行日志(预订请求->确认预订):


    此代码是单个OneEdit(e)

    该代码按照OP的建议工作,包括许多
    Logger
    语句,使OP能够在各个阶段对值进行故障排除,并确定任何错误的原因




    将执行记录包含在问题中,可通过转到
    查看>执行记录
    找到。在这里,您可以看到脚本正在执行的操作以及可能丢失的任何错误消息。创建一个脚本,并将其配置为可安装的触发器。请澄清,同时运行两个版本的onEdit会带来麻烦。一个更好的解决方案是以某种方式组合它们,并创建一个可安装的onEdit触发器。结合你的代码好;以简单的onEdit(事件)触发器的形式运行代码。您注意到执行记录中没有错误,所以我认为代码中没有问题。我想知道你是否在做一些你在问题中没有描述的事情。例如,您说过,当我试图将任何内容从已确认的池移动到存档中时,代码往往会中断,这是什么意思;你所说的“休息”是什么意思;你所说的“移动”是什么意思。顺便说一句,请分享你的电子表格(或者至少是它的非机密版本)。@Tedinoz知道代码对其他人正常运行会有所帮助。我所说的“中断”,是指它在以前正常工作的地方停止工作。我所说的“移动”是指copyTo函数和deleteRow函数,它们本质上是将一行移动到另一个工作表。我意识到,如果我删除了“确认”表并再次添加它,代码将暂时再次工作。我将试着把它完全放在另一个工作表中,看看是否有一些小故障。如果这不起作用,我将在我的个人帐户上创建一个电子表格版本并与他人共享。非常感谢。
        function onEdit(event) {
        var ss = SpreadsheetApp.getActiveSpreadsheet();
        var s = event.source.getActiveSheet();
        var r = event.source.getActiveRange();
    
           if(s.getName() == "Booking Requests" && r.getColumn() == 12 && r.getValue() == "Y") {
            var row = r.getRow();
            var numColumns = s.getLastColumn();
            var targetSheet = ss.getSheetByName("Confirmed Bookings");
            var target = targetSheet.getRange(targetSheet.getLastRow() + 1, 1);
            s.getRange(row, 1, 1, numColumns).copyTo(target);
            s.deleteRow(row); }
    
          if(s.getName() == "Booking Requests" && r.getColumn() == 13 && r.getValue() == "Y") {
           var row = r.getRow();
           var numColumns = s.getLastColumn();
           var targetSheet = ss.getSheetByName("Archived Bookings");
           var target = targetSheet.getRange(targetSheet.getLastRow() + 1, 1);
           s.getRange(row, 1, 1, numColumns).copyTo(target);
           s.deleteRow(row); }
        }
    
    function onEdit2(event) {
     var ss = SpreadsheetApp.getActiveSpreadsheet();
     var s = event.source.getActiveSheet();
     var r = event.source.getActiveRange(); 
    
     if(s.getName() == "Confirmed Bookings" && r.getColumn() == 14 && r.getValue() == "Y") {
      var row = r.getRow();
      var numColumns = s.getLastColumn();
      var targetSheet = ss.getSheetByName("Archived Bookings");
      var target = targetSheet.getRange(targetSheet.getLastRow() + 1, 1);
      s.getRange(row, 1, 1, numColumns).copyTo(target);
      s.deleteRow(row); }
    
    if(s.getName() == "Confirmed Bookings" && r.getColumn() == 15 && r.getValue() == "Y") {
     var row = r.getRow();
     var numColumns = s.getLastColumn();
     var targetSheet = ss.getSheetByName("Archived Bookings");
     var target = targetSheet.getRange(targetSheet.getLastRow() + 1, 1);
     s.getRange(row, 1, 1, numColumns).copyTo(target);
     s.deleteRow(row); }
    
     [19-07-03 14:20:54:610 CDT] Starting execution
     [19-07-03 14:20:54:617 CDT] SpreadsheetApp.getActiveSpreadsheet() [0 seconds]
     [19-07-03 14:20:54:618 CDT] SpreadsheetApp.getActive() [0 seconds]
     [19-07-03 14:20:54:619 CDT] Spreadsheet.getActiveSheet() [0 seconds]
     [19-07-03 14:20:54:620 CDT] SpreadsheetApp.getActive() [0 seconds]
     [19-07-03 14:20:54:620 CDT] Spreadsheet.getActiveRange() [0 seconds]
     [19-07-03 14:20:54:693 CDT] Sheet.getName() [0.072 seconds]
     [19-07-03 14:20:54:694 CDT] Range.getColumn() [0 seconds]
     [19-07-03 14:20:54:788 CDT] Range.getValue() [0.093 seconds]
     [19-07-03 14:20:54:788 CDT] Range.getRow() [0 seconds]
     [19-07-03 14:20:54:875 CDT] Sheet.getLastColumn() [0.086 seconds]
     [19-07-03 14:20:54:876 CDT] Spreadsheet.getSheetByName([Confirmed Requests]) [0.001 seconds]
     [19-07-03 14:20:54:975 CDT] Sheet.getLastRow() [0.098 seconds]
     [19-07-03 14:20:54:976 CDT] Sheet.getRange([995, 1]) [0 seconds]
     [19-07-03 14:20:54:977 CDT] Sheet.getRange([4, 1, 1, 12]) [0 seconds]
     [19-07-03 14:20:54:977 CDT] Range.copyTo([Range]) [0 seconds]
     [19-07-03 14:20:55:084 CDT] Sheet.deleteRow([4]) [0.106 seconds]
     [19-07-03 14:20:55:094 CDT] Execution failed: The coordinates of the target range are outside the dimensions of the sheet. (line 12, file "Code") [0.47 seconds total runtime]
    
    function onEdit(event) {
      var ss = SpreadsheetApp.getActiveSpreadsheet();
      var s = event.source.getActiveSheet();
      var r = event.source.getActiveRange();
      var eVal = event.value;
      var eSheet = event.source.getActiveSheet().getName();
      var ecolumnStart = event.range.columnStart;
      var erowStart = event.range.rowStart;
      var erowEnd = event.range.rowEnd;
      var ecolumnEnd = event.range.columnEnd;
      Logger.log("DEBUG: the spreadsheet is "+event.source.getName()+", the sheet = "+eSheet);
      Logger.log("DEBUG: Range details - Column Start:"+ecolumnStart+", Column End:"+ecolumnEnd+", Row start:"+erowStart+", and Row End:"+erowEnd);
      Logger.log("DEBUG: The Range = "+event.range.getA1Notation()+", and the value = "+eVal);
     //Logger.log(JSON.stringify(event))
    
      // STEP#1
      // Sheet=Booking Requests
      // AND
      // column = L (12)
      // AND
      // value = "Y"
    
      if(s.getName() == "Booking Requests" && r.getColumn() == 12 && r.getValue() == "Y") {
    
        Logger.log("DEBUG: step 1 - if worked");
    
        var row = r.getRow();
        var numColumns = s.getLastColumn();
        Logger.log("DEBUG: row = "+row+", number of columns = "+numColumns);
    
        var targetSheet = ss.getSheetByName("Confirmed Bookings");
        var target = targetSheet.getRange(targetSheet.getLastRow() + 1, 1);
        Logger.log("DEBUG: target range = "+target.getA1Notation());
    
        s.getRange(row, 1, 1, numColumns).copyTo(target);
        s.deleteRow(row); 
      }
      else{
        Logger.log("DEBUG: step 1 - if failed");
      }
    
      // STEP#2
      // Sheet=Booking Requests
      // AND 
      // Column = 13 (M)
      // AND
      // VALUE = "Y"
    
      if(s.getName() == "Booking Requests" && r.getColumn() == 13 && r.getValue() == "Y") {
    
        Logger.log("DEBUG: step 2 - if worked");
    
        var row = r.getRow();
        var numColumns = s.getLastColumn();
        Logger.log("DEBUG: row = "+row+", number of columns = "+numColumns);
    
        var targetSheet = ss.getSheetByName("Archived Bookings");
        var target = targetSheet.getRange(targetSheet.getLastRow() + 1, 1);
        Logger.log("DEBUG: target range = "+target.getA1Notation());
    
        s.getRange(row, 1, 1, numColumns).copyTo(target);
        s.deleteRow(row); 
      }
      else
      {
        Logger.log("DEBUG: step 2 - if failed");
      }
    
      // STEP#3
      // Sheet=Confirmed Bookings
      // AND
      // column = N (14)
      // AND
      // value = "Y"
      if(s.getName() == "Confirmed Bookings" && r.getColumn() == 14 && r.getValue() == "Y") {
    
        Logger.log("DEBUG: step 3 - if worked");
    
        var row = r.getRow();
        var numColumns = s.getLastColumn();
        Logger.log("DEBUG: row = "+row+", number of columns = "+numColumns);
    
        var targetSheet = ss.getSheetByName("Archived Bookings");
        var target = targetSheet.getRange(targetSheet.getLastRow() + 1, 1);
    
        s.getRange(row, 1, 1, numColumns).copyTo(target);
        s.deleteRow(row); 
      }
      else
      {
        Logger.log("DEBUG: step 3 - if failed");
      }
    
      // STEP#4
      // Sheet=Confirmed Bookings
      // AND
      // column = O (15)
      // AND
      // value = "Y"
    
    
      if(s.getName() == "Confirmed Bookings" && r.getColumn() == 15 && r.getValue() == "Y") {
    
        Logger.log("DEBUG: step 4 - if worked");
    
        var row = r.getRow();
        var numColumns = s.getLastColumn();
        Logger.log("DEBUG: row = "+row+", number of columns = "+numColumns);    
    
        var targetSheet = ss.getSheetByName("Archived Bookings");
        var target = targetSheet.getRange(targetSheet.getLastRow() + 1, 1);
    
        s.getRange(row, 1, 1, numColumns).copyTo(target);
        s.deleteRow(row); 
      }
       else
      {
        Logger.log("DEBUG: step 4 - if failed");
      }
    }