所以我(我认为是)一个相当长的脚本来自动授予Google表格中的权限。为了使其有效,我必须先删除所有编辑器,否则Google会将它们放在每个类别中。我无法弄清楚如何完全消除它们。
在我的测试文件中,我是所有者。虽然我假设我需要添加一些东西,将脚本运行者的帐户添加为编辑器,以防它们不是。 (编辑添加:显然你无法删除自己作为编辑器,所以即使你不是主人,你仍然可以运行脚本的其余部分。谢谢你,谷歌!再次编辑:那是一个傻瓜。我希望我与说这话的人联系在一起,因为他们错了。你可以自行删除,我现在正等着主人把我加回来.9__6)
所以我正在使用它:
//removes all Editors
var SpreadSheet = SpreadsheetApp.getActiveSpreadsheet();
var editors = SpreadSheet.getEditors();
for (var i = 0; i < editors.length; i++) {
SpreadSheet.removeEditor(editors[i]);
};
每次测试时,都在这个确切的文件中工作。但是,昨天我收到了这个错误:
“很抱歉,发生了服务器错误。请稍等一下试试吧 试“。
具体参考这一行:
var editors = SpreadSheet.getEditors();
但它适用于我制作的其他测试表。我担心当我将它部署在地板上时它会随机无法工作,我不知道为什么,或者如何修复它。
有没有更好的方法来实现这一目标?这些工作表已经存在,已与很多人共享,因此我需要删除其编辑权限或将其编辑类型切换为“查看”。
(我知道你可以为文件夹做这件事,但我希望它专门用于文件,因为我最终不是拥有这些文件的人,谁知道它们是如何组织的。)
感谢您的帮助!
...
2016年10月23日 - 在多张不同的纸张上再次发生这种情况。我评论了所有的东西,这肯定是导致问题的一点:
//removes all Editors
var SpreadSheet = SpreadsheetApp.getActiveSpreadsheet();
var editors = SpreadSheet.getEditors();
for (var i = 0; i < editors.length; i++) {
SpreadSheet.removeEditor(editors[i]);
};
getEditors太多了,伙计。还有另一种方法吗?有没有其他方法可以删除编辑器,或者将它们设置为“仅查看”,然后在完成后返回“编辑”?
(如果google只是将电子邮件放在每个保护范围内,因为我已经定义了它而不是每个人,我不会遇到这个问题。但他们不会这样做,我必须删除所有人才能使这个脚本工作。 )
我已经查看了很多相关的答案,他们似乎没有回复。 getEditors是否太重而无法可靠使用?
我真的不是脚本编写者,可以使用任何人都可以提供的链接或指导。
我似乎也无法接受我自己的答案作为答案...
2016年11月14日编辑 - 问题仍然存在。链接的答案讨论了使用“字符串替换函数”,以及如何更改使脚本工作。我没有使用它。我脚本的其余部分重复了这类事情:
//Sheet1
var sh3 = ss.getSheetByName("Sheet1");
var protection = sh3.protect().setDescription('Sheet1 - Wizards'); //protects whole sheet
protection.addEditors(['wizard1@test.com',
'wizard2@test.com',
'wizard3@test.com']);
//adds email addresses to WIZARD range
var unprotected = sh3.getRange('A10:T');
protection.setUnprotectedRanges([sh3.getRange("B3:B3"),
sh3.getRange("C1"),
sh3.getRange("B72:B72"),
sh3.getRange("C2:K8"),
sh3.getRange("A10:T70"),
sh3.getRange("A75:Q")]);
//unprotects everything but frozen header. (unprotects the Sheet1 Legend too.)
var range = sh3.getRange('C2:K8'); //selects the range
var protection = range.protect().setDescription('Sheet1 - Legend'); //names the range
var me = Session.getEffectiveUser();
protection.addEditors(['wizard1@test.com',
'wizard2@test.com',
'wizard3@test.com'
'supervisor1@test.com’]);
//put Sheet1 supervisor emails here
var range = sh3.getRange('C1'); //selects the range
var protection = range.protect().setDescription('Sheet1 - Part Number'); //names the range
var me = Session.getEffectiveUser();
protection.addEditors(['wizard1@test.com',
'wizard2@test.com',
'wizard3@test.com'
'supervisor1@test.com’]);
//put Sheet1 supervisor emails here
var range = sh3.getRange('A10:T38'); //selects the range
var protection = range.protect().setDescription('Sheet1 - worker 1'); //names the range
var me = Session.getEffectiveUser();
protection.addEditors(['wizard1@test.com',
'wizard2@test.com',
'wizard3@test.com',
'lead1@test.com’,
'worker1@test.com',
'worker2@test.com']);
//put emails here - Sheet1 worker level
var range = sh3.getRange('A43:Q'); //selects the range
var protection = range.protect().setDescription('Sheet1 - Artists 2'); //names the range`
var me = Session.getEffectiveUser();
protection.addEditors(['wizard1@test.com',
'wizard2@test.com',
'wizard3@test.com'
'lead1@test.com’
'worker1@test.com',
'worker2@test.com']);
//put emails here - Sheet1 worker level
... Omg间距是如此偏离,请忽略它和我可能错过的任何逗号。我需要快速匿名,所以我可以发布它。实际代码间隔正确,并且具有所有正确的逗号。
那么我做错了什么?为什么google会因为getEditors()位而烦恼,为什么只能在某些工作表中使用?
我在其他地方看到这只是一个包罗万象的错误,“谷歌不知道刚刚发生了什么,但它没有用。稍后再试,也许它会起作用?手指交叉????”
AS HECK令人沮丧,因为这根本不是一个奇特的功能。
2016年11月29日:今天我手上有几分钟,所以我想我会再次尝试这个剧本。仍然没有奏效。
但我的上帝,我想我已经破解了!这与共享设置有关!最初创建文件时,选择“有链接的任何人”作为共享选项。
好吧,我认为这没有提供足够的安全性,所以我将模板切换为“只有特定的人”。然后我手动删除所有人,想想也许这会有用。
再次跑吧,它奏效了。
再次尝试,无需手动删除,希望只需更改共享设置即可。它做了!!!所以我去修理了那条坐在那里没有任何保护措施的管道。
结果表明你可以通过脚本删除自己,即使我已经读过谷歌不会那样做的地方。所以,由于我不是表单的所有者,我现在被锁定了。这将是另一个问题,另一个问题。
但是一旦我得到这个舔,或者让实际的所有者运行脚本,我会更新,如果实际上解决了它。
当这个有效时,我会更开心!
答案 0 :(得分:1)
发布答案,因为我的问题已经消失了?我没有改变任何东西,但是今天早上我尝试了它并且它正在工作。相同的工作表,相同的代码,没有服务器错误。
这个完全相同的代码在此工作表的不同副本上运行(其中我也是所有者),同时这个愚蠢的服务器错误弹出一个,所以我真的不知道发生了什么。
我将向Google Gods祈祷并希望没有任何问题。 (最好的计划,是吗?)
感谢Rubén和noogui的意见。
答案 1 :(得分:0)
同样的事发生在我身上。如果这个Gscript我不能为我的生命而奔跑。重启电脑。签下一切。重新上载脚本。去睡觉了。第二天早上一切正常。
答案 2 :(得分:0)
我有一个类似的问题,但是这是我发现的……基本上,我正在链接到一个已被删除或失去权限的库。由于我没有使用这个特定的库,因此我删除了该库,现在所有工作表都可以再次使用。