2015-11-07 2 views
1

Я пытаюсь запустить код ниже. Код перемещает вложение gmail в определенные папки. Он возвращает ошибку «Object FolderIterator не может найти функцию getId». код останавливается на var folderID = folder.getId() Папка определяется по DriveApp Почему объект FolderIterator не может найти функцию getId?Почему объект FolderIterator не может найти функцию 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; 
    } 
    } 
} 

ответ

2

DriveApp.getFoldersByName(sdr) возвращает итератор папку, потому что в Google Drive более чем одна папка может иметь такое же имя. Если вы абсолютно уверены, что существует только одна папка с таким именем, вы можете получить объект папки с кодом .next(), следующего за кодом.

folder = DriveApp.getFoldersByName(sdr).next(); 
Смежные вопросы