首页 > 解决方案 > 第二次运行脚本以在工作表中移动一行会在删除第一行后更改第二个活动单元格的位置。可预防?

问题描述

我有一个简单的脚本,当数据输入到第一列的单元格中时,它会将一行从一个工作表移动到另一个工作表。移动后,该行将被删除。它工作正常,直到您在脚本从第一行完成之前将数据输入到第二行。因为第一行被删除,所以当脚本第二次运行时,活动单元格会发生变化。不是第 2 行移动,而是第 3 行移动,因为它现在是新的第 2 行。我可以让它从活动范围中减去一行,但用户可以将数据输入第 5 行或第 6 行而不是第 2 行。是有没有办法将活动单元格的焦点保持在第二行,即使它上面的行被删除?

如果没有,是否有另一种更好的方法?

            function WeeklyCallMoveToScheduled(){

              var columnNumberToWatch = 1;

              var sheetToSkip1 = "Master";

              var sheetToSkip2 = "Dropdowns";

              var sheetToSkip3 = "Contacted";

              var sheetNameToMoveTheRowTo = "Scheduled";

              var sheetNameToMoveTheRowTo2 = "Contacted";

              var ss = SpreadsheetApp.getActiveSpreadsheet();

              var sheet = SpreadsheetApp.getActiveSheet();

              var range = sheet.getActiveCell();

              if (sheet.getName() != sheetToSkip1 && sheet.getName() != sheetToSkip2 && sheet.getName() != sheetToSkip3 && range.getColumn() == columnNumberToWatch && range.getValue().indexOf('Scheduled') > -1) {

                var targetSheet = ss.getSheetByName(sheetNameToMoveTheRowTo);

                var targetRange = targetSheet.getRange(targetSheet.getLastRow() + 1, 1);
                //add new row to target sheet
                targetSheet.insertRowAfter(targetSheet.getLastRow());

                SpreadsheetApp.getActiveSheet().getRange(range.getRow(),20).setValue(sheet.getName());
                SpreadsheetApp.getActiveSheet().getRange(range.getRow(),19).setValue(new Date());
                SpreadsheetApp.getActiveSheet().getRange(range.getRow(),1).setDataValidation(null);
                SpreadsheetApp.getActiveSheet().getRange(range.getRow(),1).setBackground("#d9ead3");
                sheet.getRange(range.getRow(), 1, 1, sheet.getLastColumn()).moveTo(targetRange);
                sheet.deleteRow(range.getRow());

                }
              else if (sheet.getName() != sheetToSkip1 && sheet.getName() != sheetToSkip2 && sheet.getName() != sheetToSkip3 && range.getColumn() == columnNumberToWatch && range.getValue().indexOf('Contacted') > -1) {

                var targetSheet2 = ss.getSheetByName(sheetNameToMoveTheRowTo2);

                var targetRange2 = targetSheet2.getRange(targetSheet2.getLastRow() + 1, 1);
                //add new row to target sheet
                targetSheet2.insertRowAfter(targetSheet2.getLastRow());
                SpreadsheetApp.getActiveSheet().getRange(range.getRow(),20).setValue(sheet.getName());
                SpreadsheetApp.getActiveSheet().getRange(range.getRow(),19).setValue(new Date());
                SpreadsheetApp.getActiveSheet().getRange(range.getRow(),1).setDataValidation(null);
                SpreadsheetApp.getActiveSheet().getRange(range.getRow(),1).setBackground("#fff2cc");
                sheet.getRange(range.getRow(), 1, 1, sheet.getLastColumn()).moveTo(targetRange2);
                sheet.deleteRow(range.getRow());
              }
            }

标签: javascriptgoogle-sheets

解决方案


推荐阅读