添加密码到 Google Sheet

Add a password to a Google Sheet

我是一个新手,熟悉与 Google Apps 脚本相关的所有内容,我正在尝试使用每次打开文档时都会显示的提示来实现密码,因此每个尝试访问该文档的人Google Sheets 必须输入密码,否则将无法编辑。它有点工作,问题是如果我(文档的所有者)没有自己解锁它,提示将不会显示给其他编辑。这是这样做的正确方法吗?

  function onOpen() {
  protectSheet();
  password();
}
 
function protectSheet() {
  var sheet = SpreadsheetApp.getActiveSheet();
 
  //Protect the sheet
  var protection = sheet.protect().setDescription("Only owner can edit");
 
  var me = Session.getEffectiveUser();
  protection.addEditor(me);
  protection.removeEditors(protection.getEditors());
  Logger.log(protection.getEditors());
  Logger.log(Session.getEffectiveUser());
 
  if (protection.canDomainEdit()) {
    protection.setDomainEdit(false);
  }
}
 
function unprotectSheet() {
  var sheet = SpreadsheetApp.getActiveSheet();
 
  //Unprotect sheet
  var unprotection = sheet.getProtections(SpreadsheetApp.ProtectionType.SHEET)[0];
  if (unprotection && unprotection.canEdit()) {
    unprotection.remove();
    Logger.log("Entró: "+unprotection.getEditors());
 
  }
}
 
function password() {
  var password = "123";
  var textoIngresado;
 
  do {
 
    var passwordPrompt = SpreadsheetApp.getUi().prompt("Protected document", "Type password", SpreadsheetApp.getUi().ButtonSet.OK_CANCEL);
 
    if (passwordPrompt.getSelectedButton() == SpreadsheetApp.getUi().Button.CANCEL) {
      protectSheet();
      console.log("CANCELLED, PROTECTED");
 
      break;
 
    } else if (passwordPrompt.getSelectedButton == SpreadsheetApp.getUi().Button.CLOSE) {
      protectSheet();
      console.log("CLOSED, PROTECTED");
      break;
    }
 
    textoIngresado = passwordPrompt.getResponseText();
 
  }
 
  while (textoIngresado != password);
 
  if (textoIngresado == password) {
    SpreadsheetApp.getActiveSheet().getRange("A7").setValue("Unlocked");
    unprotectSheet();
 
    console.log("UNLOCKED");
 
  }
}

代码使用的是 onOpen 简单触发器。看来您忽略了简单触发器的局限性(有关详细信息,请参阅 https://developers.google.com/apps-script/guides/triggers

不要使用简单的触发器,而是使用可安装的触发器(有关详细信息,请参阅 https://developers.google.com/apps-script/guides/triggers/installable

关于使用自定义密码,您似乎在尝试“发现热水”。与其创建自定义访问控制系统,不如使用 Google 驱动器共享系统:

  1. 更改共享设置,即从编辑器更改为查看器。
  2. 您可以使用 Google 组
  3. ,而不是使用单独的电子邮件来更改设置

相关