javascript - 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();
}
}
解决方案
在文档的打开事件中,您希望不断向用户询问密码,直到密码正确为止
您的代码已经朝着正确的方向发展,但需要进行以下修改:
- 通过可安装的触发器替换简单的触发器 。不会在简单触发器上运行。
onOpen
Browser.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();
}
}