Jon*_*ton 5 javascript google-apps-script google-drive-api
我有一个超过2000个文件夹的文件夹..而且我需要在谷歌电子表格上列出所有这些文件..我在网上发现了一些脚本..但它们并没有完全正常工作.当我点击"RUN"时,我只得到250个文件列表.
在Google Developers页面上阅读我发现了一些关于启用Google Drive高级服务的事情(我做到了)..而且我认为我可以使用名为"令牌"的东西来解决这个问题?
我不知道..我不是程序员,我几乎不懂英语..我试过编辑这个脚本融合我在网上找到的东西..但是任何东西都有效......我只是得到错误,我不能甚至明白..
那么..有人能够解决它吗?
function listFilesInFolder() {
var folder = DocsList.getFolder("Film");
var contents = folder.getFiles();
var file;
var data;
var sheet = SpreadsheetApp.getActiveSheet();
sheet.clear();
sheet.appendRow(["Nome", "Data", "Dimensione"]);
for (var i = 0; i < contents.length; i++) {
file = contents[i];
if (file.getFileType() == "SPREADSHEET") {
continue;
}
data = [
file.getName(),
file.getDateCreated(),
file.getSize(),
];
sheet.appendRow(data);
}
};
Run Code Online (Sandbox Code Playgroud)
此脚本适用于至少2200个文件:)
function listFilesInFolder(id) {
var folder = DriveApp.getFolderById('MyFolderID');
var contents = folder.getFiles();
var file;
var name;
var sheet = SpreadsheetApp.getActiveSheet();
var date;
var size;
sheet.clear();
sheet.appendRow(["Nome", "Data", "Dimensione"]);
while(contents.hasNext()) {
file = contents.next();
name = file.getName();
date = file.getDateCreated()
size = file.getSize()
data = [name, date, size]
sheet.appendRow(data);
}
};
Run Code Online (Sandbox Code Playgroud)
分页就是您正在寻找的。当您有大量结果(例如 2000 个文件)时,您通常将请求划分为“页面”,要么逐页向用户显示,要么在这种情况下保持在 API 限制之内。
“令牌”并不是什么大问题......这只是您的脚本在处理当前页面时记住页码的方式。
因此,这里有关于此的信息:https://developers.google.com/apps-script/reference/docs-list/files-result
页面顶部的脚本非常适合您的情况。你的脚本变得像......
function listFilesInFolder() {
var folder = DocsList.getFolder("Film");
//var contents = folder.getFiles();
var file;
//var data;
var sheet = SpreadsheetApp.getActiveSheet();
sheet.clear();
sheet.appendRow(["Nome", "Data", "Dimensione"]);
var pageSize = 200;
var files = null;
var token = null; // use a null token for the first lookup
do {
var result = DocsList.getAllFilesForPaging(pageSize, token);
files = result.getFiles();
token = result.getToken();
for (var i = 0; i < files.length; i++) {
//Logger.log(files[i].getName());
file = files[i];
if (file.getFileType() == "SPREADSHEET") {
continue;
}
data = [
file.getName(),
file.getDateCreated(),
file.getSize(),
];
sheet.appendRow(data);
}
} while (files.length >= pageSize);
};
Run Code Online (Sandbox Code Playgroud)
我不保证这会起作用..但我相信你可以解决它。基本上,该页面上的“while 循环”替换了脚本中的“for 循环”。该页面上的循环仅调用 Logger.log(),因此您可以将其与sheet.appendRow(data) 交换
| 归档时间: |
|
| 查看次数: |
8353 次 |
| 最近记录: |