列出网页上给定文件夹中的 Google 个云端硬盘文件
List Google Drive files from a given folder on a webpage
我正在寻找一种方法来列出特定 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>
我试图首先只列出文件名,但它从来没有用过,我也不知道出了什么问题。如果你能指出哪一部分是错误的以及我必须做什么,我将非常感谢你的帮助。如果有任何其他更好的方式(不仅是 google-apps-script,还有其他显示文件列表的方式)适合以下条件,我将非常感激。
- 列出 google 驱动器中的文件名
- 拥有 link 的任何人都可以查看列表
- 列表自动更新(无论是定期更新还是在发生任何更改时)
正如所写,您的 doGet
为网络浏览器提供了一个 HTML 页面,其中嵌入了一些 JS 代码,浏览器将尝试执行这些代码。失败了,因为网络浏览器不知道 DriveApp
;它可以 运行 JavaScript,而不是 Apps 脚本。
可以 execute Apps Script code in scriplets 嵌入到 doGet
提供的页面中,但语法 make 需要一段时间才能习惯。
对于像您这样的简单页面,我会在 doGet 函数中创建所有 HTML,然后提供。看我的例子。
您的代码还有一个问题:folder.getFiles()
returns 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 文件。如果用户重新加载,他们将获得可能更新的副本。如果目录内容更改,文件不会自行更新;我认为这在这个平台上什至不可能。使用 scriplet 运行ning Apps Script 代码,可以尝试定期更新,但这似乎不太实际:为什么要将 Apps Script 执行时间配额浪费在打开您的网页并出去走走的用户身上?
getFiles()
will return a FileIterator
,可能没有.length
属性。将循环更改为 while 循环并检查迭代器 hasNext
是否为 true
,这样它就会迭代。另外,尝试更改将项目推入数组的方式。查看修改后的代码段,希望这有效。
while (contents.hasNext()){
file = contents.next();
name.push(file.getName());
date.push(file.getDateCreated());
desc.push(file.getDescription());
};
之后会发生什么,如何显示将由您决定。
我正在寻找一种方法来列出特定 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>
我试图首先只列出文件名,但它从来没有用过,我也不知道出了什么问题。如果你能指出哪一部分是错误的以及我必须做什么,我将非常感谢你的帮助。如果有任何其他更好的方式(不仅是 google-apps-script,还有其他显示文件列表的方式)适合以下条件,我将非常感激。
- 列出 google 驱动器中的文件名
- 拥有 link 的任何人都可以查看列表
- 列表自动更新(无论是定期更新还是在发生任何更改时)
正如所写,您的 doGet
为网络浏览器提供了一个 HTML 页面,其中嵌入了一些 JS 代码,浏览器将尝试执行这些代码。失败了,因为网络浏览器不知道 DriveApp
;它可以 运行 JavaScript,而不是 Apps 脚本。
可以 execute Apps Script code in scriplets 嵌入到 doGet
提供的页面中,但语法 make 需要一段时间才能习惯。
对于像您这样的简单页面,我会在 doGet 函数中创建所有 HTML,然后提供。看我的例子。
您的代码还有一个问题:folder.getFiles()
returns 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 文件。如果用户重新加载,他们将获得可能更新的副本。如果目录内容更改,文件不会自行更新;我认为这在这个平台上什至不可能。使用 scriplet 运行ning Apps Script 代码,可以尝试定期更新,但这似乎不太实际:为什么要将 Apps Script 执行时间配额浪费在打开您的网页并出去走走的用户身上?
getFiles()
will return a FileIterator
,可能没有.length
属性。将循环更改为 while 循环并检查迭代器 hasNext
是否为 true
,这样它就会迭代。另外,尝试更改将项目推入数组的方式。查看修改后的代码段,希望这有效。
while (contents.hasNext()){
file = contents.next();
name.push(file.getName());
date.push(file.getDateCreated());
desc.push(file.getDescription());
};
之后会发生什么,如何显示将由您决定。