- 您只想通过对话框中输入的值打开电子表格中的所有工作表之一。
- 例如,当输入
pwd2 的值时,您只想打开“Sheet2”。
- 您希望在打开电子表格时打开对话框。
如果我的理解是正确的,那么这个修改呢?请认为这只是几个答案之一。
修改后的脚本流程如下。
- 在打开电子表格时,默认只打开“Sheet1”。
- 打开一个对话框。
- 输入
pwd2时,只打开“Sheet2”。
- 输入
pwd3时,只打开“Sheet3”。
如果您想在电子表格打开时打开对话框,请将 OnOpen 事件触发器安装到RunOnOpen()。
如何安装 OnOpen 触发器:
- 打开脚本编辑器。
- 编辑 -> 当前项目的触发器。
- 点击“添加触发器”。
- 将
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");
}
}
}
注意:
- 在这个修改后的脚本中,当
RunOnOpen() 在脚本编辑器中手动运行时,脚本可以工作。为了做到这一点,我没有使用 OnOpen 事件触发器的事件对象。
参考资料:
如果我误解了您的问题并且这不是您想要的结果,我深表歉意。
更新:
当我对该脚本进行了多次测试时,出现“Sheet1”工作表和另一个工作表打开的情况。为了避免这种情况,我更新了脚本。能否请您再次确认一下上面的脚本?
编辑:
- 您希望通过输入每个密码让用户使用电子表格的特定工作表。
- 您不想为用户发布脚本。
- 您想让多个用户同时使用电子表格。
如果我对您的目标的理解是正确的,那么这个解决方法怎么样?
- 为每个用户创建每个电子表格。
- 使用 Web 应用程序通过输入密码打开每个电子表格。
此变通方法的流程如下。
- 登录 Google 的用户打开 Web 应用程序。
- 用户输入密码,点击“确定”。
- 在服务器端检查密码,返回密码对应的Spreadsheet URL。
- 从 URL 打开电子表格。
通过这个流程,我认为可以实现前 3 个目标。
示例脚本:
- 在您使用此脚本之前,请为每个工作表拆分电子表格,并检索电子表格的每个 URL。
- 当您使用它时,请部署具有以下条件的 Web 应用程序。如果您想知道如何部署 Web Apps,请查看this。
- 以以下身份执行应用:我。
- 有权访问应用的人:任何人
- 在此条件下,用户需要登录 Google 才能访问 Web Apps。
用户访问 Web 应用的 URL。
Google Apps 脚本:Code.gs
function 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;
}
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>
注意:
参考资料: