我正在寻找一种方法来列出特定google驱动器文件夹中的所有文件,这些文件也会自动更新列表,让每个人都可以查看。我发现有相当数量的文章会创建一个电子表格来列出它们,但它们不会自行更新。我只能理解我试图修改其他一些代码的JavaScript,但无济于事。这就是我所做的。
我创建了Google 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>
我试图首先列出文件名,但它从未奏效,我无法弄清楚错误是什么。如果你能指出我哪个部分是错的以及我必须做什么,我非常感谢你的帮助。如果还有其他更好的方法(不仅是谷歌应用程序脚本,还有其他显示文件列表的方式),这些方式符合以下条件,我非常感谢。
答案 0 :(得分: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());
};
在此之后,你如何展示它将取决于你。
答案 1 :(得分:0)
如上所述,您的doGet
为Web浏览器提供了一个HTML页面,其中嵌入了一些JS代码,浏览器将尝试执行该代码。并且失败,因为网络浏览器不知道DriveApp
;它可以运行JavaScript,而不是Apps脚本。
doGet
可以execute Apps Script code in scriplets嵌入在由folder.getFiles()
提供的页面中,但语法需要一段时间才能习惯。
对于像你这样的简单页面,我只想在doGet函数中创建所有HTML,并提供服务。看看我的例子。
您的代码还有一个问题: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);
}
返回file iterator,而不是数组。这是您使用hasNext和next方法循环的内容,如下所示。
let
这将使用目录的当前快照提供静态HTML文件。如果用户重新加载,他们将获得一个可能更新鲜的副本。如果目录内容被更改,文件将不会自行更新;我觉得这个平台上甚至不可能。使用运行Apps脚本代码的scriplet,可以尝试定期更新,但这似乎不太实际:为什么要浪费你的Apps脚本执行时间配额打开你的网页并去散步的用户?