2016-03-14 79 views
1

我正在尋找一種方式來列出特定谷歌驅動器文件夾中的所有文件,並且它會自動更新列表,並讓所有人都可以查看。我發現了大量的文章,它們會創建一個電子表格來列出它們,但它們不會自行更新。我只是可以理解一點JavaScript的我試圖修改其他代碼無濟於事。這是我所做的。從網頁上的給定文件夾列出Google Drive文件

我創建了一個谷歌Apps腳本文件

function doGet(e){ 
return HtmlService.createHtmlOutputFromFile('list.html');} 

和內部list.html

<!DOCTYPE html> 
<html> 
    <head> 
    <script type="text/javascript"> 
    var dir = "SpinFest2016 KPDS Clips" 

    function listFilesInFolder(dir) { 

     var folder = DriveApp.getFoldersByName(dir).next(); 
     var contents = folder.getFiles(); 
     var file; 
     var name = []; 
     var date = []; 
     var desc = []; 

     for (var i = 0; i < contents.length; i++) { 

     file = contents[i]; 

     name[i] = file.getName(); 
     date[i] = file.getDateCreated(); 
     desc[i] = file.getDescription(); 

     }; 
    }; 
    </script> 
    </head> 
     <table style ="width: 100%"> 
     <tr> 
      <th>이름</th> 
      <th>제출일</th> 
      <th>비고</th> 
     <tr> 
      <td><p id="name"></p></td> 
      <td><p id="date"></p></td> 
      <td><p id="desc"></p></td> 
     </tr> 
     <script type="text/javascript"> 
      document.getElementById("name").innerHTML = name; 
     </script> 

     </table> 
    </body> 
</html> 

我想第一隻列出文件名,但它從來沒有工作過,我無法弄清楚什麼是錯的。如果你能指出哪一部分是錯的,我必須做什麼,我非常感謝你的幫助。如果還有其他更好的方式(不僅僅是google-apps-script,還有其他顯示文件列表的方式)符合以下條件,我會非常感謝。

  • 列表文件中的谷歌名駕駛
  • 任何人只要有鏈接可以查看列表
  • 列表更新自動(無論是定期或任何改變發生)

回答

0

書面,你doGet給人以Web瀏覽器是一個嵌入了一些JS代碼的HTML頁面,瀏覽器將嘗試執行它。並失敗,因爲網頁瀏覽器不知道DriveApp;它可以運行JavaScript,而不是Apps腳本。

嵌入在由doGet服務的頁面中的execute Apps Script code in scriplets是可能的,但是語法make需要一段時間才能習慣。

對於像你這樣的簡單頁面,我只需在doGet函數中創建所有的HTML,並提供它。看我的例子。

還有一個問題與您的代碼:folder.getFiles()返回一個file iterator,而不是一個數組。這是你使用hasNext和next方法循環的東西,如下所示。

function doGet(e) { 
    var template = '<table style ="width: 100%"><tr><th>name</th><th>Date</th><th>Description</th></tr>APPS_SCRIPT_CONTENT</table>'; 
    var dir = 'SpinFest2016 KPDS Clips'; 
    var folder = DriveApp.getFoldersByName(dir).next(); 
    var contents = folder.getFiles(); 
    var file, name, date, desc, list = []; 
    while (contents.hasNext()) { 
    file = contents.next(); 
    name = file.getName(); 
    date = file.getDateCreated(); 
    desc = file.getDescription(); 
    list.push('<tr><td>' + name + '</td><td>' + date + '</td><td>' + desc + '</td></tr>'); 
    } 
    var output = HtmlService.createHtmlOutput(template.replace('APPS_SCRIPT_CONTENT', list.join(''))); 
    return output.setTitle('Directory List').setSandboxMode(HtmlService.SandboxMode.IFRAME); 
} 

這將提供一個包含目錄當前快照的靜態HTML文件。如果用戶重新加載,他們將得到一個可能更新鮮的副本。如果目錄內容改變,文件將不會自行更新;我認爲這個平臺上甚至沒有這種可能。使用運行Apps腳本代碼的腳本,人們可以嘗試定期更新,但這似乎不太實際:爲什麼浪費您的Apps腳本執行時間配額給打開網頁並散步的用戶?

1

getFiles()將返回FileIterator,它可能沒有.length屬性。將循環更改爲while循環,並檢查迭代器hasNext是否爲true,這樣它將迭代。此外,請嘗試更改將項目推入數組的方式。看到修改後的代碼片段,希望這可以工作。

while (contents.hasNext()){ 

    file = contents.next(); 

    name.push(file.getName()); 
    date.push(file.getDateCreated()); 
    desc.push(file.getDescription()); 

}; 

在此之後,你如何顯示它取決於你。

相關問題