首页 > 解决方案 > Google Sheets Appscript 弹出提示响应并隐藏工作表,直到响应正确

问题描述

我正在寻找一个脚本来启动一个弹出窗口,提示用户在启动时输入代码,它会隐藏所有工作表,但只有一个,直到用户输入正确的代码,如果用户没有输入正确的代码,它将保留启动用户提示并隐藏所有工作表,几乎是为了密码保护而转身,这就是我到目前为止所拥有的:

function onOpen() {


function hideAllSheetsExcept('Sheet1') {
  var sheets=SpreadsheetApp.getActiveSpreadsheet().getSheets();

  for(var i =0;i<sheets.length;i++){
    Logger.log(i);
    if(sheets[i].getName()!=sheetName){
      sheets[i].hideSheet();
    }
  }
var quest = Browser.inputBox("Enter the requested value");
if quest == '12345' then
  sheets[i].showSheet();
}
}

标签: javascriptgoogle-apps-scriptgoogle-sheets

解决方案


在文档的打开事件中,您希望不断向用户询问密码,直到密码正确为止

您的代码已经朝着正确的方向发展,但需要进行以下修改:

  • 通过可安装的触发器替换简单的触发器不会在简单触发器上运行。onOpenBrowser.inputBox
  • if将检查密码是否正确的语句替换为一个while循环,只要密码不正确,该循环就会一直询问密码。
  • 要显示所有工作表,您需要以与隐藏它们时相同的方式循环。
  • 您的函数hideAllSheetsExcept不应嵌套在 中onOpen,而只能从那里调用。

openSheets请参阅以下示例,了解如何在绑定到称为可安装onOpen触发器的函数时实现所需的功能:

function openSheets(){   
  hideAllSheetsExcept('Sheet1')
}

function hideAllSheetsExcept(sheetName) {
  var sheets=SpreadsheetApp.getActiveSpreadsheet().getSheets();
  for(var i =0;i<sheets.length;i++){
    Logger.log(i);
    if(sheets[i].getName()!=sheetName){
      sheets[i].hideSheet();
    }
  }
  var quest="";
  while (quest!='12345'){
    quest = Browser.inputBox("Enter the requested value");
  }
  for(var i =0;i<sheets.length;i++){
    sheets[i].showSheet();   
  }
}

推荐阅读