我正在寻找一个脚本来启动一个弹出窗口,提示用户在启动时输入代码,它将隐藏所有工作表,但直到用户输入正确的代码,如果用户没有输入正确的代码,它将继续启动用户提示并保持所有工作表隐藏, 几乎是密码保护的转机,这就是我到目前为止所拥有的:
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();
}
}