我有一个工作表,其中包含用户在C& C列中输入的回复。 D,行3 - 20.响应是时间相关的,并查看E列第3行,看它是“锁定”还是“打开”。
使用保护功能,我锁定整张纸张以进行编辑,但C3:D20除外。工作表设置为每分钟计算。
我正在尝试编写一个脚本来检查E列,看它是设置为锁定还是打开。如果它被设置为锁定,我想锁定(保护)该行中的列C& D,以便除了我自己以外的所有人进行编辑。我每隔5分钟运行一次脚本,并且我处理了for循环和if语句,但是当我使用RemoveEditors函数时它会做两件事:
我尝试使用Google的示例代码,但是他们的代码将当前用户添加为编辑器,这是我试图避免做的事情,因为那时编辑器可以删除代码所在的保护。
您可以提供任何帮助。
现行守则如下:
function Lock_Cells() {
var sheet = SpreadsheetApp.getActive();
for (var i = 3; i <= 20; i++)
{
var Check_Cell = "E" + i;
var Temp = sheet.getRange(Check_Cell).getValue();
if (Temp == "Locked")
{
var Lock_Range = "C" + (i + 2) + ":D" + "i";
var protection = sheet.getRange(Lock_Range).protect();
var description = "Row " + i;
protection.setDescription(description);
var eds = protection.getEditors();
protection.removeEditors(eds);
}
}
}
答案 0 :(得分:0)
要避免创建一组新的受保护范围,可以添加逻辑以检查哪些行已被锁定。有了这些信息,您只需要跳过这些行:
注意:此行中有一个错误:var Lock_Range = "C" + (i + 2) + ":D" + "i";
变量我不应该引用。
function Lock_Cells() {
var sheet = SpreadsheetApp.getActive();
var rows = get_protected_Rows();
for (var i =3; i <= 20; i++)
{
var Check_Cell = "E" + i;
var cell = sheet.getRange(Check_Cell);
var Temp = sheet.getRange(Check_Cell).getValue();
if (Temp == "Locked" && rows.indexOf(i) <0)
{
var Lock_Range = "C" + i + ":D" + i; //In this line you put "i"
.....
...
}
function get_protected_Rows()
{
var ss = SpreadsheetApp.getActive();
var protections = ss.getProtections(SpreadsheetApp.ProtectionType.RANGE);
var rows = [];
for (var i = 0; i < protections.length; i++) {
var protection = protections[i];
var anotation = protection.getRange().getRow();
rows.push(anotation);
}
return rows
}
您是对的,当其中一个用户执行代码时,该保护使该用户能够编辑这些行。我建议您作为文件的所有者,运行任务以从这些行中删除所有其他编辑器。该功能与之前的功能非常相似。我知道这不是最好的,但它可以帮助你处理你的用例。
function remove_editors()
{
var ss = SpreadsheetApp.getActive();
var protections = ss.getProtections(SpreadsheetApp.ProtectionType.RANGE);
for (var i = 0; i < protections.length; i++) {
var protection = protections[i];
var anotation = protection.getRange().getA1Notation();
var eds = protection.getEditors();
protection.removeEditors(eds);
}
}
通过这样做,我能够限制其他用户的权限。希望它有所帮助。