我对 Apps 脚本和一般编码非常陌生。
这是源自在选中时消失的行的后续问题。
我在网上找到了这段代码,用于在工作表之间移动行,无论是否选中列中的复选框。我只是更改了一些内容,例如工作表的名称及其所查看的列。
有问题。现在它似乎正在将行移到另一张纸上,但是当我取消选中该框将其移回原处时,它有时会消失。否则它会向后移动并删除另一行。
此外,3 号线和 4 号线不再使用。它说“mainSheet 的未使用声明”和“sheetToMoveTheRow”的声明相同,我对此有点困惑,因为当函数的名称为
onEdit
时,它没有给我错误,但我将函数名称更改为moveChecked
从那时起它就给了我这个问题。
function moveChecked() {
var mainSheet = "To Do";
var sheetToMoveTheRow = "Completed";
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = SpreadsheetApp.getActiveSheet();
var range = SpreadsheetApp.getActiveRange();
if(sheet.getName() == "To Do" && range.getColumn() == 1 && range.getValue() == true) {
var row = range.getRow();
var numColumns = sheet.getLastColumn();
var targetSheet = ss.getSheetByName("Completed");
var target = targetSheet.getRange(targetSheet.getLastRow() + 1, 1);
sheet.getRange(row, 1, 1, numColumns).moveTo(target);
sheet.deleteRow(row);}
else if(sheet.getName() == "Completed" && range.getColumn() == 1 && range.getValue() == false) {
var row = range.getRow();
var numColumns = sheet.getLastColumn();
var targetSheet = ss.getSheetByName("To Do");
const aVals = targetSheet.getRange(1,1,targetSheet.getLastRow(),1).getValues();
const targetRow = aVals.filter(String).length + 1;
var target = targetSheet.getRange(targetRow , 1);
sheet.getRange(row, 1, 1, numColumns).moveTo(target);
sheet.deleteRow(row);}
}
我之前将函数名称从 onEdit 更改为 moveChecked,并且还删除了与其关联的触发器。
考虑到问题中的代码,您应该训练电子表格用户在其他用户做同样的事情时不要选中/取消选中复选框。此外,在选中/取消选中一个复选框后,用户应该等到执行结束后再选中/取消选中另一个复选框。
换句话说,您应该培训用户避免同时运行多个执行。
如果您是唯一的用户,这可能不是什么大问题,但如果您与其他人共享电子表格,您可能必须选择另一个可供多个用户同时使用的源,并为此采取适当的保护措施。