本文介绍了为什么Object FolderIterator无法找到函数getId?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我尝试在下面运行代码.该代码将gmail附件移动到已定义的文件夹.它返回错误对象FolderIterator无法找到函数getId".代码在var folderID = folder.getId()处停止文件夹由DriveApp定义为什么Object FolderIterator无法找到函数getId?

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 DriveAppWhy 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;
    }
  }
}

推荐答案

DriveApp.getFoldersByName(sdr)返回一个文件夹迭代器,因为在Google云端硬盘中,多个文件夹可以具有相同的名称.如果您完全确定只存在一个具有该名称的文件夹,则可以在代码后加上.next()来获得该文件夹对象.

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();

这篇关于为什么Object FolderIterator无法找到函数getId?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

08-27 11:52
查看更多