我拥有一个电子表格,我有 10 个拥有编辑权限的用户 由于有很多单元格需要解锁或锁定,最好先锁定所有内容 并解锁他们可以安全使用而不会意外错误地编辑公式的那些
现在我只是在猜测最好的解决方案是什么 我想避免用户被删除
如果这很重要,那么没有人在一个组中
这些是编辑可以编辑的
['B3:U27', 'W3:AP27', 'E29:E31', 'I29:I31', 'M29:M31', 'Q29:Q31', 'U29:U31', 'Z29:Z31', 'AD29:AD31', 'AH29:AH31', 'AL29:AL31', 'AP29:AP31', 'B29', 'F29', 'J29', 'N29', 'R29', 'W29', 'AA29', 'AE29', 'AI29', 'AM29', 'C29', 'G29', 'K29', 'O29', 'S29', 'X29', 'AB29', 'AF29', 'AJ29', 'AN29', 'D29', 'H29', 'L29', 'P29', 'T29', 'Y29', 'AC29', 'AG29', 'AK29', 'AO29', 'B31', 'F31', 'J31', 'N31', 'R31', 'W31', 'AA31', 'AE31', 'AI31', 'AM31', 'C31', 'G31', 'K31', 'O31', 'S31', 'X31', 'AB31', 'AF31', 'AJ31', 'AN31', 'D31', 'H31', 'L31', 'P31', 'T31', 'Y31', 'AC31', 'AG31', 'AK31', 'AO31', 'B33:C33', 'F33:G33', 'J33:K33', 'N33:O33', 'R33:S33', 'W33:X33', 'AA33:AB33', 'AE33:AF33', 'AI33:AJ33', 'AM33:AN33' ,'D33:E33', 'H33:I33', 'L33:M33', 'P33:Q33', 'T33:U33', 'Y33:Z33', 'AC33:AD33', 'AG33:AH33', 'AK33:AL33', 'AO33:AP33'];
其他一切都可以锁定
每天会创建 1 或 2 个额外的工作表吗?从现在开始这是否适用于所有工作表?
已经有几张手动保护(没有脚本)的工作表重要吗?
用户会收到通知 还是这一切只是在后台发生?
更新:
我找到了保护页面和解锁范围的正确脚本 并且完美运行
function testProtect() {
var sheet = SpreadsheetApp.getActiveSheet();
var protection = sheet.protect().setDescription('Sample protected sheet');
var unprotected = sheet.getRange('B3:I27');
protection.setUnprotectedRanges([unprotected]);
var me = Session.getEffectiveUser();
protection.addEditor(me);
protection.removeEditors(protection.getEditors());
if (protection.canDomainEdit()) {
protection.setDomainEdit(false);
}
}
但是有两件事我想不通 如何将其应用于所有工作表并添加更多单元格和范围? 因为如果我添加另一个范围它会出错
var unprotected = sheet.getRange('B3:I27','F29:I29');
异常:B3:I27 无法转换为 int 类型(“代码”文件中的第 4 行)
提前感谢您的帮助!
答案 0 :(得分:0)
如果我正确理解您的帖子,这就是您的目标:
推荐的解决方案:
您可以参考下面的示例脚本,它会锁定您的工作表并仅解锁您设置的特定范围。
示例脚本
[更新]
function main(){ //Main function to run
var sheets = SpreadsheetApp.getActiveSpreadsheet().getSheets();
var disregard = ["Sheet3","Sheet4","Sheet5"]; //ADD SHEET NAMES HERE THAT YOU WANT TO BE DISREGARDED
for(var x=0; x<sheets.length; x++){
if(disregard.some(data => sheets[x].getName().includes(data))){
//E.g. Disregard any sheet names added on the "disregard" array
}else{
unlockCertainRanges(sheets[x]);
}
}
}
function unlockCertainRanges(currentSheet){ //Function to unlock certain ranges on your spreadshseet
var sheet = currentSheet;
// Remove all range protections in the spreadsheet
var protections = sheet.getProtections(SpreadsheetApp.ProtectionType.RANGE);
for (var i = 0; i < protections.length; i++) {
var protection = protections[i];
protection.remove();
}
var protection = sheet.protect();
//restrict editors to owner
protection.getRange().getA1Notation();
var eds = protection.getEditors();
protection.removeEditors(eds);
//set unprotected ranges
var ranges = protection.getUnprotectedRanges();
var data = ["A1:A5","B6:B10","C11:C15"]; // ADD YOUR RANGES HERE
data.forEach(res => { //LOOPS INTO EVERY ARRAY CONTAINING SPECIFIC RANGES
ranges.push(sheet.getRange(res));
protection.setUnprotectedRanges(ranges); //REMOVES THE PROTECTION ON THE RANGE
});
}
注意: 借用了一段脚本来解锁 How to protect a sheet then unprotect specific cells 中的特定范围作为参考。
结果:
样品表
所有单元格都被锁定,除了范围 "A1:A5","B6:B10" & "C11:C15"
(包含“解锁”字以提高可见性)