【发布时间】:2016-10-18 19:01:32
【问题描述】:
所以我有(我假设是)一个相当长的脚本来自动在 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 太多了,伙计。还有另一种方法可以做到这一点吗?是否有其他方法可以删除编辑器,或者将它们设置为“仅查看”,然后在我完成后返回“编辑”?
(如果谷歌只将电子邮件放在我定义的每个保护范围内而不是每个人,我就不会有这个问题。但他们不会,我必须删除每个人才能让这个脚本工作。 )
我已经查看了很多链接的答案,但他们似乎没有回复。 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
...天啊,间距太差了,请忽略它以及我可能错过的任何逗号。我需要快速匿名,以便我可以发布它。实际的代码是右隔开的,并且确实有所有正确的逗号。
那我做错了什么???为什么 google 对 getEditors() 位感到害怕,为什么只在某些工作表中??
我在其他地方看到这只是一个包罗万象的错误,因为“谷歌不知道刚刚发生的事情,但它不起作用。稍后再试,也许它会起作用?手指交叉????”
这真是令人沮丧,因为这根本不是一个花哨的功能。
2016 年 11 月 29 日:今天有几分钟的空闲时间,所以我想我会再试一次这个脚本。仍然没有工作。
但是天哪,我想我已经破解了!跟分享设置有关!最初创建文件时,选择了“任何有链接的人”作为共享选项。
好吧,我认为这没有提供足够的安全性,所以我将模板切换为“仅限特定人员”。然后我手动删除了所有人,认为这可能会起作用。
再次运行它,它成功了。
又试了一次,没有手动删除,希望只更改共享设置就可以了。它做了!!!所以我去修复了管道深处没有保护装置的那个。
事实证明,您可以通过脚本删除自己,即使我在某处读到谷歌不会这样做。因此,由于我不是该表的所有者,因此我现在被锁定了。这将是另一个问题,另一个问题。
但是一旦我得到这个,或者让实际的所有者运行脚本,我会更新如果这实际上解决了它。
如果这行得通,我会更开心!
【问题讨论】:
-
您是文件的所有者还是编辑者?
-
我是文件的所有者。感谢您指出这一点,我将尝试找到一些代码,让我添加作为编辑器运行它的人,以防万一他们不是所有者。编辑了我的问题以反映这一点。
-
如果答案适用于您的情况,请查看此SO thread。
-
啊。除了删除编辑器功能之外,我已经将其他所有内容都注释掉了,但我仍然收到服务器错误。我刚刚又试了一次,还是没搞定!所以这是一个令人沮丧的、间歇性的错误,可以随意来来去去。我正在再次尝试整个脚本,看看我是否得到它,但是......我想如果出现此错误,人们将不得不手动将新人添加到保护中。
-
@noogui:将所有内容都注释掉了,问题仍然是“getEditors”。不幸的是,我需要获取然后删除编辑器才能使脚本的其余部分正常工作,所以我不知道从哪里开始。但至少我确定这行代码才是问题所在! - 我的问题又出现了,这就是更新的原因。
标签: google-apps-script google-sheets server-error