我怎样才能在脚本基础上保护 sheet(Google Apps 脚本)?
How can I get this to protect a sheet on scripting basis (Google Apps Script)?
我得到了这段代码运行没有错误;
由此产生的传播 sheet 确实在 sheet 名称旁边显示了一个储物柜;
受保护的工作表和范围仅显示特定范围不受保护,但打开文件的其他用户可以编辑受保护的范围:
var editors = newSpreadsheet.getEditors();
for (var i = 0; i < editors.length; i++) {
newSpreadsheet.removeEditor(editors[i]);
};
var sheetToProtect = newSpreadsheet.getSheetByName('CheckList');
var rngMonitorUnprotect = sheetToProtect.getRange("F11:F14");
var protection = sheetToProtect.protect();
protection.setUnprotectedRanges([rngMonitorUnprotect]);
我在这里错过了什么?
解释/问题:
根据 official documentation,这是对 sheet 应用保护的正确方法。
问题是您没有从 protection
对象中删除编辑者列表。相反,您所做的是将它们从 spreadsheet 文件本身中删除。
本质上,当您为sheet添加保护时,所有当前编辑者自动拥有编辑sheet(或sheet范围)的权限不管保护。所以你的脚本需要从右边删除它们,这就是我们执行这个的原因:
protection.removeEditors(protection.getEditors());
仅保护 sheet 的 F11:F14
范围:
function myFunction() {
// Protect range F11:F14, then remove all other users from the list of editors.
var sheetToProtect = SpreadsheetApp.getActive().getSheetByName('CheckList');
var range = sheetToProtect.getRange('F11:F14');
var protection = range.protect();
// Ensure the current user is an editor before removing others. Otherwise, if the user's edit
// permission comes from a group, the script throws an exception upon removing the group.
var me = Session.getEffectiveUser();
protection.addEditor(me);
protection.removeEditors(protection.getEditors());
if (protection.canDomainEdit()) {
protection.setDomainEdit(false);
}
}
保护 sheet 除了 F11:F14
的整个范围:
function myFunction() {
var sheetToProtect = SpreadsheetApp.getActive().getSheetByName('CheckList');
var protection = sheetToProtect.protect();
var rngMonitorUnprotect = sheetToProtect.getRange("F11:F14");
protection.setUnprotectedRanges([rngMonitorUnprotect]);
var me = Session.getEffectiveUser();
protection.addEditor(me);
protection.removeEditors(protection.getEditors());
if (protection.canDomainEdit()) {
protection.setDomainEdit(false);
}
}
我得到了这段代码运行没有错误; 由此产生的传播 sheet 确实在 sheet 名称旁边显示了一个储物柜; 受保护的工作表和范围仅显示特定范围不受保护,但打开文件的其他用户可以编辑受保护的范围:
var editors = newSpreadsheet.getEditors();
for (var i = 0; i < editors.length; i++) {
newSpreadsheet.removeEditor(editors[i]);
};
var sheetToProtect = newSpreadsheet.getSheetByName('CheckList');
var rngMonitorUnprotect = sheetToProtect.getRange("F11:F14");
var protection = sheetToProtect.protect();
protection.setUnprotectedRanges([rngMonitorUnprotect]);
我在这里错过了什么?
解释/问题:
根据 official documentation,这是对 sheet 应用保护的正确方法。
问题是您没有从
protection
对象中删除编辑者列表。相反,您所做的是将它们从 spreadsheet 文件本身中删除。本质上,当您为sheet添加保护时,所有当前编辑者自动拥有编辑sheet(或sheet范围)的权限不管保护。所以你的脚本需要从右边删除它们,这就是我们执行这个的原因:
protection.removeEditors(protection.getEditors());
仅保护 sheet 的 F11:F14
范围:
function myFunction() {
// Protect range F11:F14, then remove all other users from the list of editors.
var sheetToProtect = SpreadsheetApp.getActive().getSheetByName('CheckList');
var range = sheetToProtect.getRange('F11:F14');
var protection = range.protect();
// Ensure the current user is an editor before removing others. Otherwise, if the user's edit
// permission comes from a group, the script throws an exception upon removing the group.
var me = Session.getEffectiveUser();
protection.addEditor(me);
protection.removeEditors(protection.getEditors());
if (protection.canDomainEdit()) {
protection.setDomainEdit(false);
}
}
保护 sheet 除了 F11:F14
的整个范围:
function myFunction() {
var sheetToProtect = SpreadsheetApp.getActive().getSheetByName('CheckList');
var protection = sheetToProtect.protect();
var rngMonitorUnprotect = sheetToProtect.getRange("F11:F14");
protection.setUnprotectedRanges([rngMonitorUnprotect]);
var me = Session.getEffectiveUser();
protection.addEditor(me);
protection.removeEditors(protection.getEditors());
if (protection.canDomainEdit()) {
protection.setDomainEdit(false);
}
}