recherche

Maison  >  Questions et réponses  >  le corps du texte

Comment puis-je optimiser mon script pour respecter la limite de temps de Google Apps Script de 6 minutes ?

En tant que débutant, j'ai écrit un script pour remplir tous mes dossiers Google Drive dans Google Sheets. Même si le script fonctionne, je tombe sur 错误:超过最大执行时间 et la liste des résultats de mon dossier n'est pas encore complète.

Je n'arrive pas à comprendre comment gérer/corriger les délais d'attente d'exécution. J'ai recherché plusieurs sources mais je n'ai rien trouvé qui puisse m'aider à accélérer mon script.

Je m'attends à ce que le script s'exécute très rapidement et que la liste des milliers de dossiers "éventuellement" soit remplie en 1 minute maximum.

Script GAS

function generateFolderList() {
  var rootFolder = DriveApp.getRootFolder();
  var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
  var sheetName = Utilities.formatDate(new Date(), "GMT+1", "yyyy-MM-dd HH:mm:ss");
  var newSheet = spreadsheet.insertSheet(sheetName);
  newSheet.getRange("A1:N1").setValues([["structure_level", "parent_folder", "folder_name", "folder_description", "folder_id", "folder_url", "owner_email", "sharing_access", "sharing_permissions", "mime_type", "starred_status", "trashed_status", "date_created", "last_updated"]]);
  listFolders(rootFolder, "", newSheet, 1);
}

function listFolders(folder, parentName, sheet, level) {
  var folderName = folder.getName();
  var description = folder.getDescription();
  var folderId = folder.getId();
  var url = folder.getUrl();
  var owner = folder.getOwner().getEmail();
  var sharingAccess = folder.getSharingAccess();
  var sharingPermission = folder.getSharingPermission();
  var mimeType = "folder";
  var starred = folder.isStarred();
  var trashed = folder.isTrashed();
  var dateCreated = folder.getDateCreated();
  var lastUpdated = folder.getLastUpdated();
  
  var rowData = [level, parentName, folderName, description, folderId, url, owner, sharingAccess, sharingPermission, mimeType, starred, trashed, dateCreated, lastUpdated];
  sheet.appendRow(rowData);
  
  var subFolders = folder.getFolders();
  level++;
  while (subFolders.hasNext()) {
    var subFolder = subFolders.next();
    listFolders(subFolder, folderName, sheet, level);
  }
}

Google Sheets avec Apps Script est ici.

P粉579008412P粉579008412491 Il y a quelques jours681

répondre à tous(1)je répondrai

  • P粉775788723

    P粉7757887232023-09-08 00:48:56

    Votre script d'application écrit dans la feuille de calcul à mesure que chaque dossier ou sous-dossier apparaît. Au lieu de cela, vous devez collecter les informations dans un tableau, puis écrire l'intégralité du tableau dans une feuille de calcul. Essayez ceci, même si au départ certaines des valeurs des cellules sont des objets plutôt que des chaînes, cela ne fonctionnera donc pas tant que vous n'aurez pas décidé quelle propriété de ces objets vous souhaitez capturer. Je viens d'utiliser toString().

    function generateFolderList() {
      var rootFolder = DriveApp.getRootFolder();
      var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
      var sheetName = Utilities.formatDate(new Date(), "GMT+1", "yyyy-MM-dd HH:mm:ss");
      var newSheet = spreadsheet.insertSheet(sheetName);
      // 注意我创建了一个名为folders的数组,并将其传递给listFolders,而不是newSheet
      let folders = [["structure_level", "parent_folder", "folder_name", "folder_description", "folder_id", "folder_url", "owner_email", "sharing_access", "sharing_permissions", "mime_type", "starred_status", "trashed_status", "date_created", "last_updated"]];
      listFolders(rootFolder, "", folders, 1);
      // 完成后复制到电子表格
      newSheet.getRange(1,1,folders.length,folders[0].length.setValues(folders);
    }
    
    function listFolders(folder, parentName, folders, level) {
      var folderName = folder.getName();
      var description = folder.getDescription();
      var folderId = folder.getId();
      var url = folder.getUrl();
      var owner = folder.getOwner().getEmail();
      var sharingAccess = folder.getSharingAccess().toString();
      var sharingPermission = folder.getSharingPermission().toString();
      var mimeType = "folder";
      var starred = folder.isStarred();
      var trashed = folder.isTrashed();
      var dateCreated = folder.getDateCreated();
      var lastUpdated = folder.getLastUpdated();
      
      folders.push([level, parentName, folderName, description, folderId, url, owner, sharingAccess, sharingPermission, mimeType, starred, trashed, dateCreated, lastUpdated]);
      
      var subFolders = folder.getFolders();
      level++;
      while (subFolders.hasNext()) {
        var subFolder = subFolders.next();
        listFolders(subFolder, folderName, folders, level);
      }
    }

    Références

    répondre
    0
  • Annulerrépondre