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]);
};
내가 테스트 할 때마다이 정확한 파일에서 어떤 작업을했는지. 특히이 줄을 참조
"We're sorry, a server error occurred. Please wait a bit and try again."
:
var editors = SpreadSheet.getEditors();
를하지만 내가 만든 한 다른 테스트 시트에서 작동 어제, 그러나,이 오류가 발생했습니다. 나는 그것을 바닥에 배치 할 때 무작위로 작동하지 않을 것이라고 걱정하며, 왜 또는 어떻게 수정해야하는지 전혀 알지 못합니다.
더 좋은 방법이 있나요? 이 시트는 이미 게시되어 있고 많은 사람들과 공유되어 있으므로 수정 권한을 제거하거나 편집 유형을 '보기'로 전환해야합니다.
(나는 궁극적으로 이러한 파일을 소유하고있는 사람은 그들이 조직 한 방법을 알고있는 사람 아닙니다 때문에, 나는 당신이 폴더에 대한 그것을 할 수있어,하지만 난 파일에 대해 특별히 부탁합니다.)
감사를 당신은 어떤 도움을!
....
10 월 23, 2016 - 그것은 여러 다른 시트에 다시 일어나고. 나는 모든 주석, 그것은 확실히 문제를 일으키는이 비트입니다 :
//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(['[email protected]',
'[email protected]',
'[email protected]']);
//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(['[email protected]',
'[email protected]',
'[email protected]'
'[email protected]’]);
//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(['[email protected]',
'[email protected]',
'[email protected]'
'[email protected]’]);
//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(['[email protected]',
'[email protected]',
'[email protected]',
'[email protected]’,
'[email protected]',
'[email protected]']);
//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(['[email protected]',
'[email protected]',
'[email protected]'
'[email protected]’
'[email protected]',
'[email protected]']);
//put emails here - Sheet1 worker level
... OMG 간격이 너무 떨어져, 그것을 무시하세요 내가 놓친 수있는 쉼표 겪고 : 내 스크립트의 나머지는 일의이 유형의 반복이다. 나는 이것을 게시 할 수 있도록 익명화가 필요했습니다. 실제 코드는 오른쪽으로 간격을두고 있으며 모든 적절한 쉼표가 있습니다.
그래서 내가 뭘 잘못하고 있니? getEditors() 비트를 통해 구글이 놀란 이유는 무엇이며, 왜 특정 시트에서만 발생합니까 ??
나는 "google은 아무 일도 일어나지 않았지만 작동하지 않았다."라는 캐치 올 오류를 보았습니다. 나중에 다시 시도해보십시오. 손가락이 엇갈 렸습니까 ??? "
이것은 전혀 상상하기 힘든 부분이므로 좌절감을 느낍니다.
2016 년 11 월 29 일 : 오늘 내 손에 여분의 시간이 몇 분 남았으므로이 스크립트를 다시 시도 할 것입니다. 아직도 작동하지 않았다.
하지만 세상에 내가 깰 수 있다고 생각해! 그것은 공유 설정과 관련이 있습니다! 파일을 처음 만들 때 '링크가있는 모든 사용자'가 공유 옵션으로 선택되었습니다.
음, 충분한 보안을 제공하지 못해서 템플릿을 '특정 사용자 만'으로 전환했습니다. 나는 수동으로 모든 것을 제거했다.
다시 시도해보십시오.
수동으로 제거하지 않고 다시 시도해 보았습니다. 공유 설정을 변경하면 효과가 있음을 알았습니다. 그게했다!!! 그래서 아무런 보호 장치없이 그곳에 앉아있는 파이프 라인을 멀리 내려 놓으려고갔습니다.
Google은 스크립트를 통해 자신을 제거 할 수 있지만, Google에서는 그렇게하지 않을 것이라고 읽었습니다. 그래서, 나는 시트의 소유자가 아니기 때문에, 지금은 잠겨 있습니다. 또 다른 문제가되고 또 다른 질문이 될 것입니다.
하지만이 핥기를 받거나 실제 소유자가 스크립트를 실행하자마자 이 실제로는으로 해결되면 업데이트 할 예정입니다.
나는이 작품이 너무나 행복해!
파일의 소유자 또는 편집자는 있습니까? –
나는 파일의 소유자입니다.지적 해 주셔서 고맙습니다. 에디터로 운영하는 사람을 누구나 추가 할 수있는 코드를 찾으려고합니다. 단지 소유자가 아닌 경우를 위해서입니다. 이것을 반영하기 위해 내 질문을 수정했습니다. – wulfae
[SO 스레드] (http://stackoverflow.com/questions/18804649/google-apps-script-were-sorry-a-server-error-occurred-please-wait-a-bit-and) if this if 그 대답은 당신의 상황에 적용됩니다. – noogui