Javascript 列出网页上给定文件夹中的Google驱动器文件

Javascript 列出网页上给定文件夹中的Google驱动器文件,javascript,google-apps-script,google-drive-api,Javascript,Google Apps Script,Google Drive Api,我正在寻找一种方法来列出特定谷歌驱动器文件夹中的所有文件,也可以自动更新列表,让每个人都可以查看。我发现有相当多的文章创建了一个电子表格来列出它们,但它们不会自我更新。我只是能理解一些JavaScript代码,我试图修改一些其他代码,但没有效果。这就是我所做的 我创建了一个GoogleApps脚本文件 function doGet(e){ return HtmlService.createHtmlOutputFromFile('list.html');} 和内部list.html <!D

我正在寻找一种方法来列出特定谷歌驱动器文件夹中的所有文件,也可以自动更新列表,让每个人都可以查看。我发现有相当多的文章创建了一个电子表格来列出它们,但它们不会自我更新。我只是能理解一些JavaScript代码,我试图修改一些其他代码,但没有效果。这就是我所做的

我创建了一个GoogleApps脚本文件

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>

var dir=“SpinFest2016 KPDS剪辑”
函数listFilesInFolder(dir){
var folder=DriveApp.getFoldersByName(dir).next();
var contents=folder.getFiles();
var文件;
变量名称=[];
var日期=[];
var desc=[];
对于(变量i=0;i

document.getElementById(“名称”).innerHTML=name;
我试着先列出文件名,但从来没有成功过,我也不知道出了什么问题。如果你能告诉我哪一部分错了,我必须做什么,我将非常感谢你的帮助。如果有其他更好的方法(不仅是谷歌应用程序脚本,还有其他显示文件列表的方法)符合以下条件,我将非常感谢

  • 列出google drive中的文件名
  • 任何有链接的人都可以查看该列表
  • 列表自动更新(无论是定期更新还是发生任何更改)

如前所述,您的
doGet
为web浏览器提供了一个HTML页面,其中嵌入了一些JS代码,浏览器将尝试执行这些代码。并且失败,因为web浏览器不知道DriveApp;它可以运行JavaScript,而不是应用程序脚本

可以嵌入到由
doGet
提供服务的页面中,但语法会让您花一些时间来适应

对于像您这样的简单页面,我只需要在doGet函数中创建所有HTML,并提供服务。看我的例子

您的代码还有一个问题:
folder.getFiles()
返回数组,而不是数组。这是您使用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);
}
函数doGet(e){
变量模板='nameDateDescriptionAPPS_脚本_内容';
var dir='SpinFest2016 KPDS Clips';
var folder=DriveApp.getFoldersByName(dir).next();
var contents=folder.getFiles();
var文件,名称,日期,描述,列表=[];
while(contents.hasNext()){
file=contents.next();
name=file.getName();
日期=file.getDateCreated();
desc=file.getDescription();
列表推送(“”+名称+“”+日期+“”+描述+“”);
}
var output=HtmlService.createHtmlOutput(template.replace('APPS\u SCRIPT\u CONTENT',list.join(“”));
返回output.setTitle('Directory List').setSandboxMode(HtmlService.SandboxMode.IFRAME);
}
这将提供一个包含目录当前快照的静态HTML文件。如果用户重新加载,他们将获得可能更新鲜的副本。如果目录内容发生更改,文件将不会自行更新;我认为在这个平台上这根本不可能。使用scriplet运行应用程序脚本代码,可以尝试定期更新,但这似乎不太实际:为什么要将应用程序脚本执行时间配额浪费在打开网页并出去散步的用户身上?

将返回一个,它可能没有
.length
属性。将循环更改为while循环,并检查迭代器
hasNext
是否为
true
,这样它将进行迭代。另外,尝试更改将项目推入阵列的方式。请参阅修改后的代码段,希望它能起作用

while (contents.hasNext()){

    file = contents.next();

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

};
这之后会发生什么,如何显示它将取决于您