添加密码到 Google Sheet
Add a password to a Google Sheet
我是一个新手,熟悉与 Google Apps 脚本相关的所有内容,我正在尝试使用每次打开文档时都会显示的提示来实现密码,因此每个尝试访问该文档的人Google Sheets 必须输入密码,否则将无法编辑。它有点工作,问题是如果我(文档的所有者)没有自己解锁它,提示将不会显示给其他编辑。这是这样做的正确方法吗?
function onOpen() {
protectSheet();
password();
}
function protectSheet() {
var sheet = SpreadsheetApp.getActiveSheet();
//Protect the sheet
var protection = sheet.protect().setDescription("Only owner can edit");
var me = Session.getEffectiveUser();
protection.addEditor(me);
protection.removeEditors(protection.getEditors());
Logger.log(protection.getEditors());
Logger.log(Session.getEffectiveUser());
if (protection.canDomainEdit()) {
protection.setDomainEdit(false);
}
}
function unprotectSheet() {
var sheet = SpreadsheetApp.getActiveSheet();
//Unprotect sheet
var unprotection = sheet.getProtections(SpreadsheetApp.ProtectionType.SHEET)[0];
if (unprotection && unprotection.canEdit()) {
unprotection.remove();
Logger.log("Entró: "+unprotection.getEditors());
}
}
function password() {
var password = "123";
var textoIngresado;
do {
var passwordPrompt = SpreadsheetApp.getUi().prompt("Protected document", "Type password", SpreadsheetApp.getUi().ButtonSet.OK_CANCEL);
if (passwordPrompt.getSelectedButton() == SpreadsheetApp.getUi().Button.CANCEL) {
protectSheet();
console.log("CANCELLED, PROTECTED");
break;
} else if (passwordPrompt.getSelectedButton == SpreadsheetApp.getUi().Button.CLOSE) {
protectSheet();
console.log("CLOSED, PROTECTED");
break;
}
textoIngresado = passwordPrompt.getResponseText();
}
while (textoIngresado != password);
if (textoIngresado == password) {
SpreadsheetApp.getActiveSheet().getRange("A7").setValue("Unlocked");
unprotectSheet();
console.log("UNLOCKED");
}
}
代码使用的是 onOpen 简单触发器。看来您忽略了简单触发器的局限性(有关详细信息,请参阅 https://developers.google.com/apps-script/guides/triggers)
不要使用简单的触发器,而是使用可安装的触发器(有关详细信息,请参阅 https://developers.google.com/apps-script/guides/triggers/installable)
关于使用自定义密码,您似乎在尝试“发现热水”。与其创建自定义访问控制系统,不如使用 Google 驱动器共享系统:
- 更改共享设置,即从编辑器更改为查看器。
- 您可以使用 Google 组
,而不是使用单独的电子邮件来更改设置
相关
我是一个新手,熟悉与 Google Apps 脚本相关的所有内容,我正在尝试使用每次打开文档时都会显示的提示来实现密码,因此每个尝试访问该文档的人Google Sheets 必须输入密码,否则将无法编辑。它有点工作,问题是如果我(文档的所有者)没有自己解锁它,提示将不会显示给其他编辑。这是这样做的正确方法吗?
function onOpen() {
protectSheet();
password();
}
function protectSheet() {
var sheet = SpreadsheetApp.getActiveSheet();
//Protect the sheet
var protection = sheet.protect().setDescription("Only owner can edit");
var me = Session.getEffectiveUser();
protection.addEditor(me);
protection.removeEditors(protection.getEditors());
Logger.log(protection.getEditors());
Logger.log(Session.getEffectiveUser());
if (protection.canDomainEdit()) {
protection.setDomainEdit(false);
}
}
function unprotectSheet() {
var sheet = SpreadsheetApp.getActiveSheet();
//Unprotect sheet
var unprotection = sheet.getProtections(SpreadsheetApp.ProtectionType.SHEET)[0];
if (unprotection && unprotection.canEdit()) {
unprotection.remove();
Logger.log("Entró: "+unprotection.getEditors());
}
}
function password() {
var password = "123";
var textoIngresado;
do {
var passwordPrompt = SpreadsheetApp.getUi().prompt("Protected document", "Type password", SpreadsheetApp.getUi().ButtonSet.OK_CANCEL);
if (passwordPrompt.getSelectedButton() == SpreadsheetApp.getUi().Button.CANCEL) {
protectSheet();
console.log("CANCELLED, PROTECTED");
break;
} else if (passwordPrompt.getSelectedButton == SpreadsheetApp.getUi().Button.CLOSE) {
protectSheet();
console.log("CLOSED, PROTECTED");
break;
}
textoIngresado = passwordPrompt.getResponseText();
}
while (textoIngresado != password);
if (textoIngresado == password) {
SpreadsheetApp.getActiveSheet().getRange("A7").setValue("Unlocked");
unprotectSheet();
console.log("UNLOCKED");
}
}
代码使用的是 onOpen 简单触发器。看来您忽略了简单触发器的局限性(有关详细信息,请参阅 https://developers.google.com/apps-script/guides/triggers)
不要使用简单的触发器,而是使用可安装的触发器(有关详细信息,请参阅 https://developers.google.com/apps-script/guides/triggers/installable)
关于使用自定义密码,您似乎在尝试“发现热水”。与其创建自定义访问控制系统,不如使用 Google 驱动器共享系统:
- 更改共享设置,即从编辑器更改为查看器。
- 您可以使用 Google 组 ,而不是使用单独的电子邮件来更改设置
相关