Why cannot Object FolderIterator find function getId?

谁说我不能喝 提交于 2019-12-11 12:04:14

问题


I try to run a code below. The code moves gmail attachment to the defined folders. It returns error "Object FolderIterator cannot find function getId". the code stops at var folderID = folder.getId() Folder is defined by DriveApp Why cannot Object FolderIterator find function getId?

  function sendtoDrive() {

  var ss1 = SpreadsheetApp.openById(SpreadSheetID);
  var ash = ss1.getSheets()[0];
  var dr = ash.getDataRange();
  var lr = dr.getLastRow();
  var dvs = dr.getValues();
  var n=0;
 var properties = PropertiesService.getScriptProperties();

  for(n=1;n<lr;n++ ){
    try {
      var sdr = dvs[n][0];
      try {
        var folder = DriveApp.getFoldersByName(sdr);
      }
      catch (e) {
        try {
          var folder = DriveApp.createFolder(sdr);
        }
        catch (e) {
          Logger.log(e.message);
          throw e;
        }        
      } 
      var mailsAlreadyProcessed = properties.getProperty(sdr);
      if(mailsAlreadyProcessed == undefined){
         var folderID=folder.getId()
         properties.setProperty(sdr, folderID + ',');
        var mailsAlreadyProcessed = properties.getProperty(sdr);
      }

      var label = GmailApp.getUserLabelByName(sdr);
      var labelDone = GmailApp.getUserLabelByName('Done');
      var threads = label.getThreads();

      if (threads.length > 0) {
        var folderId = mailsAlreadyProcessed.split(',')[0];
        var folder = DriveApp.getFolderById(folderId);

        for (i in threads) {
          if (threads[i].getLabels() != 'Done') {
            var messages = threads[i].getMessages();
            for (j in messages) {
              var attachments = messages[j].getAttachments();
              if (attachments.length > 0 && mailsAlreadyProcessed.indexOf(messages[j].getId()) == -1) {
                mailsAlreadyProcessed += messages[j].getId();

                for (k in attachments) {
                  var file = attachments[k];
                  folder.createFile(file);
                  Utilities.sleep(100); 
                }

                ScriptProperties.setProperty('mailsAlreadyProcessed', mailsAlreadyProcessed);
              }
            }
            labelDone.addToThread(threads[i]);
            label.removeFromThread(threads[i]);
            Utilities.sleep(100); 
          }
        }
      }
    }      
    catch (e) {
      Logger.log(e.message);
      throw e;
    }
  }
}

回答1:


DriveApp.getFoldersByName(sdr) returns a folder iterator because in Google Drive more than one folder can have the same name. If you're absolutely certain than only one folder with that name exists then you can get the folder object with a .next() following the code.

folder = DriveApp.getFoldersByName(sdr).next();


来源:https://stackoverflow.com/questions/33578071/why-cannot-object-folderiterator-find-function-getid

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!