【发布时间】:2016-02-26 01:22:11
【问题描述】:
我正在尝试复制到步骤 https://ctrlq.org/code/19854-list-files-in-google-drive-folder
它成功地为工作表中的列制作了标题,但它没有获取/打印行中的任何数据。我哪里做错了?
这就是我所拥有的:
/* Code written by @hubgit
https://gist.github.com/hubgit/3755293
Updated since DocsList is deprecated
*/
function listFilesInFolder(folderName) {
var folder = DriveApp.getFoldersByName(folderName).next();
var contents = folder.getFiles();
var file, data, sheet = SpreadsheetApp.getActiveSheet();
sheet.clear();
sheet.appendRow(["Name", "Date", "Size", "URL", "Download", "Description", "Type"]);
for (var i = 0; i < contents.length; i++) {
file = contents[i];
if (file.getFileType() == "SPREADSHEET") {
continue;
}
data = [
file.getName(),
file.getDateCreated(),
file.getSize(),
file.getUrl(),
"https://docs.google.com/uc?export=download&confirm=no_antivirus&id=" + file.getId(),
file.getDescription(),
file.getFileType().toString()
];
sheet.appendRow(data);
}
};
【问题讨论】:
-
您需要调试代码。
folderName是否被listFilesInFolder函数接收?在函数的最顶部添加这行代码:Logger.log('folderName: ' + folderName);。运行代码,然后在 VIEW 菜单中选择 LOGS。日志中是否打印了正确的文件夹名称? -
谢谢@SandyGood。使用您添加的部分运行它时,我刚刚收到这个新错误。无法检索下一个对象:迭代器已到达末尾。 (第 8 行,...
-
每次我尝试寻找新的解决方案时,都会出现新的错误。如果你使用 docList,它就会被贬值。如果我将任何脚本与 while(contents.hasNext()) { 一起使用,则会产生服务器错误。甚至谷歌参考的教程也已经过时了。 ;(
-
我假设你从这一行得到错误:
var folder = DriveApp.getFoldersByName(folderName).next();从末尾删除next(),这样你就只有:var folder = DriveApp.getFoldersByName(folderName);然后在修改后的行之后添加Logger.log('folder: ' + folder);。检查日志。它应该显示一个文件夹迭代器或一个对象。如果没有找到具有该名称的文件夹,则next()将不起作用。没有“下一个”文件夹。 -
要测试代码,您可以“硬编码”
folder的值: 添加一行:var folder = "my Folder Name Here";您也可以运行调试器。选择错误图标右侧下拉列表中的函数名称,单击第 10 行,以便在左侧的行号上显示一个红点。然后单击错误的图标。所有变量值及其值都将显示在窗口底部。然后,您可以通过单击大方块右侧的图标一次执行每一行。
标签: google-apps-script google-sheets google-drive-api