【发布时间】:2019-06-07 14:50:46
【问题描述】:
我从 [this question] (Automatic Lock/Protect Rows/cells in Google Sheets at a specific time in other Cells) 中了解到如何在特定条件下锁定特定单元格,而 Jess 的回答非常好。
我只是想知道是否可以添加更多代码以在特定条件下解锁单元格。例如:如果用户做了事情1,锁定单元格B1,如果用户做事情2,解锁单元格B1以供将来编辑。
这里是我根据 Jess 的回答修改的代码,阻塞 (removeEditor) 工作正常,但我添加的用于解除阻塞单元格的“else if”条件不起作用,并且单元格在此条件下没有解除阻塞。
function onEdit(e) {
var ss1=SpreadsheetApp.getActiveSpreadsheet();
var sheet1=ss1.getSheetByName("Sheet Name");
var active = sheet1.getActiveCell();
var nextnum = sheet1.getRange(active.getRow(),8).getValue();
var shouldbeblocking= sheet1.getRange(active.getRow()-1,7)
var them = Session.getActiveUser();
var theiremails = them.getEmail();
// to unlock the cell, NOT WORKING
if (nextnum == 22) {
shouldbeblocking.protect().addEditor(theiremails);
shouldbeblocking.setNote("unLocked") ;
}
// to lock the cell (codes working fine)
else if (nextnum == 1) {
shouldbeblocking.protect().removeEditor("xxx@xxx.com") ;
shouldbeblocking.setNote("Locked") ;
}
}
根据@ross 的建议,我将Logger.log 添加到我的代码中(在 if 语句中),下面是执行脚本的屏幕截图,看起来代码运行通过 if 语句,奇怪的是“解锁" setNote 有效,因为我可以看到单元格上的“解锁”注释,但该单元格仍然被阻止:
【问题讨论】:
-
尼克,你确定 1)
nextnum曾经达到22的值; 2)getActiveUser().getEmail()结果与removeEditor()中的邮件相同? -
嗨奥列格,感谢您的回复! [1] 是的!在谷歌表上,我设置了一些 if 语句将 nextnum 的值更改为 22。 [2] 是的!目前我只将我的谷歌表格分享给另一个人的 gmail 帐户。并且 getActiveUser 的电子邮件与我用于 removeEditor 的 xxx@xxx.com 相同。有了这些,你认为我的代码有逻辑问题吗?谢谢!!
-
在您的
if语句中添加一个Logger.log,您认为该语句可以确保它确实进入了代码的那部分。您还可以显示您的执行记录(转到view > execution transcript)以查看此内容,然后将内容添加到问题中。 -
尼克,我希望至少有一个答案是“否”)请按照@ross 所说的去做,以确保脚本执行实际到达
if语句(顺便说一句,关于[2] - 确定或者你调用了类似theiremails==='xxx@xxx.com'的东西,它返回了true?) -
@ross,嘿,罗斯,感谢您的帮助!我将 logger.log + 执行记录添加到内容中,似乎代码进入了 if 语句,我确实注意到单元格上出现了“unlocked”的“setNote”,奇怪的是代码运行了 setNote 部分if 语句,但不在其他 addEditor 上,
标签: google-apps-script google-sheets triggers