当有人将下拉菜单更改为“已锁定”时,我试图仅保护整个行(添加编辑器),即使该下拉菜单也应受保护。我想在工作表的几乎所有行中都实现这一点。
我发现有很多资源可以提供帮助,但是我不能将它们适当地组合在一起,非常感谢您的帮助!
下面是我找到的一些有用的链接。
Google sheets: protect cells conditionally?
Protecting Cells Based on Contents of Other Cells in Google Sheets
答案 0 :(得分:1)
将此代码添加到电子表格的脚本编辑器,并为以下提到的功能设置onEdit触发器。
将代码中的email@gmail.com字符串替换为您的实际电子邮件地址
注意:此脚本假定工作表的第一行可能具有三个选项,具体取决于控制该范围的保护。
Lock:锁定该特定列
解锁:解锁该特定列
空白:不执行任何操作
function onEdit(e){
var x = [e.range.columnStart,e.range.rowStart,e.range.columnEnd,e.range.rowEnd]
if (x[0]==x[2] && x[1]==1 && x[3]==1){
var lockRangeStart = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet().getRange(1,x[0]).getA1Notation();
var lastCol = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet().getLastRow();
var lockRangeName = (lockRangeStart+":"+lockRangeStart.match(/(\D*)/)[1]+lastCol);
var lockRange = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet().getRange(lockRangeName);
if(e.value == "Lock"){
var protection = lockRange.protect().setDescription('Locked Range');
protection.addEditor("email@gmail.com");
protection.removeEditors(protection.getEditors());
if (protection.canDomainEdit()) {
protection.setDomainEdit(false);
}
}
else if(e.value == "Unlock") {
var ss = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
var protections = ss.getProtections(SpreadsheetApp.ProtectionType.RANGE);
for (var i = 0; i < protections.length; i++) {
var protection = protections[i];
if (protection.canEdit() && protection.getRange().getA1Notation() == lockRangeName ) {
protection.remove();
}
}
}
}
}