简化此代码?从文件夹及其子文件夹中获取所有文件-当前代码正在超时

时间:2018-07-17 02:55:37

标签: google-apps-script google-sheets

我有一个驱动器文件夹,一个父文件夹中有大约1500个Google幻灯片,还有多个子文件夹。我一直在使用此脚本,但由于超时(我们的文件夹已大大增加)而停止工作。有什么简单的方法可以解决此问题吗?我需要链接到所有这些文件(及其文件名)的链接到Google表格的“一个”标签上。

这是我当前的脚本(从网上某个地方获取并进行了一些修改;我对编写代码的经验不是很强/培训过)。

var folderId = '1TO3e8ilnqNuxBcvTw8D_3RsDxDzMwvX7';
// Main function 1: List all folders, & write into the current sheet.
function listFolders() {
  getFolderTree(folderId, false);
}
// Main function 2: List all files & folders, & write into the current sheet.
function listAll() {
  getFolderTree(folderId, true);
}

// =================
// Get Folder Tree.
function getFolderTree(folderId, listAll) {
  try {
    // Get folder by id.
    var parentFolder = DriveApp.getFolderById(folderId);

    // Initialise the sheet.
    var file, data, sheet = SpreadsheetApp.getActiveSheet();
    sheet.clear();
    // Get files and folders
    getChildFolders(parentFolder.getName(), parentFolder, data, sheet, listAll);
  } catch (e) {
    Logger.log(e.toString());
  }
}
// Get the list of files and folders and their metadata in recursive mode.
function getChildFolders(parentName, parent, data, sheet, listAll) {
  var childFolders = parent.getFolders();
  // List folders inside the folder.
  while (childFolders.hasNext()) {
    var childFolder = childFolders.next();
    // Logger.log("Folder Name: " + childFolder.getName());
    data = [
      parentName + "/" + childFolder.getName(),
      childFolder.getName(),
    ];

    // List files inside the folder.
    var files = childFolder.getFiles();
    while (listAll & files.hasNext()) {
      var childFile = files.next();
      // Logger.log("File Name: " + childFile.getName());
      data = [
        childFile.getUrl(),
        childFile.getName(),
      ];
      // Write
      sheet.appendRow(data);
    }
    // Recursive call of the subfolder
    getChildFolders(parentName + "/" + childFolder.getName(), childFolder, data, sheet, listAll);
  }
}

0 个答案:

没有答案