2016-03-14 80 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()); 

}; 

在此之后,你如何显示它取决于你。

相关问题