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

标签 javascript google-apps-script

我正在尝试使用 google sheet 进行数据记录和验证。例如A在A1:C1输入数据,B在D1勾选checkbox时,会锁住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");

     }
   }
}

最佳答案

试试这个:

首先将复选框放在第 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");
     }
   }
}

关于javascript - 如何优化我的代码以确保它锁定每个单元格?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55963079/

相关文章:

google-apps-script - 无法获得授权

javascript - UpdateCellsRequest - 范围未按预期运行

google-apps-script - 列出 Google 应用程序脚本项目

javascript - 将值解析为 javascript 函数

javascript - 具有可变延迟的 jQuery 推子?

javascript - 在 Google 表格中使用 fontcolor() 在单元格中返回 HTML

javascript - 我试图在大范围的特定单元格中挑选出所有带有 '1' 的行,是否有更有效的方法来做到这一点?

javascript - 如何从 json 重建表?

javascript - 我无法在我的网站上向下滚动。不知道如何解决?

javascript - 使用链接在div内滚动div?