5

Ho cercato per un paio di giorni le lunghe distanze di Internet, ma non riesco a trovare una soluzione al mio problema. Ho una conoscenza limitata della programmazione, ma se riesco a farlo funzionare, farà cose meravigliose.Copia foglio di calcolo di Google + Condividi con gli stessi utenti nello script

SPIEGAZIONE: Ho bisogno di fare una copia di un foglio di calcolo modello, utilizzando uno script all'interno del foglio di calcolo A e copiare tutte le autorizzazioni del modello nella copia (in particolare il nome e gli intervalli protetti). Sto usando SheetSpider.

A partire da ora, posso creare il duplicato del modello, ma SheetSpider sembra eliminare le autorizzazioni del modello e le riscrive con gli utenti definiti durante il processo di installazione. Invece, vorrei solo copiare le autorizzazioni del file modello. Sembra essere complicato perché una copia regolare del foglio di calcolo continua a non trasferire le autorizzazioni per il nome e le impostazioni dell'intervallo protetto come se fosse in un file> copia foglio di calcolo e selezionare la casella "e condividere con gli stessi utenti "che mantiene le impostazioni della gamma protetta.

Ancora una volta, ho una conoscenza molto limitata della programmazione, ma penso di aver individuato le linee che sembrano abbandonare e ripristinare le autorizzazioni. Ho provato a giocare con il sotto per giorni, ora per farlo lasciare le autorizzazioni da solo, ma senza successo.

Qualsiasi aiuto o guida sarebbe molto apprezzato!

Grazie!

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

Dove sono le righe errate? Inoltre, puoi usare il fatto che se sposti un file in una cartella condivisa, verrà automaticamente condiviso con gli altri utenti? E, anche se è passato tanto tempo, è mai stato risolto? – JZL003

risposta

1

Qui uno script che copierà il foglio di calcolo con autorizzazioni durante l'esecuzione. Tuttavia, trasformerà i commentatori in spettatori. Questo è evitabile con più codice, ma non è molto facile perché non esiste un metodo file per ottenere commentatori.

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]) 
    } 
} 
Problemi correlati