2014-02-27 133 views
0

我需要我的腳本來加載一個驅動器文件的URL被添加到電子表格。無論出於何種原因'File.getUrl()'返回null,但其他一切似乎都在工作。谷歌腳本,得到一個驅動器文件url

例如,'File.getName()'起作用。所以我錯過了許可或什麼?

這裏是我的代碼(有刪節):

function loadURL(folderPath, name) {  
    var folder = loadFolder(folderPath); 

    // Find file 
    var files = folder.searchFiles('modifiedDate >= "' + getDate() + '" and title = "' + name + '"'), 
     file, found = 0; 

    for (; files.hasNext(); found++) { 
    file = files.next(); 
    } 

    if (found == 1) { 
    ///////////////////////////////// 
    // Here is 'getUrl' 
    ///////////////////////////////// 
    var url = file.getUrl(); 

    Logger.log("Loaded: " + url); 
    return url; 
    } else { 
    throw "Error loading file"; 
    } 
} 

/** 
* ** NOTE: THIS SEEMS TO BE WORKING FINE ** 
* Load a folder 
* @param {string} url 
* @return {Folder} 
*/ 
function loadFolder(url) { 
    var folders = url.split('/'), 
     folder = DriveApp.getRootFolder(); 

    Logger.log("Loading URL: " + url); 

    for (var key in folders) { 
    var fName = folders[key];  
    if (fName.length > 0) { 
     var fIt = folder.getFoldersByName(fName), 
      found = 0; 

     Logger.log(" -> " + fName); 

     for (; fIt.hasNext(); found++) { 
     folder = fIt.next(); 
     } 

     if (found == 0) { 
     throw "Could not find the folder '" + fName + "'"; 
     } else if (found > 1) { 
     throw "Found multiple matches to the folder '" + fName + "'"; 
     } 
    } 
    } 

    return folder; 
} 

和日誌,如果你很好奇:

[14-02-26 19:56:15:980 EST] Loading URL: Work/PDF/ 
[14-02-26 19:56:15:981 EST] -> Work 
[14-02-26 19:56:16:120 EST] -> PDF 
[14-02-26 19:56:16:450 EST] Loaded: null 

如果我改變的getURL到它的getName(有點)的作品

[14-02-26 20:10:20:588 EST] Loading URL: Work/PDF/ 
[14-02-26 20:10:20:589 EST] -> Work 
[14-02-26 20:10:20:727 EST] -> PDF 
[14-02-26 20:10:21:058 EST] Loaded: Test 
+0

同樣的問題http://stackoverflow.com/questions/22055396/has-driveapp-folder-geturl-changed-or-broken – DavidF

回答

0
var url = DocsList.getFileById(fileId).getUrl(); 

被zig發佈的問題線程上的海報推薦爲解決方法。

所以,你的情況,你會使用:

for (; files.hasNext(); found++) { 
    file = files.next(); 
    } 

    if (found == 1) { 
    ///////////////////////////////// 
    // Here is 'getUrl' 
    ///////////////////////////////// 
    var fileId = file.getId();//new line added to getId of the file 

    //modified url line to reference doc by id 
    var url = DocsList.getFileById(fileId).getUrl(); 

    Logger.log("Loaded: " + url); 
    return url; 
    } else { 
    throw "Error loading file"; 
    } 

我沒有現在來測試這個權利,因爲它是晚,我必須建立一個合理的結構正確測試,但既然你已經有結構改變這兩條評論線,讓我知道如果工作。

0

使用id代替url的作品:

var url = "https://docs.google.com/document/d/" + file.getId() + "/"; 
+1

這隻適用於某些文檔類型。 –

0

今天開始與驅動器getUrl的問題,谷歌是意識到它,並在其上工作。 是否使用docList或驅動高級服務。

+0

請參閱http://code.google.com/p/google-apps-script-issues/issues/detail?id=3713 –