5

Przeszukałem odległe obszary internetu od kilku dni, ale nie mogę znaleźć rozwiązania mojego problemu. Mam ograniczoną wiedzę na temat programowania, ale jeśli uda mi się to osiągnąć, to zrobię wspaniałe rzeczy.Skopiuj Arkusz kalkulacyjny Google + Udostępnij tym samym użytkownikom w skrypcie

WYJAŚNIENIE: Muszę wykonać kopię arkusza kalkulacyjnego szablonu, używając skryptu w arkuszu kalkulacyjnym A i skopiować wszystkie uprawnienia szablonu do kopii (w szczególności nazwy i chronionych zakresów). Używam programu SheetSpider.

W tej chwili mogę utworzyć duplikat szablonu, ale program SheetSpider wydaje się usuwać uprawnienia, które ma szablon, i przepisuje je użytkownikom zdefiniowanym podczas procesu instalacji. Zamiast tego chciałbym skopiować uprawnienia do pliku szablonu. Wydaje się to trudne, ponieważ zwykła kopia arkusza kalkulacyjnego nadal nie daje uprawnień do nazwy i ustawień chronionego zakresu, tak jak w przypadku wyboru pliku> kopiowania arkuszy kalkulacyjnych i zaznaczenia pola "udostępniaj tym samym użytkownikom "który zachowuje chronione ustawienia zasięgu.

Ponownie, mam bardzo ograniczoną wiedzę na temat programowania, ale myślę, że wskazałem linie, które zdają się zrzucać i resetować uprawnienia. Przez wiele dni próbowałem grać z tym, co zostało, aby uzyskać pozwolenie, ale bezskutecznie.

Każda pomoc lub wskazówki będą mile widziane!

Dzięki!

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

Gdzie są błędne wiersze? Czy można również wykorzystać fakt, że przeniesienie pliku do folderu udostępnionego spowoduje automatyczne udostępnienie go innym użytkownikom? I chociaż było to dość dawno temu, czy kiedykolwiek zostało naprawione? – JZL003

Odpowiedz

1

Tutaj skrypt, który po uruchomieniu skopiuje arkusz z uprawnieniami. Jednak zmieni komentatorów w widzów. Można tego uniknąć, stosując więcej kodu, ale nie jest to łatwe, ponieważ nie ma metody uzyskiwania komentatorów.

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]) 
    } 
} 
Powiązane problemy