2013-11-24 10 views
6

Büyük bir proje için DocsList kullanıyorum ve mükemmel çalışıyordu. Son zamanlarda, hatalar ortaya çıkıyor ve çoğunlukla bir klasör veya dosya almakla kökleri var. Araştırma yaptığımda DriveApp'ın güncellendiğini tespit ettim. Sorun, DriveApp'in DocsList gibi arama parametrelerine sahip olmamasıdır. ÖrneğinDocsList'ten DriveApp'a geçmek için mi?

, böyle bir klasör yapısı olsaydı:

Root 
-Main Folder 1 
--Folder 1 
--Folder 2 
-Main Folder 2 
--Folder 1 
--Folder 2 

klasörü almak için "Klasör 1" "Ana Klasör 2," Ben gibi arama parametresinde bırakabilir: DocsList.getFolder ('Ana Klasör 2/Klasör 1') DriveApp ile

, ben sadece onunla çalışmak nasıl anlayamıyorum. Anladığım kadarıyla, ben DriveApp için böyle bir şey yapmak zorunda: Ben daha bir klasörü olsaydı

var mainFolders = DriveApp.getFoldersByName('Main Folder 2'); 
while (mainFolders.hasNext()) { 
    var mainFolder = termFolders.next(); 
    var subFolders = termFolder.getFoldersByName('Folder 1'); 
    // Something like this... 
} 

Yani "derin" Hatta daha da bu genişletmek zorunda kalacak ..?

yerine şeyler daha kolay yapma gibi hissediyorum, hepsi FileIterators ve FolderIterators ile daha da karmaşık hale getirdi. Ve sadece kod dosyalarında bir dosya veya klasör "almak" zor hale getiriyor.

Temel olarak, bu iş parçacığı, Drive dosyaları/klasörleri gezinmek ve düzenlemek için DocsList için kullanılan bir kişinin DriveApp'a nasıl geçtiğini bulmak ve aynı şeyleri başarmaktır. Farklı senaryolar

Küçük/Ayrık örnekler gerçekten yararlı olacaktır. Onu oradan alabilirim. Bunu daha fazla düzenleyeceğim, eğer yardıma ihtiyacım olduğu konusunda net olmadığımı düşünüyorsan. wchiquito en yorumun

+0

İyi soru ... Emin değilim 'Deneysel!' DriveApp yerini alacaktı. [Bu bağlantı Google I/O'daki bir tartışmaya] [http://youtu.be/0HVJMIeb3aE?t=34m45s] adresinde yayınlandı. Burada @ArunNagarajan geçiş yapmayı önerdi. Örneğiniz bunun için doğru bir yol gibi görünüyor, ancak bunu daha uzun sürdüğünü ve maksimum yürütme süresine yaklaştığını görebiliyorum, bu yüzden ['getContinuationToken()'] (https://developers.google.com/apps) -script/reference/drive/folder-iterator # getContinuationToken()) eklendi. Ben de getFolder (yol) yöntemini özleyeceğim. – dev

+0

konuda biraz: https://plus.google.com/114246942750290439721/posts/duahLW1kRyF, https://plus.google.com/104812769727428324010/posts/D9wJJittDhb, https://code.google.com/p/google-apps-script sorunlar/meseleler/detay?id = 3045 – wchiquito

+0

Aşağıdaki bağlantıda ilgili bir stackoverflow sorusu: [Kodumda DriveApp için DocsList nasıl güncelleştirilir] (http://stackoverflow.com/a/29778417/2946873) –

cevap

6

tartışmalar ilginç bir okuma vardır, ama tüm bağlantıları takip zaman alıcı olduğunu.

Alt satır: getFolderByPath() öğesinin DriveApp sürümü olmayacaktır, bu nedenle ,'un kendi yuvarlanmanız gerekir. Faustino, the Google+ group'da bir çalışma önerdi ve Eric bunu geliştirdi. Burada "/" ile başlayan yollara izin vermek için eklenmiş bir kontrol ile. Bunun üzerine

function getFolderByPath(path) { 
    var parts = path.split("/"); 

    if (parts[0] == '') parts.shift(); // Did path start at root, '/'? 

    var folder = DriveApp.getRootFolder(); 
    for (var i = 0; i < parts.length; i++) { 
    var result = folder.getFoldersByName(parts[i]); 
    if (result.hasNext()) { 
     folder = result.next(); 
    } else { 
     return null; 
    } 
    } 
    return folder; 
} 

, sadece myFolder = getFolderByPath('Main Folder 2/Folder 1'); yapabilirsiniz. Bir DriveApp Klasör örneğiyle sonuçlanacaksınız.

+0

Birinin okuması gerektiğini varsayalım: bir DriveApp sürümü. ?? :-) –

+0

@Sergeinsas Oops! Bunu kanıtlamak için teşekkürler. Sabit! – Mogsdad

2

Aşağıdaki kod benimki üzerinde çalışır. O benim kodunda birkaç 'stratejik' pozisyonlarda diyoruz aynı kimliği

function convertFileFromDocsListToDriveApp(file) 
{ // Because of difference between DocsList and DriveApp 
    return (file === null) ? null : DriveApp.getFileById(file.getId()); 
} 

function convertFolderFromDocsListToDriveApp(folder) 
{ // Because of difference between DocsList and DriveApp 
    return (folder === null) ? null : DriveApp.getFolderById(folder.getId()); 
} 

sahip dayanmaktadır. DriveApp'tan DocsList'e dönüşüm testi yapmadım, ancak bunun da işe yaramasını bekliyorum. DocsList olduğu gibi ama ben kabul niçin

İlgili konular