输入错误后锁定谷歌表格以进行数据输入

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

我有一张谷歌表格,其中有许多合作者正在进行数据输入。我希望如果输入错误,那么该工作表将自动锁定。我在谷歌应用程序脚本中编写了以下代码,但它没有发生。

注意: - 应用程序脚本中有一个触发器,电子表格中的每次编辑都会调用功能重复

function protection() {
  let ui = SpreadsheetApp.getUi();
  let pin = "0000";
  let attempt = "";

  while (attempt != pin) {
    attempt = ui.prompt("Enter pin to unlock the sheet").getResponseText()
  }
    ui.alert("Sheet unlocked")
}


function duplicate() {
let sheet = SpreadsheetApp.getActive().getSheetByName("Master");
let range = sheet.getRange("E:E");
let value = range.getValues();
let lastRow = sheet.getLastRow();

for (let i=0;i < lastRow;i++)  {
  if (value[i][0] === "FALSE") {
    protection()
  }
}  
}

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

几点见解:

  • 您的代码行末尾缺少几个分号 (
    ;
    )。有时它们会在解析时自动“添加”,但您不应该依赖于此,而应该始终使用它们。
  • 我建议您使用列号表示法而不是A1表示法;也就是说,写
    getRange(1, 5, sheet.getLastRow())
    而不是
    getRange("E:E")
  • 您不需要循环遍历行;使用 Array.some() 方法应该更快 (Array.some()):

if (value.some(cell => cell[0] == false)) {protection();}
.

  • 重要的部分来了:E 列中有什么类型的数据?如果您、脚本或其他人在这些单元格中输入“TRUE”或“FALSE”,您的代码应该可以工作。但是,如果单元格应该包含布尔值,则会出现问题:
    "FALSE"
    false
    不同。
  • 即使您的代码正常工作,您的
    protection()
    功能也无法有效保护工作表。提示消息确实会不断弹出,直到输入正确的 PIN 码为止,但上一个提示关闭与下一个提示之间经过的非零时间为用户留下了一些时间来编辑工作表。我建议研究
    Sheet.protect()
    方法和 Protection 类
© www.soinside.com 2019 - 2024. All rights reserved.