【问题标题】:Protecting a row in which column F is a to timestamp保护列 F 为时间戳的行
【发布时间】:2021-04-29 22:30:37
【问题描述】:

在 Google 表格中输入或输入数据后如何锁定或保护一行。 F列是一个“时间戳”,它一直是空白的。当 F 不是空白时,我需要保护行

第二行有错误:

TypeError: 无法读取未定义的属性“范围”

function onEdit() {
  var sh = e.range.getSheet();
  if (sh.getName() != 'TheNameOfTheSheetYouWantThisToWorkIn') return;//change to whatever sheet your using
  if (e.range.columnStart == 6 && !e.range.isBlank()) {
    sh.getRange(e.range.rowStart, 1, 1, sh.getLastColumn()).protect();
  }
}

【问题讨论】:

    标签: javascript google-apps-script google-sheets triggers


    【解决方案1】:

    我相信你的目标如下。

    • 来自How to lock or protect a row after data entry or input in Google sheet. Column F is a "Timestamp" and it is a blank all time.,我猜您想在将值输入到“F”列的单元格时运行脚本。
    • 您想保护“F”列中包含已编辑单元格的行。

    修改点:

    • 关于"TypeError: Cannot read property 'range' of undefined的错误,在这种情况下,你的脚本没有声明e。我认为这是您的问题的原因。
    • 在这种情况下,要以所有者身份运行脚本,请使用可安装的 OnEdit 触发器。为此,需要将函数名称从onEdit 重命名为其他名称。因为,当函数onEdit 安装为可安装的OnEdit 触发器时,在编辑单元格时,脚本会运行2 次。

    当这反映到你的脚本中时,它变成如下。

    修改脚本:

    请将以下脚本复制并粘贴到 Google 电子表格的脚本编辑器和 please install the OnEdit trigger as the installable trigger。当您要运行此脚本时,请编辑工作表TheNameOfTheSheetYouWantThisToWorkIn 的“F”列的单元格。这样,OnEdit 触发器就会运行,脚本也会运行。

    function installedOnEdit(e) {
      var sh = e.range.getSheet();
      if (sh.getName() != 'TheNameOfTheSheetYouWantThisToWorkIn') return;
      if (e.range.columnStart == 6 && !e.range.isBlank()) {
        var protect = sh.getRange(e.range.rowStart, 1, 1, sh.getLastColumn()).protect();
        protect.addEditor(Session.getEffectiveUser()).removeEditors(protect.getEditors());
        if (protect.canDomainEdit()) {
          protect.setDomainEdit(false);
        }
      }
    }
    

    注意:

    • 如果直接在脚本编辑器运行installedOnEdit的函数,会出现Cannot read property 'range' of undefined这样的错误。所以,请注意这一点。使用此脚本时,请编辑工作表TheNameOfTheSheetYouWantThisToWorkIn的“F”列单元格。
    • 当行受到保护时,只有所有者才能编辑该行。其他用户无法编辑该行。

    参考资料:

    【讨论】:

    • 感谢您回答我的问题!目前,我无法正确设置 onEdit 触发器,如果​​您能帮助解决这个问题,我将不胜感激。我是新手,在此先感谢!我去了正在安装的触发器的链接,但我不知道在哪里以及如何编写它。
    • @Emil 感谢您的回复。我不得不为我糟糕的英语水平道歉。不幸的是,从At the moment, I can not correctly set the onEdit triggerbut I didn't know where and how to write it.,我无法理解您当前的问题。我再次为我糟糕的英语水平深表歉意。为了正确理解您当前的问题,您能否提供复制问题的详细流程?通过这个,我想尝试理解它。当你能合作解决你的问题时,我很高兴。
    • 谢谢您,在您发表评论后,我考虑了一下,一切都做对了。错误在我身上。我还有一个问题,在这个脚本中,当编辑“F”列时,一行被阻塞,但是如果条件更改为“A”列并且整行被阻塞,脚本会是什么样子?再次感谢!
    • 即我想将“F”列改为“​​A”列
    • @Emil 感谢您的回复。我很高兴你的问题得到了解决。关于您的新问题,那么将e.range.columnStart == 6 修改为e.range.columnStart == 1 怎么样?这样,当编辑“A”列的单元格时,脚本就会运行。如果您的问题得到解决,请按接受按钮。与您有相同问题的其他人也可以将您的问题作为可以解决的问题。我认为您的问题和解决方案将对他们有用。如果找不到按钮,请随时告诉我。 stackoverflow.com/help/accepted-answer
    猜你喜欢
    • 1970-01-01
    • 2020-01-30
    • 2012-05-19
    • 2011-01-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多