google-apps-script - 使用 Google Apps 脚本从 google drive 文件夹中获取 Google 表格中列出的文件夹和文件
问题描述
我有一个谷歌表,用户可以在其中剪切和粘贴谷歌驱动器文件夹 URL,它将提取文件夹 ID。这是在命名范围“FolderID”中提取的。
然后,我想将文件夹中的文件夹和文件(如果可能的话,也包括子文件夹和文件)列出到工作表“文件”中。
我已经玩过我写的另一个脚本,但是在初始文件夹列表中出现错误(我还没有进入文件列表)。
我收到此错误:异常:在对象 DriveApp 上获取方法或属性 getFolderById 时出现意外错误。
当前脚本是:
function listFoldersAndFilesInAFolder() {
var ss = SpreadsheetApp.getActive();
var sh = ss.getSheetByName('Files');
var foldername = ss.getRangeByName('FolderID');
sh.clearContents();
sh.appendRow(["Name", "Link"]);
var fA = [];
var folders = DriveApp.getFolderById(foldername).getFolders();//Enter folder id
while (folders.hasNext()) {
var folder = folders.next();
var folderURLstart = "https://drive.google.com/drive/folders/"
fA.push([folder.getName(), folderURLstart + folder.getId()]);
}
sh.getRange(sh.getLastRow() + 1, 1, fA.length, 2).setValues(fA);
sh.getRange(2, 1, sh.getLastRow() - 1, 2).sort({ column: 1, ascending: true });
}
谁能帮忙:
- 修复上面的脚本,以便我可以列出文件夹。
- 指导我向列表文件、子文件夹和文件添加什么?
解决方案
要添加文件、子文件夹和文件的列表,请使用
function listFilesAndFolders() {
var folderid = '18akqHAN7PSPMnG3h5HpCskQsMCv4TqCM'; // change FolderID
var sh = SpreadsheetApp.getActiveSheet();
sh.clear();
sh.appendRow(["parent","folder", "name", "update", "size", "URL", "ID", "description", "type"]);
try {
var parentFolder =DriveApp.getFolderById(folderid);
listFiles(parentFolder,parentFolder.getName())
listSubFolders(parentFolder,parentFolder.getName());
} catch (e) {
Logger.log(e.toString());
}
}
function listSubFolders(parentFolder,parent) {
var childFolders = parentFolder.getFolders();
while (childFolders.hasNext()) {
var childFolder = childFolders.next();
Logger.log("Fold : " + childFolder.getName());
listFiles(childFolder,parent)
listSubFolders(childFolder,parent + "|" + childFolder.getName());
}
}
function listFiles(fold,parent){
var sh = SpreadsheetApp.getActiveSheet();
var data = [];
var files = fold.getFiles();
while (files.hasNext()) {
var file = files.next();
data = [
parent,
fold.getName(),
file.getName(),
file.getLastUpdated(),
file.getSize(),
file.getUrl(),
file.getId(),
file.getDescription(),
file.getMimeType()
];
sh.appendRow(data);
}
}
https://docs.google.com/spreadsheets/d/13fHMrWR9OOWa045uJbkz67YoVkOG4Pg6ScvrRpE-WBc/copy
推荐阅读
- symfony - 按同一表的相关实体进行的 Doctrine 查询扩展过滤器
- matrix - 如何应用变换矩阵将像素坐标投影到距离未知的 3D 空间中的 2d 层,其中包含单个相机的图像
- database - 死锁发生在 2 个阶段锁定
- python - Pandas 将具有相同列值的行分组并将函数应用于第一行,然后将结果分配给左侧行
- javascript - VueJS 将表行从 JSON 数据转置为列
- reactjs - TypeError:无法读取未定义的属性(读取“类型”)
- web3 - web3 sendTransaction 在 ubuntu 上导致高 cpu 负载,而不是在 windows 上
- networking - 检查端口 53 上的机器可达性
- arrays - 使用年份存档的所有链接创建一个数组(自定义帖子类型)
- python - 如何使用python map函数在Qtablewidget中设置项目