use*_*634 0 google-sheets google-apps-script
我的谷歌文档在打开谷歌表格文件时应该提示一个登录框,并且根据密码,它应该显示一个特定的选项卡。例如,对于“password1”,它应该允许用户仅看到选项卡“Sheet1”,而其他工作表应该被隐藏。同样,对于“password2”,它应该允许用户仅查看和处理选项卡“Sheet2”。
我尝试运行以下代码,但它显示一些错误。
function showLoginDialog() {
var sheet3 = SpreadsheetApp.getActiveSheet('Sheet3');
sheet3.hideSheet();
var sheet2 = SpreadsheetApp.getActiveSheet('Sheet2');
sheet2.hideSheet();
var sh = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet('Sheet1');
var ui = SpreadsheetApp.getUi();
var prompt = ui.prompt('Password','Enter Password',ui.ButtonSet.OK_CANCEL);
var response = prompt.getResponseText();
var button = prompt.getSelectedButton();
if(button==ui.Button.OK) {
if(response=='pwd3') {
sheet3.activate();
}//end of inner if
if(response=='pwd2'){
sheet2.activate();
}
}//end of main if
}//end of function
Run Code Online (Sandbox Code Playgroud)
Google 表格文件在打开时应要求输入密码,并且应根据密码显示相应的工作表。
pwd2输入 的值时,您只想打开“Sheet2”。如果我的理解是正确的,那么这个修改怎么样?请将此视为多个答案之一。
修改后的脚本流程如下。
pwd2输入 时,仅打开“Sheet2”。pwd3输入 时,仅打开“Sheet3”。如果您想在电子表格打开时打开对话框,请安装 OnOpen 事件触发器RunOnOpen()。
RunOnOpen为“选择要运行的功能”。function RunOnOpen() {
// Updated
var openSheet = function(ss, sheets, sheet) {
var s = ss.getSheetByName(sheet);
s.showSheet();
ss.setActiveSheet(s);
for (var i = 0; i < sheets.length; i++) {
if (sheets[i].getSheetName() != sheet) {
sheets[i].hideSheet();
}
}
};
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheets = ss.getSheets();
openSheet(ss, sheets, "Sheet1"); // Open only "Sheet1" when this function is run.
var ui = SpreadsheetApp.getUi();
var prompt = ui.prompt('Password','Enter Password',ui.ButtonSet.OK_CANCEL);
var response = prompt.getResponseText();
var button = prompt.getSelectedButton();
if (button == ui.Button.OK) {
var sheet = "";
if(response == 'pwd3') {
openSheet(ss, sheets, "Sheet3");
} else if(response == 'pwd2') {
openSheet(ss, sheets, "Sheet2");
}
}
}
Run Code Online (Sandbox Code Playgroud)
RunOnOpen()在脚本编辑器中手动运行时,脚本将起作用。为了做到这一点,我没有使用 OnOpen 事件触发器的事件对象。如果我误解了你的问题并且这不是你想要的结果,我深表歉意。
当我对该脚本进行多次测试时,存在打开“Sheet1”工作表和另一工作表的情况。为了避免这种情况,我更新了脚本。您能再次确认一下上面的脚本吗?
如果我对您目标的理解是正确的,那么这个解决方法怎么样?
此解决方法的流程如下。
通过这个流程,我认为前 3 个目标可以实现。
用户访问Web Apps的URL。
Google Apps 脚本:Code.gsfunction doGet() {
return HtmlService.createHtmlOutputFromFile("index");
}
function selectSpreadsheet(value) {
var url = "";
if (value == "pwd2") {
url = "### URL of Spreadsheet for password of pwd2 ###";
} else if (value == "pwd3") {
url = "### URL of Spreadsheet for password of pwd3 ###";
}
return url;
}
Run Code Online (Sandbox Code Playgroud)
HTML 和 JavaScript:index.html
<input type="text" id="value" >
<input type="button" value="ok" onclick="openSpreadsheet()">
<script>
function openSpreadsheet() {
var value = document.getElementById("value").value;
google.script.run.withSuccessHandler((url) => {
if (url) window.open(url,'_top');
}).selectSpreadsheet(value);
}
</script>
Run Code Online (Sandbox Code Playgroud)
从TheMaster的评论来看,Although it's highly unlikely that users are able to retrieve the passwords from source code, I recommend using private functions and/or properties service for storing of passwords for a extra layer of security.
作为示例,您可以像下面一样使用,将密码和 URL 保存到 PropertiesService。
function selectSpreadsheet(value) {
return PropertiesService.getUserProperties().getProperty(value);
}
Run Code Online (Sandbox Code Playgroud)| 归档时间: |
|
| 查看次数: |
3320 次 |
| 最近记录: |