Google Apps 脚本范围保护锁定标签颜色和标签重命名
Google Apps Script Range Protection Lock Tab color and Tab Renaming
具有多个选项卡的电子表格有 10 个 editors/access。我想在其中 8 个编辑器的每个选项卡中锁定一些 运行ges。
当我运行 google 下面写的应用程序脚本时,它还锁定了 8 个编辑器,无法编辑选项卡名称甚至选项卡颜色。可以建议我哪里出错了吗?我希望他们仍然能够更改标签名称和标签颜色。
function addClassProtectionFor_Current(){ //Main function to run
var currentclasstab = SpreadsheetApp.getActiveSheet();
// Remove all range protections in the spreadsheet
var protections = currentclasstab.getProtections(SpreadsheetApp.ProtectionType.RANGE);
for (var i = 0; i < protections.length; i++) {
var protection = protections[i];
protection.remove();
}
var protection = currentclasstab.protect();
//restrict editors to owner
protection.getRange().getA1Notation();
var eds = protection.getEditors();
protection.removeEditors(eds);
//Add Editors to give access to the protected ranges
protection.addEditors(["me.gmail.com","you@gmail.com"]);
//set unprotected ranges
var ranges = protection.getUnprotectedRanges();
//Ranges to leave unlocked
var data = ["A5:V19","B23:V26","B29:V35","B39:V45"];
data.forEach(res => { //LOOPS INTO EVERY ARRAY CONTAINING SPECIFIC RANGES
ranges.push(currentclasstab.getRange(res));
protection.setUnprotectedRanges(ranges); //REMOVES THE PROTECTION ON THE RANGE
});
}
我相信你的目标如下。
- 您想保护除
A5:V19,B23:V26,B29:V35,B39:V45
单元格之外的所有单元格不被用户访问。
- 您想让用户在单元格受保护的情况下更改选项卡名称和选项卡颜色。
- 您想使用 Google Apps 脚本实现此目的。
问题和解决方法:
不幸的是,在当前阶段,“UnprotectedRanges”似乎不能用于受保护的sheet。在这种情况下,用户无法更改选项卡名称和选项卡颜色。因此,在您的情况下,作为解决方法,为了让用户更改选项卡名称和选项卡颜色,需要保护除 A5:V19,B23:V26,B29:V35,B39:V45
之外的所有单元格。当这反映在您的脚本中时,它会变成如下。
修改后的脚本:
function addClassProtectionFor_Current() {
var currentclasstab = SpreadsheetApp.getActiveSheet();
var protections = currentclasstab.getProtections(SpreadsheetApp.ProtectionType.RANGE);
for (var i = 0; i < protections.length; i++) {
var protection = protections[i];
protection.remove();
}
var ranges = ["A1:4", "W5:19", "A20:A", "B20:22", "B27:28", "B36:38", "W23:26", "W29:35", "W39:45", "B46:" + currentclasstab.getMaxRows()];
currentclasstab.getRangeList(ranges).getRanges().forEach(r => {
const protection = r.protect();
var eds = protection.getEditors();
protection.removeEditors(eds);
protection.addEditors(["me.gmail.com","you@gmail.com"]);
})
}
- 在此脚本中,
ranges
的值是除 A5:V19,B23:V26,B29:V35,B39:V45
之外的所有单元格。如果您想保护其他单元格,请将它们添加到阵列中。
参考:
具有多个选项卡的电子表格有 10 个 editors/access。我想在其中 8 个编辑器的每个选项卡中锁定一些 运行ges。
当我运行 google 下面写的应用程序脚本时,它还锁定了 8 个编辑器,无法编辑选项卡名称甚至选项卡颜色。可以建议我哪里出错了吗?我希望他们仍然能够更改标签名称和标签颜色。
function addClassProtectionFor_Current(){ //Main function to run
var currentclasstab = SpreadsheetApp.getActiveSheet();
// Remove all range protections in the spreadsheet
var protections = currentclasstab.getProtections(SpreadsheetApp.ProtectionType.RANGE);
for (var i = 0; i < protections.length; i++) {
var protection = protections[i];
protection.remove();
}
var protection = currentclasstab.protect();
//restrict editors to owner
protection.getRange().getA1Notation();
var eds = protection.getEditors();
protection.removeEditors(eds);
//Add Editors to give access to the protected ranges
protection.addEditors(["me.gmail.com","you@gmail.com"]);
//set unprotected ranges
var ranges = protection.getUnprotectedRanges();
//Ranges to leave unlocked
var data = ["A5:V19","B23:V26","B29:V35","B39:V45"];
data.forEach(res => { //LOOPS INTO EVERY ARRAY CONTAINING SPECIFIC RANGES
ranges.push(currentclasstab.getRange(res));
protection.setUnprotectedRanges(ranges); //REMOVES THE PROTECTION ON THE RANGE
});
}
我相信你的目标如下。
- 您想保护除
A5:V19,B23:V26,B29:V35,B39:V45
单元格之外的所有单元格不被用户访问。 - 您想让用户在单元格受保护的情况下更改选项卡名称和选项卡颜色。
- 您想使用 Google Apps 脚本实现此目的。
问题和解决方法:
不幸的是,在当前阶段,“UnprotectedRanges”似乎不能用于受保护的sheet。在这种情况下,用户无法更改选项卡名称和选项卡颜色。因此,在您的情况下,作为解决方法,为了让用户更改选项卡名称和选项卡颜色,需要保护除 A5:V19,B23:V26,B29:V35,B39:V45
之外的所有单元格。当这反映在您的脚本中时,它会变成如下。
修改后的脚本:
function addClassProtectionFor_Current() {
var currentclasstab = SpreadsheetApp.getActiveSheet();
var protections = currentclasstab.getProtections(SpreadsheetApp.ProtectionType.RANGE);
for (var i = 0; i < protections.length; i++) {
var protection = protections[i];
protection.remove();
}
var ranges = ["A1:4", "W5:19", "A20:A", "B20:22", "B27:28", "B36:38", "W23:26", "W29:35", "W39:45", "B46:" + currentclasstab.getMaxRows()];
currentclasstab.getRangeList(ranges).getRanges().forEach(r => {
const protection = r.protect();
var eds = protection.getEditors();
protection.removeEditors(eds);
protection.addEditors(["me.gmail.com","you@gmail.com"]);
})
}
- 在此脚本中,
ranges
的值是除A5:V19,B23:V26,B29:V35,B39:V45
之外的所有单元格。如果您想保护其他单元格,请将它们添加到阵列中。