选中(或未选中)时在工作表之间来回移动行

问题描述 投票:0回答:1

我对 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,并且还删除了与其关联的触发器。

google-sheets google-apps-script triggers
1个回答
0
投票

考虑到问题中的代码,您应该训练电子表格用户在其他用户做同样的事情时不要选中/取消选中复选框。此外,在选中/取消选中一个复选框后,用户应该等到执行结束后再选中/取消选中另一个复选框。

换句话说,您应该培训用户避免同时运行多个执行。

如果您是唯一的用户,这可能不是什么大问题,但如果您与其他人共享电子表格,您可能必须选择另一个可供多个用户同时使用的源,并为此采取适当的保护措施。

© www.soinside.com 2019 - 2024. All rights reserved.