5

Birkaç günlüğüne internete çok uzak mesafeler aradım, ancak sorunum için bir çözüm bulamıyor gibiyim. Programlama konusunda sınırlı bilgiye sahibim, ancak bunu işe alabiliyorsam, harika şeyler yapacak.Google E-Tabloyu Kopyala + Komuttaki aynı kullanıcılarla paylaş

Açıklama: E tablosu içinde bir komut dosyası kullanarak şablonun elektronik sayfasının bir kopyasını oluşturmalı ve şablonun tüm izinlerini kopyaya kopyalamam gerekir (özellikle adı ve korunan aralıkları). SheetSpider kullanıyorum.

Şu an itibariyle, şablonun kopyasını oluşturabilirim, ancak SheetSpider şablonun sahip olduğu izinleri düşürüyor ve bunları kurulum işlemi sırasında tanımladığınız kullanıcılarla yeniden yazar. Bunun yerine, şablon dosyasının izinlerini kopyalamak istiyorum. E-tabloların normal bir kopyası, e-tabloların normal bir kopyasının adı ve korunan alan ayarları izinlerini getirmediğinden, e-tabloya gidip e-tabloyu kopyalayıp "yazan kutuyu işaretleyip" aynı kullanıcıyla paylaştığınız gibi görünüyor. "Korunan aralık ayarlarını koruyor.

Yine, çok sınırlı bir programlama bilgisine sahibim, ancak sanırım düşme ve sıfırlama gibi görünen satırları belirledim. İzinleri yalnız bırakmak için şimdi birkaç gün boyunca aşağıda oynamaya çalıştım, ama boşuna.

Herhangi bir yardım veya yönlendirme çok takdir edilecektir!

Teşekkürler!

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

Hatalı çizgiler nerede? Ayrıca, bir dosyayı paylaşılan klasöre taşırsanız, otomatik olarak diğer kullanıcılarla paylaşılacağı gerçeğini kullanabilir misiniz? Ve bu oldukça uzun bir süre önce, hiç düzeltildi mi? – JZL003

cevap

1

Burada, çalışma sırasında e-tabloyu izinlerle kopyalayacak bir komut dosyası. Ancak, yorumcuları izleyicilere dönüştürecek. Bu, daha fazla kodla önlenebilir, ancak yorum yapmak için file yönteminin olmadığı için çok kolay değildir.

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