javascript - 第二次运行脚本以在工作表中移动一行会在删除第一行后更改第二个活动单元格的位置。可预防?
问题描述
我有一个简单的脚本,当数据输入到第一列的单元格中时,它会将一行从一个工作表移动到另一个工作表。移动后,该行将被删除。它工作正常,直到您在脚本从第一行完成之前将数据输入到第二行。因为第一行被删除,所以当脚本第二次运行时,活动单元格会发生变化。不是第 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());
}
}
解决方案
推荐阅读
- java - 使用 JWT 实现身份验证端点
- android - FireStoreRecyclerAdapter 只在它之前出现的东西之后显示结果?
- sharepoint-2010 - Sharepoint IF 公式返回值 NO
- c# - Rust 中 fn 参数的协方差使用什么?
- r - 只有在 MICE 中满足某些条件时,我如何估算缺失值?
- python - QT QWidget启动中的信号和事件处理后如何运行代码?
- c# - 为什么 Kendo 的 ToDataSourceResult 会为一个查询创建两个 ADO.Net 调用
- c# - ASP.NET DropDownList SelectedIndexChanged 如何检测新值
- php - 每次我删除我的连接数据库时,我的 css 开始出现问题
- c++ - 如何添加依赖于类本身的模板成员变量