【问题标题】:Why cannot Object FolderIterator find function getId?为什么 Object FolderIterator 找不到函数 getId?
【发布时间】:2015-11-07 01:20:03
【问题描述】:

我尝试在下面运行代码。该代码将 gmail 附件移动到定义的文件夹。 它返回错误“Object FolderIterator 找不到函数 getId”。 代码停在var folderID = folder.getId() 文件夹由DriveApp 定义 为什么 Object 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;
    }
  }
}

【问题讨论】:

    标签: google-apps-script gmail


    【解决方案1】:

    DriveApp.getFoldersByName(sdr) 返回一个文件夹迭代器,因为在 Google Drive 中可以有多个文件夹具有相同的名称。 如果您绝对确定仅存在一个具有该名称的文件夹,那么您可以在代码后获取带有.next() 的文件夹对象。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-04-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-26
      • 1970-01-01
      相关资源
      最近更新 更多