保护列 F 为时间戳的行

Protecting a row in which column F is a to timestamp

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

第二行有错误:

TypeError: Cannot read property 'range' of undefined

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();
  }
}

我相信你的目标如下。

  • 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 Spreadsheet 和 please install the OnEdit trigger as the installable trigger 的脚本编辑器中。当您要运行此脚本时,请编辑sheetTheNameOfTheSheetYouWantThisToWorkIn的“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这样的错误。所以,请注意这一点。当您使用此脚本时,请编辑 sheet TheNameOfTheSheetYouWantThisToWorkIn.
  • 的“F”列单元格
  • 当行受到保护时,只有所有者可以编辑该行。其他用户无法编辑该行。

参考文献: