我收到了错误'" DocsList"没有定义。'我的脚本工作正常,直到' DocsList'被禁用了。我在网上找到了解决这个问题的可能方案,并发现我必须更改“DocsList'到' DriveApp'为了我的脚本工作。但是,没有信息被弹出。我不知道出了什么问题。有什么帮助吗?
原始版本:
function ShowFilesInFolder() {
var files = DocsList.getFolderById(id).getFolders();
// Get the active spreadsheet and the active sheet
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getActiveSheet();
// Set up the spreadsheet to display the results
var headers = [["Folder Name", "Owner", "URL"]];
sheet.clear();
sheet.getRange("A1:C1").setValues(headers);
// Loop through the results and display the file name, file type, and URL
for (var i = 0; i < files.length; i++) {
sheet.getRange(i+2, 1, 1, 1).setValue(files[i].getName());
sheet.getRange(i+2, 2, 1, 1).setValue(files[i].getOwner());
sheet.getRange(i+2, 3, 1, 1).setValue('https://drive.google.com/?tab=mo&authuser=0#folders/' + files[i].getId());
}
}
修订版:
function ShowFilesInFolder() {
var folder = DriveApp.getFoldersByName(name);
var files = DriveApp.getFolders();
// Get the active spreadsheet and the active sheet
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getActiveSheet();
// Set up the spreadsheet to display the results
var headers = [["Folder Name", "Owner", "URL"]];
sheet.clear();
sheet.getRange("A1:C1").setValues(headers);
// Loop through the results and display the file name, file type, and URL
for (var i = 0; i < files.length; i++) {
sheet.getRange(i+2, 1, 1, 1).setValue(files[i].getName());
sheet.getRange(i+2, 2, 1, 1).setValue(files[i].getOwner());
sheet.getRange(i+2, 3, 1, 1).setValue('https://drive.google.com/drive/u/0/my-drive' + files[i].getId());
}
}
答案 0 :(得分:0)
DriveApp.getFolders();
不会返回一个数组,而是一个名为Folder Iterator的GAS类,文档很短但只需要你。
您的代码效率非常低,请花点时间阅读Best Practices,了解如何拨打一个电话来编写所有值。
答案 1 :(得分:0)
DocsList已被弃用,您应该将其替换为:
var files = DriveApp.getFilesByName([FILENAME]);
while (files.hasNext()) {
var data = files.next().getBlob().getDataAsString()
}
或
var folder = DriveApp.getFolderById(id).getFolders();
while (folder.hasNext()) {
var x = folder.next()....
}
...你已经得到了照片,祝你好运
答案 2 :(得分:0)
你没有从DriveApp .getFolders()获得一个数组,而是一个迭代器。只要仍有内容要处理,就可以快速将其映射到while
循环内的数组或对象。
while (folders.hasNext()) {
folder = folders.next();
// do stuff with folder
}
将此文件夹与处理文件夹列表放在一个二维数组中,以便更有效地使用SpreadsheetApp,这可能会导致对您的代码进行以下修订。
function ShowSubfolders(name) {
var parentFolder = DriveApp.getFoldersByName(name),
folders = DriveApp.getFolders(),
foldersArray = [],
folder,
ss = SpreadsheetApp.getActiveSpreadsheet(),
sheet = ss.getActiveSheet(),
headers = [["Folder Name", "Owner", "URL"]],
values = [];
while (folders.hasNext()) {
folder = folders.next();
foldersArray.push({name: folder.getName(), owner: folder.getOwner(), id: folder.getId(), url: folder.getUrl()});
}
// map folderArray to sheet format
values = headers.concat(folderArray.map(function(f) { return [f.name, f.owner, f.id, f.url]; }));
sheet.clear();
sheet.getRange(1,1,folderValues.length + 1, 4).setValues(values);
}
请注意,Google云端硬盘中的文件夹不一定与您习惯的一样,因为所有内容都是参考/别名,同一个文件夹可以同时在多个位置有效,即使您要查找的其他数据也是如此保持不变。