【发布时间】:2017-07-12 11:09:23
【问题描述】:
我要做什么?
我正在尝试将我的 Google Drive 上的子文件夹“Annual Reports”中的所有文件列出到我的 Google 电子表格中但是
我的谷歌驱动器上有大量文件夹和子文件夹
当我尝试运行代码以获取所有文件夹和文件的列表时,导致错误“超过最大执行时间”
我的google drive文件夹的结构是
- My Drive
- Subfolder 1: Documents by country or issue
- Subfolder2 :Albania
- Subfolder3 :Annual Reports >files
- Subfolder2 : Bulgaria
- Subfolder3 : Annual Reports >files
等等..每个国家
所以,我设法将我的子文件夹“按国家或问题划分的文档”设置为根文件夹并获取“年度报告”文件夹的 ID 列表
在这个脚本代码中
var sheet = SpreadsheetApp.getActiveSheet();
function generateFolderTree() {
sheet.clear();
sheet.appendRow(["Folder Name", "Rootfolder name", "ID"]);
var parent = DriveApp.getFoldersByName("Documents by country or issue").next();
getChildFolders(parent);
}
function getChildFolders(parent) {
var childFolders = parent.getFolders();
var parentName = parent.getName();
while (childFolders.hasNext()) {
var childFolder = childFolders.next();
fileName = childFolder.getName();
root = parentName + "/" + fileName;
fileID = childFolder.getId();
if (fileName == "Annual Reports") {
sheet.appendRow([fileName, root, fileID]);
} else if (fileName == "_Annual Reports") {
sheet.appendRow([fileName, root, fileID]);
}
它有效,我在我的工作表上得到了这样的结果(无法上传图片,不知道为什么)
A栏|| B栏|| C列
文件夹名称 ||根文件夹名称 ||身份证
年度报告 ||哥伦比亚/年度报告||
0Bz02kQQ7_a6paTM1SmdpZ01HYjQ_年度报告||斯洛伐克 (SK)/_年度报告 ||0BwW8rsOAeCzneUlDUk1pcGNlVU0
年度报告 ||瑞士 (CH)/年度报告 ||0Bz02kQQ7_a6pZTJsWDR0elJTaDQ
所以我想知道***如何编写脚本来为每个国家/地区创建新工作表和
从我在电子表格中获得的文件夹 ID 中获取文件夹内的文件列表(例如从范围中获取值——C 列)。
或者有没有推荐的方法让这更容易?
谢谢。
【问题讨论】:
-
您应该使用getFiles() method from class Folder,它将“获取当前文件夹的所有子文件的集合。”。
-
为了简化此任务,您可以使用 1) 继续令牌来记住文件迭代器的状态 2) PropertiesService 用于缓存和检索您的继续令牌 3) 用于调度函数调用的触发器。跟踪时间以确保不超过最大执行时间。此外,您可以递归地获取所有子文件夹和文件。如果你有兴趣,我会分享代码示例
-
@AntonDementiev 当然,我对所有方法都感兴趣
-
@AntonDementiev 我还在等你的代码示例...
标签: google-apps-script google-sheets