如何优化我的代码以确保它锁定每个单元?

时间:2019-05-03 03:54:36

标签: javascript google-apps-script

我正在尝试使用Google表格进行数据记录和验证。例如,人员A在A1:C1中输入数据,然后当人员B在D1处勾选复选框时,它将锁定A1:C1以防止人员A再次编辑。每行都会重复此过程。

我设法使代码正常工作。但是,似乎有时候当人B快速勾选复选框时,代码可能会忽略一两行,并且不会锁定每一行。例如,当人B勾选D1,D2和D3时,系统仅锁定1和3行。

如何优化代码,使其始终锁定每一行而不会丢失一两个?

function onEdit(e){

  var row = e.range.getRow();
  var col = e.range.getColumn();
  var range = sheet.getRange(row, 1, 1,3)
  var protectSs = range.protect().setDescription('Protect row ' + row);  
  var a = sheet.getRange(row,4,1,1).getValues();

  if (col == 4){ 
    if (a == "true") {

      var me = Session.getEffectiveUser();
      protectSs.addEditor("guest1@gmail.com");
      protectSs.removeEditor("guest1@gmail.com");
      Logger.log(me);
     }

     else if (a == "false") {

      protectSs.addEditor("guest1@gmail.com");
      protectSs.removeEditor("guest1@gmail.com");

     }
   }
}

1 个答案:

答案 0 :(得分:0)

尝试一下:

首先在第4列中放置复选框,从而删除该范围内的任何其他可能的条目。然后尝试此脚本。

function onEdit(e){
  var rg=sheet.getRange(e.range.rowStart,1, 1,3)
  var protectSs=range.protect().setDescription('Protect row ' + e.range.rowStart);  
  if (e.range.columnStart==4){ 
    if (e.value=="TRUE") {
      protectSs.addEditor("guest1@gmail.com");
      protectSs.removeEditor("guest1@gmail.com");
     }
     else {
      protectSs.addEditor("guest1@gmail.com");
      protectSs.removeEditor("guest1@gmail.com");
     }
   }
}