5

지금까지 2,3 일 동안 인터넷을 검색했지만 내 문제에 대한 해결책을 찾을 수 없습니다. 나는 프로그래밍에 대한 지식이 제한되어 있지만 이것이 작동하도록 할 수 있다면 훌륭한 일을 할 것입니다.Google 스프레드 시트 복사 + 스크립트에서 동일한 사용자와 공유

설명 : 나는 스프레드 시트, 안쪽 스크립트를 사용하여 템플릿 스프레드 시트의 복사본을 만들 필요가 있고 사본 (특히 이름과 보호 범위)에 템플릿의 모든 권한을 복사. 나는 SheetSpider를 사용하고있다.

지금 현재, 나는 템플릿의 복제본을 만들 수 있지만 SheetSpider 템플릿이 가지고있는 권한을 드롭하는 것, 그리고 당신은 설치 과정에서 정의하는 사용자와 다시 작성합니다. 대신, 필자는 템플릿 파일의 사용 권한을 복사하려고합니다. 스프레드 시트를 정기적으로 복사하면 파일> 스프레드 시트를 복사하고 "동일한 사용자와 공유"확인란을 선택하는 것처럼 이름 및 보호 된 범위 설정에 대한 권한을 가져 오지 못하기 때문에 까다로운 것처럼 보입니다. 보호 범위 설정을 유지합니다.

다시, 나는이 프로그램의 매우 제한된 지식을 가지고,하지만 난 삭제하고 사용 권한을 다시 설정하는 것 선을 정확히 한 생각한다. 지금은 며칠 동안 사용 권한을 남겨 두려고 노력했지만 아무 소용이 없습니다.

도움이나 도움을 주시면 감사하겠습니다.

감사합니다. 여기

function checkFixFileACLs(file, approvedViewers, approvedEditors) { 
    var viewers = file.getViewers().join(","); 
    viewers = viewers.split(","); 
    var editors = file.getEditors().join(","); 
    editors = editors.split(","); 
    viewers = arr_diff(editors, viewers); 
    var owner = file.getOwner().toString(); 
    var fileKey = file.getId(); 
    var driveFile = DriveApp.getFileById(fileKey); 
    var currViewers = []; 
    for (var k=0; k<viewers.length; k++) { 
    if ((viewers[k]!='')&&(approvedViewers.indexOf(viewers[k].toLowerCase())==-1)&&(approvedEditors.indexOf(viewers[k].toLowerCase())==-1)&&(viewers[k]!=owner)) { 
     try { 
     call(function() {driveFile.removeViewer(viewers[k].toLowerCase());}); 
     } catch(err) { 
     Logger.log(err.message); 
     } 
    } else { 
     currViewers.push(viewers[k].toLowerCase()); 
    } 
    } 
    for (var k=0; k<approvedViewers.length; k++) { 
    if ((approvedViewers[k]!='')&&(approvedViewers[k])) { 
     if (currViewers.indexOf(approvedViewers[k])==-1) { 
     try { 
      call(function() {driveFile.addViewer(approvedViewers[k].toLowerCase());}); 
     } catch(err) { 
      Logger.log(err.message); 
     } 
     } 
    } 
    } 
    var currEditors = []; 
    for (var k=0; k<editors.length; k++) { 
    if ((editors[k]!='')&&(approvedEditors.indexOf(editors[k].toLowerCase())==-1)&&(editors[k]!=owner)) { 
     try { 
     call(function() {driveFile.removeEditor(editors[k].toLowerCase());}); 
     } catch(err) { 
     Logger.log(err.message); 
     } 
    } else { 
     currEditors.push(editors[k].toLowerCase().replace(/\s+/g, '')); 
    } 
    } 
    for (var k=0; k<approvedEditors.length; k++) { 
    if ((approvedEditors[k]!='')&&(approvedEditors[k])) { 
     if (currEditors.indexOf(approvedEditors[k].toLowerCase())==-1) { 
     try { 
      call(function() {driveFile.addEditor(approvedEditors[k].toLowerCase().replace(/\s+/g, ''));}); 
     } catch(err) { 
      Logger.log(err.message); 
     } 
     } 
    } 
    } 
    return; 
} 
+0

경우 잘못된 라인은 무엇입니까? 또한 공유 폴더로 파일을 이동하면 다른 사용자와 자동으로 공유된다는 사실을 사용할 수 있습니까? 그리고 이것은 꽤 오래 전이지만 고정되어 있습니까? – JZL003

답변

1

실행 권한으로 스프레드 시트를 복사하는 스크립트. 그러나 시청자를 시청자로 전환시킵니다. 이는 더 많은 코드로 피할 수 있지만, 주석가를 얻는 방법이 file이 아니기 때문에 쉽지 않습니다.

function myFunction() { 

    var file = DriveApp.getFileById(SpreadsheetApp.getActiveSpreadsheet().getId()).makeCopy(); 
    var editors = DriveApp.getFileById(SpreadsheetApp.getActiveSpreadsheet().getId()).getEditors(); 
    for (var i = 0; i<editors.length;i++) { 
    file.addEditor(editors[i]) 
    } 
    var viewers = DriveApp.getFileById(SpreadsheetApp.getActiveSpreadsheet().getId()).getViewers(); 
    for (var i = 0; i<viewers.length;i++) { 
    file.addViewer(viewers[i]) 
    } 
}